├── .gitignore ├── .php-cs-fixer.dist.php ├── .travis.yml ├── LICENSE ├── README.md ├── composer.json ├── phpstan.neon.dist ├── phpunit.xml.dist ├── src ├── DependencyInjection │ ├── Configuration.php │ └── VelhronDadataExtension.php ├── Exception │ ├── DadataException.php │ └── InvalidConfigException.php ├── Model │ ├── Request │ │ ├── AbstractRequest.php │ │ ├── Clean │ │ │ ├── AddressRequest.php │ │ │ ├── BirthdateRequest.php │ │ │ ├── CleanRequest.php │ │ │ ├── EmailRequest.php │ │ │ ├── NameRequest.php │ │ │ ├── PassportRequest.php │ │ │ ├── PhoneRequest.php │ │ │ └── VehicleRequest.php │ │ ├── Find │ │ │ ├── AddressRequest.php │ │ │ ├── AffiliatedPartyRequest.php │ │ │ ├── BankRequest.php │ │ │ ├── CountryRequest.php │ │ │ ├── DeliveryRequest.php │ │ │ ├── FiasRequest.php │ │ │ ├── FindRequest.php │ │ │ ├── FnsUnitRequest.php │ │ │ ├── FtsUnitRequest.php │ │ │ ├── OktmoRequest.php │ │ │ ├── PartyRequest.php │ │ │ ├── PostalUnitRequest.php │ │ │ └── RegionCourtRequest.php │ │ ├── General │ │ │ ├── BalanceRequest.php │ │ │ ├── GeneralRequest.php │ │ │ ├── StatRequest.php │ │ │ └── VersionRequest.php │ │ ├── Geolocate │ │ │ ├── AddressRequest.php │ │ │ ├── GeolocateRequest.php │ │ │ └── PostalUnitRequest.php │ │ ├── Iplocate │ │ │ └── AddressRequest.php │ │ └── Suggest │ │ │ ├── AddressRequest.php │ │ │ ├── BankRequest.php │ │ │ ├── CarBrandRequest.php │ │ │ ├── CountryRequest.php │ │ │ ├── CurrencyRequest.php │ │ │ ├── EmailRequest.php │ │ │ ├── FiasRequest.php │ │ │ ├── FioRequest.php │ │ │ ├── FmsUnitRequest.php │ │ │ ├── FnsUnitRequest.php │ │ │ ├── FtsUnitRequest.php │ │ │ ├── MetroRequest.php │ │ │ ├── Okpd2Request.php │ │ │ ├── OktmoRequest.php │ │ │ ├── Okved2Request.php │ │ │ ├── PartyRequest.php │ │ │ ├── PostalUnitRequest.php │ │ │ ├── RegionCourtRequest.php │ │ │ └── SuggestRequest.php │ └── Response │ │ ├── AbstractResponse.php │ │ ├── Clean │ │ ├── AddressResponse.php │ │ ├── BirthdateResponse.php │ │ ├── CleanResponse.php │ │ ├── EmailResponse.php │ │ ├── NameResponse.php │ │ ├── PassportResponse.php │ │ ├── PhoneResponse.php │ │ └── VehicleResponse.php │ │ ├── Find │ │ ├── AffiliatedPartyResponse.php │ │ └── DeliveryResponse.php │ │ ├── General │ │ └── StatResponse.php │ │ ├── Geolocate │ │ └── GeolocateResponse.php │ │ ├── Iplocate │ │ └── IplocateResponse.php │ │ └── Suggest │ │ ├── AddressResponse.php │ │ ├── BankResponse.php │ │ ├── CarBrandResponse.php │ │ ├── CountryResponse.php │ │ ├── CurrencyResponse.php │ │ ├── EmailResponse.php │ │ ├── FioResponse.php │ │ ├── FmsUnitResponse.php │ │ ├── FnsUnitResponse.php │ │ ├── FtsUnitResponse.php │ │ ├── MetroResponse.php │ │ ├── Okpd2Response.php │ │ ├── OktmoResponse.php │ │ ├── Okved2Response.php │ │ ├── PartyResponse.php │ │ ├── PhoneResponse.php │ │ ├── PostalUnitResponse.php │ │ ├── RegionCourtResponse.php │ │ └── SuggestResponse.php ├── RequestFactory.php ├── Resolver.php ├── Resources │ └── config │ │ └── services.yaml ├── ResponseFactory.php ├── Service │ ├── AbstractService.php │ ├── DadataClean.php │ ├── DadataGeneral.php │ ├── DadataGeolocate.php │ ├── DadataIplocate.php │ └── DadataSuggest.php ├── Traits │ ├── Address.php │ ├── Email.php │ └── Phone.php └── VelhronDadataBundle.php └── tests ├── DependencyInjection ├── VelhronDadataExtensionTest.php └── config.yaml ├── Service ├── DadataCleanTest.php ├── DadataGeneralTest.php ├── DadataGeolocateTest.php ├── DadataIplocateTest.php ├── DadataServiceTest.php └── DadataSuggestTest.php ├── TestingKernel.php └── mocks ├── Clean ├── address.json ├── birthdate.json ├── email.json ├── name.json ├── passport.json ├── phone.json └── vehicle.json ├── Find ├── address.json ├── affiliatedParty.json ├── bank.json ├── country.json ├── delivery.json ├── fias.json ├── fnsUnit.json ├── ftsUnit.json ├── oktmo.json ├── party.json ├── postalUnit.json └── regionCourt.json ├── General ├── balance.json └── stat.json ├── Geolocate ├── address.json └── postalUnit.json ├── Iplocate └── address.json └── Suggest ├── address.json ├── bank.json ├── carBrand.json ├── country.json ├── currency.json ├── email.json ├── fias.json ├── fio.json ├── fmsUnit.json ├── fnsUnit.json ├── ftsUnit.json ├── metro.json ├── okpd2.json ├── oktmo.json ├── okved2.json ├── party.json ├── postalUnit.json └── regionCourt.json /.gitignore: -------------------------------------------------------------------------------- 1 | vendor 2 | composer.lock 3 | .idea 4 | .php_cs.cache 5 | .phpunit.result.cache -------------------------------------------------------------------------------- /.php-cs-fixer.dist.php: -------------------------------------------------------------------------------- 1 | in('src') 5 | ->in('tests') 6 | ; 7 | 8 | return (new PhpCsFixer\Config()) 9 | ->setRiskyAllowed(true) 10 | ->setRules([ 11 | '@Symfony' => true, 12 | 'array_syntax' => ['syntax' => 'short'], 13 | 'declare_strict_types' => true, 14 | ]) 15 | ->setFinder($finder); 16 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | php: 4 | - '7.2' 5 | - '7.3' 6 | - '7.4' 7 | - '8.0' 8 | 9 | env: 10 | - SYMFONY_VERSION=4.4.* 11 | - SYMFONY_VERSION=5.4.* 12 | 13 | matrix: 14 | include: 15 | - php: 8.0 16 | env: SYMFONY_VERSION=6.0.* 17 | 18 | cache: 19 | directories: 20 | - ~/.composer/cache/files 21 | 22 | install: 23 | - composer require symfony/config:${SYMFONY_VERSION} --no-update --no-scripts --prefer-dist 24 | - composer require symfony/dependency-injection:${SYMFONY_VERSION} --no-update --no-scripts --prefer-dist 25 | - composer require symfony/http-client:${SYMFONY_VERSION} --no-update --no-scripts --prefer-dist 26 | - composer require symfony/http-kernel:${SYMFONY_VERSION} --no-update --no-scripts --prefer-dist 27 | - composer require symfony/yaml:${SYMFONY_VERSION} --no-update --no-scripts --prefer-dist 28 | 29 | - composer require --dev symfony/phpunit-bridge:${SYMFONY_VERSION} --no-update --no-scripts --prefer-dist 30 | 31 | - composer update --prefer-dist 32 | 33 | - vendor/bin/simple-phpunit install 34 | 35 | script: 36 | - composer check 37 | - composer validate --strict --no-check-lock 38 | - vendor/bin/php-cs-fixer fix -v --dry-run 39 | - vendor/bin/phpstan analyse 40 | - vendor/bin/simple-phpunit $PHPUNIT_FLAGS -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright © 2020 Velhron 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Symfony DaData 2 | 3 | [![Build Status](https://travis-ci.com/Velhron/dadata-bundle.svg?token=tDXe7dqwQ2esgAZeQapf&branch=master)](https://travis-ci.com/Velhron/dadata-bundle) 4 | 5 | ## Описание 6 | 7 | Symfony DaDataBundle предназначен для работы с API сервиса [ДаДата](https://dadata.ru). 8 | 9 | ## Установка 10 | 11 | Данный бандл может быть установлен с помощью [Composer](https://getcomposer.org). 12 | 13 | ### Приложения, которые используют Symfony Flex 14 | 15 | Откройте командную консоль, перейдите в каталог вашего проекта и выполните: 16 | 17 | ```bash 18 | composer require velhron/dadata-bundle 19 | ``` 20 | 21 | ### Приложения, которые не используют Symfony Flex 22 | 23 | #### Шаг #1: Загрузка бандла 24 | 25 | Откройте командную консоль, перейдите в каталог вашего проекта и выполните следующую команду, чтобы загрузить последнюю 26 | стабильную версию этого пакета: 27 | 28 | ```bash 29 | composer require velhron/dadata-bundle 30 | ``` 31 | 32 | #### Шаг #2: Активация бандла 33 | 34 | Включите пакет, добавив его в список зарегистрированных пакетов в файле `app/AppKernel.php` вашего проекта: 35 | 36 | ```php 37 | dadataSuggest = $dadataSuggest; 93 | } 94 | } 95 | ``` 96 | 97 | Всего сервисов - 5, а именно: 98 | 1. `DadataSuggest` - [подсказки](https://dadata.ru/api/suggest/) 99 | 2. `DadataClean` - [стандартизация](https://dadata.ru/api/clean/) 100 | 3. `DadataGeolocate` - [обратное геокодирование](https://dadata.ru/api/geolocate/) 101 | 4. `DadataIplocate` - [город по IP-адресу](https://dadata.ru/api/iplocate/) 102 | 5. `DadataGeneral` - остальные методы 103 | 104 | Все доступные методы можно посмотреть в самих классах. 105 | 106 | Дополнительные параметры обычно передаются вторым параметром в виде ассоциативного массива. 107 | Все параметры аналогичны тем, что указаны на сайте ДаДаты. 108 | 109 | ### [API подсказок](https://dadata.ru/api/suggest/) 110 | 111 | Например, подсказки по адресам: 112 | 113 | ```php 114 | $response = $dadataSuggest->suggestAddress('москва хабар', ['count' => 10]); 115 | $address = $response[0]->value; 116 | ``` 117 | 118 | Подсказки по организациям: 119 | 120 | ```php 121 | $response = $dadataSuggest->suggestParty('сбербанк', ['count' => 2]); 122 | $inn = $response[0]->inn; 123 | ``` 124 | 125 | ### [API стандартизации](https://dadata.ru/api/clean/) 126 | 127 | Например, стандартизация ФИО: 128 | 129 | ```php 130 | $response = $dadataClean->cleanName('Срегей владимерович иванов'); 131 | $name = $response->result; 132 | ``` 133 | 134 | ### [Обратное геокодирование](https://dadata.ru/api/geolocate/) 135 | 136 | Например, адрес по координатам: 137 | 138 | ```php 139 | $response = $dadataGeolocate->geolocateAddress(55.878, 37.653); 140 | $address = $response[0]->value; 141 | ``` 142 | 143 | ### [Город по IP-адресу](https://dadata.ru/api/iplocate/) 144 | 145 | Получение города по IP адресу: 146 | 147 | ```php 148 | $response = $dadataIplocate->iplocateAddress('46.226.227.20'); 149 | $city = $response->value; 150 | ``` 151 | 152 | ### [Адрес по коду КЛАДР или ФИАС](https://dadata.ru/api/find-address/) 153 | 154 | Получение адреса по коду КЛАДР: 155 | 156 | ```php 157 | $response = $dadataSuggest->findAddress('77000000000268400'); 158 | $address = $response[0]->value; 159 | ``` 160 | 161 | ### [Поиск аффилированных компаний](https://dadata.ru/api/find-affiliated/) 162 | 163 | ```php 164 | $response = $dadataSuggest->findAffiliatedParty('7736207543'); 165 | $value = $response[0]->value; 166 | ``` 167 | 168 | ## Лицензия 169 | 170 | [MIT License](https://opensource.org/licenses/mit-license) © Velhron -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "velhron/dadata-bundle", 3 | "description": "DaData for Symfony", 4 | "keywords": ["dadata", "symfony-bundle", "symfony-dadata"], 5 | "type": "symfony-bundle", 6 | "license": "MIT", 7 | "authors": [ 8 | { 9 | "name": "Velhron", 10 | "email": "velhron@gmail.com" 11 | } 12 | ], 13 | "require": { 14 | "php": "^7.1|^8.0", 15 | "ext-json": "*", 16 | "symfony/config": "^4.4|^5.0|^6.0|^7.0", 17 | "symfony/dependency-injection": "^4.4|^5.0|^6.0|^7.0", 18 | "symfony/http-client": "^4.4|^5.0|^6.0|^7.0", 19 | "symfony/http-kernel": "^4.4|^5.0|^6.0|^7.0", 20 | "symfony/yaml": "^4.4|^5.0|^6.0|^7.0" 21 | }, 22 | "require-dev": { 23 | "friendsofphp/php-cs-fixer": "^2.16", 24 | "phpstan/phpstan": "^0.12.25", 25 | "symfony/phpunit-bridge": "^4.4|^5.0|^6.0|^7.0" 26 | }, 27 | "autoload": { 28 | "psr-4": { 29 | "Velhron\\DadataBundle\\": "src/" 30 | } 31 | }, 32 | "autoload-dev": { 33 | "psr-4": { 34 | "Velhron\\DadataBundle\\Tests\\": "tests" 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /phpstan.neon.dist: -------------------------------------------------------------------------------- 1 | parameters: 2 | inferPrivatePropertyTypeFromConstructor: true 3 | checkMissingIterableValueType: false 4 | level: 7 5 | autoload_directories: 6 | - src 7 | paths: 8 | - src 9 | ignoreErrors: 10 | - '#Call to an undefined method Symfony\\Component\\Config\\Definition\\Builder\\NodeDefinition::.+\(\)#' -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | 13 | 14 | 15 | ./tests 16 | 17 | 18 | 19 | 20 | 21 | ./src 22 | 23 | ./src/Resources 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/DependencyInjection/Configuration.php: -------------------------------------------------------------------------------- 1 | getRootNode() 20 | ->children() 21 | ->scalarNode('token')->end() 22 | ->scalarNode('secret')->end() 23 | ->scalarNode('base_general_url')->defaultValue('https://dadata.ru/api/v2')->end() 24 | ->scalarNode('base_cleaner_url')->defaultValue('https://cleaner.dadata.ru/api/v1/clean')->end() 25 | ->scalarNode('base_suggestions_url')->defaultValue('https://suggestions.dadata.ru/suggestions/api/4_1/rs')->end() 26 | ->end() 27 | ; 28 | 29 | return $treeBuilder; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/DependencyInjection/VelhronDadataExtension.php: -------------------------------------------------------------------------------- 1 | processConfiguration($configuration, $configs); 21 | 22 | $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 23 | $loader->load('services.yaml'); 24 | 25 | $container->setParameter('velhron_dadata.token', $config['token']); 26 | $container->setParameter('velhron_dadata.secret', $config['secret']); 27 | $container->setParameter('velhron_dadata.base_general_url', $config['base_general_url']); 28 | $container->setParameter('velhron_dadata.base_cleaner_url', $config['base_cleaner_url']); 29 | $container->setParameter('velhron_dadata.base_suggestions_url', $config['base_suggestions_url']); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/Exception/DadataException.php: -------------------------------------------------------------------------------- 1 | getCode()) { 15 | case 400: 16 | $message = 'Некорректный запрос (невалидный JSON или XML)'; 17 | break; 18 | case 401: 19 | $message = 'В запросе отсутствует API-ключ'; 20 | break; 21 | case 403: 22 | $message = 'В запросе указан несуществующий API-ключ. Или не подтверждена почта. Или исчерпан дневной лимит по количеству запросов'; 23 | break; 24 | case 405: 25 | $message = 'Неправильный метод запроса'; 26 | break; 27 | case 413: 28 | $message = 'Слишком большая длина запроса или слишком много условий'; 29 | break; 30 | case 429: 31 | $message = 'Слишком много запросов в секунду или новых соединений в минуту'; 32 | break; 33 | default: 34 | $message = 'Произошла внутренняя ошибка сервиса'; 35 | break; 36 | } 37 | 38 | parent::__construct($message, $exception->getCode(), $exception); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/Exception/InvalidConfigException.php: -------------------------------------------------------------------------------- 1 | requestUrl = $url; 22 | } 23 | 24 | /** 25 | * Тело запроса. 26 | */ 27 | abstract public function getBody(): array; 28 | 29 | public function setQuery(string $query): self 30 | { 31 | $this->query = $query; 32 | 33 | return $this; 34 | } 35 | 36 | public function getUrl(): string 37 | { 38 | return $this->requestUrl; 39 | } 40 | 41 | public function fillOptions(array $data): self 42 | { 43 | foreach (get_object_vars($this) as $property => $value) { 44 | if (isset($data[$property])) { 45 | $this->{$property} = $data[$property]; 46 | } 47 | } 48 | 49 | return $this; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/Model/Request/Clean/AddressRequest.php: -------------------------------------------------------------------------------- 1 | query]; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Model/Request/Clean/EmailRequest.php: -------------------------------------------------------------------------------- 1 | ip = $ip; 20 | 21 | return $this; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/Model/Request/Suggest/AddressRequest.php: -------------------------------------------------------------------------------- 1 | $value) { 29 | $camelCaseProperty = $this->toCamelCase($property); 30 | if (property_exists($this, $camelCaseProperty)) { 31 | $this->{$camelCaseProperty} = $value; 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/Model/Response/Clean/EmailResponse.php: -------------------------------------------------------------------------------- 1 | address = new AddressResponse($data['data']['address']); 98 | } 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /src/Model/Response/Find/DeliveryResponse.php: -------------------------------------------------------------------------------- 1 | date = $data['date']; 32 | $this->merging = $data['services']['merging'] ?? null; 33 | $this->suggestions = $data['services']['suggestions'] ?? null; 34 | $this->clean = $data['services']['clean'] ?? null; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/Model/Response/Geolocate/GeolocateResponse.php: -------------------------------------------------------------------------------- 1 | address = new AddressResponse($data['data']['address']); 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/Model/Response/Suggest/CarBrandResponse.php: -------------------------------------------------------------------------------- 1 | address = new AddressResponse($data['data']['address']); 190 | } 191 | 192 | if (isset($data['data']['emails']) && is_array($data['data']['emails'])) { 193 | foreach ($data['data']['emails'] as $email) { 194 | $this->emails[] = new EmailResponse($email); 195 | } 196 | } 197 | 198 | if (isset($data['data']['phones']) && is_array($data['data']['phones'])) { 199 | foreach ($data['data']['phones'] as $phone) { 200 | $this->phones[] = new PhoneResponse($phone); 201 | } 202 | } 203 | } 204 | } 205 | -------------------------------------------------------------------------------- /src/Model/Response/Suggest/PhoneResponse.php: -------------------------------------------------------------------------------- 1 | value = $data['value'] ?? null; 24 | $this->unrestrictedValue = $data['unrestricted_value'] ?? null; 25 | 26 | foreach ($data['data'] ?? [] as $property => $value) { 27 | $camelCaseProperty = $this->toCamelCase($property); 28 | if (property_exists($this, $camelCaseProperty)) { 29 | $this->{$camelCaseProperty} = $value; 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/RequestFactory.php: -------------------------------------------------------------------------------- 1 | resolver = $resolver; 20 | } 21 | 22 | /** 23 | * @throws InvalidConfigException 24 | */ 25 | public function create(string $methodName): AbstractRequest 26 | { 27 | $requestClass = $this->resolver->getMatchedRequest($methodName); 28 | 29 | if (null === $requestClass) { 30 | throw new InvalidConfigException("Для метода $methodName не указан параметр \"request\""); 31 | } 32 | 33 | $url = $this->resolver->getMatchedUrl($methodName); 34 | 35 | if (null === $url) { 36 | throw new InvalidConfigException("Для метода $methodName не указан параметр \"url\""); 37 | } 38 | 39 | return new $requestClass($url); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/Resolver.php: -------------------------------------------------------------------------------- 1 | methodsByName[$method['name']])) { 26 | throw new InvalidConfigException('Наименование метода должно быть уникально'); 27 | } 28 | 29 | $this->methodsByName[$method['name']] = $method; 30 | } else { 31 | throw new InvalidConfigException('Для одного из методов не указан параметр "name"'); 32 | } 33 | } 34 | } 35 | 36 | public function getMatchedRequest(string $methodName): ?string 37 | { 38 | $method = $this->resolve($methodName); 39 | 40 | return isset($method, $method['request']) ? $method['request'] : null; 41 | } 42 | 43 | public function getMatchedResponse(string $methodName): ?string 44 | { 45 | $method = $this->resolve($methodName); 46 | 47 | return isset($method, $method['response']) ? $method['response'] : null; 48 | } 49 | 50 | public function getMatchedUrl(string $methodName): ?string 51 | { 52 | $method = $this->resolve($methodName); 53 | 54 | return isset($method, $method['url']) ? $method['url'] : null; 55 | } 56 | 57 | public function resolve(string $methodName): ?array 58 | { 59 | return $this->methodsByName[$methodName] ?? null; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/Resources/config/services.yaml: -------------------------------------------------------------------------------- 1 | services: 2 | Velhron\DadataBundle\Service\AbstractService: 3 | abstract: true 4 | arguments: 5 | - '%velhron_dadata.token%' 6 | - '%velhron_dadata.secret%' 7 | - '@http_client' 8 | - '@Velhron\DadataBundle\RequestFactory' 9 | - '@Velhron\DadataBundle\ResponseFactory' 10 | 11 | Velhron\DadataBundle\Service\DadataGeneral: 12 | parent: Velhron\DadataBundle\Service\AbstractService 13 | 14 | Velhron\DadataBundle\Service\DadataSuggest: 15 | parent: Velhron\DadataBundle\Service\AbstractService 16 | 17 | Velhron\DadataBundle\Service\DadataClean: 18 | parent: Velhron\DadataBundle\Service\AbstractService 19 | 20 | Velhron\DadataBundle\Service\DadataIplocate: 21 | parent: Velhron\DadataBundle\Service\AbstractService 22 | 23 | Velhron\DadataBundle\Service\DadataGeolocate: 24 | parent: Velhron\DadataBundle\Service\AbstractService 25 | 26 | Velhron\DadataBundle\RequestFactory: 27 | public: true 28 | arguments: 29 | - '@Velhron\DadataBundle\Resolver' 30 | 31 | Velhron\DadataBundle\ResponseFactory: 32 | public: true 33 | arguments: 34 | - '@Velhron\DadataBundle\Resolver' 35 | 36 | Velhron\DadataBundle\Resolver: 37 | public: true 38 | arguments: 39 | $methods: 40 | - name: 'suggestAddress' 41 | request: Velhron\DadataBundle\Model\Request\Suggest\AddressRequest 42 | response: Velhron\DadataBundle\Model\Response\Suggest\AddressResponse 43 | url: '%velhron_dadata.base_suggestions_url%/suggest/address' 44 | 45 | - name: 'suggestParty' 46 | request: Velhron\DadataBundle\Model\Request\Suggest\PartyRequest 47 | response: Velhron\DadataBundle\Model\Response\Suggest\PartyResponse 48 | url: '%velhron_dadata.base_suggestions_url%/suggest/party' 49 | 50 | - name: 'suggestBank' 51 | request: Velhron\DadataBundle\Model\Request\Suggest\BankRequest 52 | response: Velhron\DadataBundle\Model\Response\Suggest\BankResponse 53 | url: '%velhron_dadata.base_suggestions_url%/suggest/bank' 54 | 55 | - name: 'suggestFio' 56 | request: Velhron\DadataBundle\Model\Request\Suggest\FioRequest 57 | response: Velhron\DadataBundle\Model\Response\Suggest\FioResponse 58 | url: '%velhron_dadata.base_suggestions_url%/suggest/fio' 59 | 60 | - name: 'suggestEmail' 61 | request: Velhron\DadataBundle\Model\Request\Suggest\EmailRequest 62 | response: Velhron\DadataBundle\Model\Response\Suggest\EmailResponse 63 | url: '%velhron_dadata.base_suggestions_url%/suggest/email' 64 | 65 | - name: 'suggestFias' 66 | request: Velhron\DadataBundle\Model\Request\Suggest\FiasRequest 67 | response: Velhron\DadataBundle\Model\Response\Suggest\AddressResponse 68 | url: '%velhron_dadata.base_suggestions_url%/suggest/fias' 69 | 70 | - name: 'suggestFmsUnit' 71 | request: Velhron\DadataBundle\Model\Request\Suggest\FmsUnitRequest 72 | response: Velhron\DadataBundle\Model\Response\Suggest\FmsUnitResponse 73 | url: '%velhron_dadata.base_suggestions_url%/suggest/fms_unit' 74 | 75 | - name: 'suggestPostalUnit' 76 | request: Velhron\DadataBundle\Model\Request\Suggest\PostalUnitRequest 77 | response: Velhron\DadataBundle\Model\Response\Suggest\PostalUnitResponse 78 | url: '%velhron_dadata.base_suggestions_url%/suggest/postal_unit' 79 | 80 | - name: 'suggestFnsUnit' 81 | request: Velhron\DadataBundle\Model\Request\Suggest\FnsUnitRequest 82 | response: Velhron\DadataBundle\Model\Response\Suggest\FnsUnitResponse 83 | url: '%velhron_dadata.base_suggestions_url%/suggest/fns_unit' 84 | 85 | - name: 'suggestFtsUnit' 86 | request: Velhron\DadataBundle\Model\Request\Suggest\FtsUnitRequest 87 | response: Velhron\DadataBundle\Model\Response\Suggest\FtsUnitResponse 88 | url: '%velhron_dadata.base_suggestions_url%/suggest/fts_unit' 89 | 90 | - name: 'suggestRegionCourt' 91 | request: Velhron\DadataBundle\Model\Request\Suggest\RegionCourtRequest 92 | response: Velhron\DadataBundle\Model\Response\Suggest\RegionCourtResponse 93 | url: '%velhron_dadata.base_suggestions_url%/suggest/region_court' 94 | 95 | - name: 'suggestMetro' 96 | request: Velhron\DadataBundle\Model\Request\Suggest\MetroRequest 97 | response: Velhron\DadataBundle\Model\Response\Suggest\MetroResponse 98 | url: '%velhron_dadata.base_suggestions_url%/suggest/metro' 99 | 100 | - name: 'suggestCarBrand' 101 | request: Velhron\DadataBundle\Model\Request\Suggest\CarBrandRequest 102 | response: Velhron\DadataBundle\Model\Response\Suggest\CarBrandResponse 103 | url: '%velhron_dadata.base_suggestions_url%/suggest/car_brand' 104 | 105 | - name: 'suggestCountry' 106 | request: Velhron\DadataBundle\Model\Request\Suggest\CountryRequest 107 | response: Velhron\DadataBundle\Model\Response\Suggest\CountryResponse 108 | url: '%velhron_dadata.base_suggestions_url%/suggest/country' 109 | 110 | - name: 'suggestCurrency' 111 | request: Velhron\DadataBundle\Model\Request\Suggest\CurrencyRequest 112 | response: Velhron\DadataBundle\Model\Response\Suggest\CurrencyResponse 113 | url: '%velhron_dadata.base_suggestions_url%/suggest/currency' 114 | 115 | - name: 'suggestOkved2' 116 | request: Velhron\DadataBundle\Model\Request\Suggest\Okved2Request 117 | response: Velhron\DadataBundle\Model\Response\Suggest\Okved2Response 118 | url: '%velhron_dadata.base_suggestions_url%/suggest/okved2' 119 | 120 | - name: 'suggestOkpd2' 121 | request: Velhron\DadataBundle\Model\Request\Suggest\Okpd2Request 122 | response: Velhron\DadataBundle\Model\Response\Suggest\Okpd2Response 123 | url: '%velhron_dadata.base_suggestions_url%/suggest/okpd2' 124 | 125 | - name: 'suggestOktmo' 126 | request: Velhron\DadataBundle\Model\Request\Suggest\OktmoRequest 127 | response: Velhron\DadataBundle\Model\Response\Suggest\OktmoResponse 128 | url: '%velhron_dadata.base_suggestions_url%/suggest/oktmo' 129 | 130 | - name: 'findAddress' 131 | request: Velhron\DadataBundle\Model\Request\Find\AddressRequest 132 | response: Velhron\DadataBundle\Model\Response\Suggest\AddressResponse 133 | url: '%velhron_dadata.base_suggestions_url%/findById/address' 134 | 135 | - name: 'findPostalUnit' 136 | request: Velhron\DadataBundle\Model\Request\Find\PostalUnitRequest 137 | response: Velhron\DadataBundle\Model\Response\Suggest\PostalUnitResponse 138 | url: '%velhron_dadata.base_suggestions_url%/findById/postal_unit' 139 | 140 | - name: 'findDelivery' 141 | request: Velhron\DadataBundle\Model\Request\Find\DeliveryRequest 142 | response: Velhron\DadataBundle\Model\Response\Find\DeliveryResponse 143 | url: '%velhron_dadata.base_suggestions_url%/findById/delivery' 144 | 145 | - name: 'findParty' 146 | request: Velhron\DadataBundle\Model\Request\Find\PartyRequest 147 | response: Velhron\DadataBundle\Model\Response\Suggest\PartyResponse 148 | url: '%velhron_dadata.base_suggestions_url%/findById/party' 149 | 150 | - name: 'findBank' 151 | request: Velhron\DadataBundle\Model\Request\Find\BankRequest 152 | response: Velhron\DadataBundle\Model\Response\Suggest\BankResponse 153 | url: '%velhron_dadata.base_suggestions_url%/findById/bank' 154 | 155 | - name: 'findFias' 156 | request: Velhron\DadataBundle\Model\Request\Find\FiasRequest 157 | response: Velhron\DadataBundle\Model\Response\Suggest\AddressResponse 158 | url: '%velhron_dadata.base_suggestions_url%/findById/fias' 159 | 160 | - name: 'findAffiliatedParty' 161 | request: Velhron\DadataBundle\Model\Request\Find\AffiliatedPartyRequest 162 | response: Velhron\DadataBundle\Model\Response\Find\AffiliatedPartyResponse 163 | url: '%velhron_dadata.base_suggestions_url%/findAffiliated/party' 164 | 165 | - name: 'findOktmo' 166 | request: Velhron\DadataBundle\Model\Request\Find\OktmoRequest 167 | response: Velhron\DadataBundle\Model\Response\Suggest\OktmoResponse 168 | url: '%velhron_dadata.base_suggestions_url%/findById/oktmo' 169 | 170 | - name: 'findFnsUnit' 171 | request: Velhron\DadataBundle\Model\Request\Find\FnsUnitRequest 172 | response: Velhron\DadataBundle\Model\Response\Suggest\FnsUnitResponse 173 | url: '%velhron_dadata.base_suggestions_url%/findById/fns_unit' 174 | 175 | - name: 'findFtsUnit' 176 | request: Velhron\DadataBundle\Model\Request\Find\FtsUnitRequest 177 | response: Velhron\DadataBundle\Model\Response\Suggest\FtsUnitResponse 178 | url: '%velhron_dadata.base_suggestions_url%/findById/fts_unit' 179 | 180 | - name: 'findCountry' 181 | request: Velhron\DadataBundle\Model\Request\Find\CountryRequest 182 | response: Velhron\DadataBundle\Model\Response\Suggest\CountryResponse 183 | url: '%velhron_dadata.base_suggestions_url%/findById/country' 184 | 185 | - name: 'findRegionCourt' 186 | request: Velhron\DadataBundle\Model\Request\Find\RegionCourtRequest 187 | response: Velhron\DadataBundle\Model\Response\Suggest\RegionCourtResponse 188 | url: '%velhron_dadata.base_suggestions_url%/findById/region_court' 189 | 190 | - name: 'geolocateAddress' 191 | request: Velhron\DadataBundle\Model\Request\Geolocate\AddressRequest 192 | response: Velhron\DadataBundle\Model\Response\Suggest\AddressResponse 193 | url: '%velhron_dadata.base_suggestions_url%/geolocate/address' 194 | 195 | - name: 'geolocatePostalUnit' 196 | request: Velhron\DadataBundle\Model\Request\Geolocate\PostalUnitRequest 197 | response: Velhron\DadataBundle\Model\Response\Suggest\PostalUnitResponse 198 | url: '%velhron_dadata.base_suggestions_url%/geolocate/postal_unit' 199 | 200 | - name: 'iplocateAddress' 201 | request: Velhron\DadataBundle\Model\Request\Iplocate\AddressRequest 202 | response: Velhron\DadataBundle\Model\Response\Suggest\AddressResponse 203 | url: '%velhron_dadata.base_suggestions_url%/iplocate/address' 204 | 205 | - name: 'cleanAddress' 206 | request: Velhron\DadataBundle\Model\Request\Clean\AddressRequest 207 | response: Velhron\DadataBundle\Model\Response\Clean\AddressResponse 208 | url: '%velhron_dadata.base_cleaner_url%/address' 209 | 210 | - name: 'cleanPhone' 211 | request: Velhron\DadataBundle\Model\Request\Clean\PhoneRequest 212 | response: Velhron\DadataBundle\Model\Response\Clean\PhoneResponse 213 | url: '%velhron_dadata.base_cleaner_url%/phone' 214 | 215 | - name: 'cleanPassport' 216 | request: Velhron\DadataBundle\Model\Request\Clean\PassportRequest 217 | response: Velhron\DadataBundle\Model\Response\Clean\PassportResponse 218 | url: '%velhron_dadata.base_cleaner_url%/passport' 219 | 220 | - name: 'cleanBirthdate' 221 | request: Velhron\DadataBundle\Model\Request\Clean\BirthdateRequest 222 | response: Velhron\DadataBundle\Model\Response\Clean\BirthdateResponse 223 | url: '%velhron_dadata.base_cleaner_url%/birthdate' 224 | 225 | - name: 'cleanVehicle' 226 | request: Velhron\DadataBundle\Model\Request\Clean\VehicleRequest 227 | response: Velhron\DadataBundle\Model\Response\Clean\VehicleResponse 228 | url: '%velhron_dadata.base_cleaner_url%/vehicle' 229 | 230 | - name: 'cleanName' 231 | request: Velhron\DadataBundle\Model\Request\Clean\NameRequest 232 | response: Velhron\DadataBundle\Model\Response\Clean\NameResponse 233 | url: '%velhron_dadata.base_cleaner_url%/name' 234 | 235 | - name: 'cleanEmail' 236 | request: Velhron\DadataBundle\Model\Request\Clean\EmailRequest 237 | response: Velhron\DadataBundle\Model\Response\Clean\EmailResponse 238 | url: '%velhron_dadata.base_cleaner_url%/email' 239 | 240 | - name: 'balance' 241 | request: Velhron\DadataBundle\Model\Request\General\BalanceRequest 242 | url: '%velhron_dadata.base_general_url%/profile/balance' 243 | 244 | - name: 'stat' 245 | request: Velhron\DadataBundle\Model\Request\General\StatRequest 246 | url: '%velhron_dadata.base_general_url%/stat/daily' 247 | 248 | - name: 'version' 249 | request: Velhron\DadataBundle\Model\Request\General\VersionRequest 250 | url: '%velhron_dadata.base_general_url%/version' -------------------------------------------------------------------------------- /src/ResponseFactory.php: -------------------------------------------------------------------------------- 1 | resolver = $resolver; 20 | } 21 | 22 | /** 23 | * @throws InvalidConfigException 24 | */ 25 | public function create(string $methodName, array $data): AbstractResponse 26 | { 27 | $responseClass = $this->resolver->getMatchedResponse($methodName); 28 | 29 | if (null === $responseClass) { 30 | throw new InvalidConfigException("Для метода $methodName не указан параметр \"response\""); 31 | } 32 | 33 | return new $responseClass($data); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/Service/AbstractService.php: -------------------------------------------------------------------------------- 1 | token = $token; 48 | $this->secret = $secret; 49 | $this->httpClient = $httpClient; 50 | $this->requestFactory = $requestFactory; 51 | $this->responseFactory = $responseFactory; 52 | } 53 | 54 | /** 55 | * @throws DadataException 56 | */ 57 | abstract protected function query(AbstractRequest $request): array; 58 | } 59 | -------------------------------------------------------------------------------- /src/Service/DadataClean.php: -------------------------------------------------------------------------------- 1 | requestFactory->create($method); 32 | $request->setQuery($query); 33 | 34 | $responseData = $this->query($request); 35 | 36 | return $this->responseFactory->create($method, $responseData); 37 | } 38 | 39 | /** 40 | * {@inheritdoc} 41 | */ 42 | protected function query(AbstractRequest $request): array 43 | { 44 | try { 45 | $response = $this->httpClient->request('POST', $request->getUrl(), [ 46 | 'headers' => [ 47 | 'Content-Type' => 'application/json', 48 | 'Authorization' => "Token {$this->token}", 49 | 'X-Secret' => $this->secret, 50 | ], 51 | 'body' => json_encode($request->getBody()), 52 | ]); 53 | 54 | $result = json_decode($response->getContent(), true); 55 | 56 | return (1 === count($result)) ? array_shift($result) : $result; 57 | } catch (ExceptionInterface $exception) { 58 | throw new DadataException($exception); 59 | } 60 | } 61 | 62 | /** 63 | * Стандартизация адреса. 64 | * 65 | * - Разбивает адрес по отдельным полям (регион, город, улица, дом, квартира) согласно КЛАДР/ФИАС. 66 | * - Определяет корректный индекс по данным Почты России. 67 | * - Определяет округ и район города, геокоординаты, метро, площадь и стоимость квартиры. 68 | * - Достает коды КЛАДР, ФИАС, ОКАТО, ОКТМО и ИФНС. 69 | * 70 | * @param string $query Текст запроса 71 | * 72 | * @return AddressResponse Стандартизованный объект 73 | * 74 | * @throws DadataException|InvalidConfigException 75 | */ 76 | public function cleanAddress(string $query): AddressResponse 77 | { 78 | /** @var AddressResponse $response */ 79 | $response = $this->handle('cleanAddress', $query); 80 | 81 | return $response; 82 | } 83 | 84 | /** 85 | * Стандартизация телефона. 86 | * 87 | * Проверяет телефон по справочнику Россвязи. 88 | * Определяет оператора с учётом переноса номеров, заполняет страну, город и часовой пояс. 89 | * 90 | * @param string $query Текст запроса 91 | * 92 | * @return PhoneResponse Стандартизованный объект 93 | * 94 | * @throws DadataException|InvalidConfigException 95 | */ 96 | public function cleanPhone(string $query): PhoneResponse 97 | { 98 | /** @var PhoneResponse $response */ 99 | $response = $this->handle('cleanPhone', $query); 100 | 101 | return $response; 102 | } 103 | 104 | /** 105 | * Стандартизация паспорта. 106 | * 107 | * Проверяет паспорт по справочнику недействительных паспортов МВД. 108 | * 109 | * @param string $query Текст запроса 110 | * 111 | * @return PassportResponse Стандартизованный объект 112 | * 113 | * @throws DadataException|InvalidConfigException 114 | */ 115 | public function cleanPassport(string $query): PassportResponse 116 | { 117 | /** @var PassportResponse $response */ 118 | $response = $this->handle('cleanPassport', $query); 119 | 120 | return $response; 121 | } 122 | 123 | /** 124 | * Стандартизация даты рождения. 125 | * 126 | * @param string $query Текст запроса 127 | * 128 | * @return BirthdateResponse Стандартизованный объект 129 | * 130 | * @throws DadataException|InvalidConfigException 131 | */ 132 | public function cleanBirthdate(string $query): BirthdateResponse 133 | { 134 | /** @var BirthdateResponse $response */ 135 | $response = $this->handle('cleanBirthdate', $query); 136 | 137 | return $response; 138 | } 139 | 140 | /** 141 | * Стандартизация автомобиля. 142 | * 143 | * @param string $query Текст запроса 144 | * 145 | * @return VehicleResponse Стандартизованный объект 146 | * 147 | * @throws DadataException|InvalidConfigException 148 | */ 149 | public function cleanVehicle(string $query): VehicleResponse 150 | { 151 | /** @var VehicleResponse $response */ 152 | $response = $this->handle('cleanVehicle', $query); 153 | 154 | return $response; 155 | } 156 | 157 | /** 158 | * Стандартизация ФИО. 159 | * 160 | * Разбивает ФИО из строки по отдельным полям (фамилия, имя, отчество). Определяет пол и склоняет по падежам. 161 | * 162 | * @param string $query Текст запроса 163 | * 164 | * @return NameResponse Стандартизованный объект 165 | * 166 | * @throws DadataException|InvalidConfigException 167 | */ 168 | public function cleanName(string $query): NameResponse 169 | { 170 | /** @var NameResponse $response */ 171 | $response = $this->handle('cleanName', $query); 172 | 173 | return $response; 174 | } 175 | 176 | /** 177 | * Стандартизация e-mail. 178 | * 179 | * Исправляет опечатки и проверяет на одноразовый адрес. 180 | * Классифицирует адреса на личные, корпоративные и «ролевые». 181 | * 182 | * @param string $query Текст запроса 183 | * 184 | * @return EmailResponse Стандартизованный объект 185 | * 186 | * @throws DadataException|InvalidConfigException 187 | */ 188 | public function cleanEmail(string $query): EmailResponse 189 | { 190 | /** @var EmailResponse $response */ 191 | $response = $this->handle('cleanEmail', $query); 192 | 193 | return $response; 194 | } 195 | } 196 | -------------------------------------------------------------------------------- /src/Service/DadataGeneral.php: -------------------------------------------------------------------------------- 1 | httpClient->request('GET', $request->getUrl(), [ 23 | 'headers' => [ 24 | 'Authorization' => "Token {$this->token}", 25 | 'X-Secret' => $this->secret, 26 | ], 27 | 'query' => $request->getBody(), 28 | ]); 29 | 30 | return json_decode($response->getContent(), true) ?? []; 31 | } catch (ExceptionInterface $exception) { 32 | throw new DadataException($exception); 33 | } 34 | } 35 | 36 | /** 37 | * Возвращает текущий баланс счета. 38 | * 39 | * Возвращает сумму в рублях с точностью до копеек, десятичный разделитель — точка. 40 | * 41 | * @return float Текущий баланс счета 42 | * 43 | * @throws DadataException|InvalidConfigException 44 | */ 45 | public function balance(): float 46 | { 47 | $responseData = $this->query($this->requestFactory->create('balance')); 48 | 49 | return $responseData['balance'] ?? 0.0; 50 | } 51 | 52 | /** 53 | * Возвращает агрегированную статистику за конкретный день по каждому из сервисов: стандартизация, подсказки, поиск дублей. 54 | * 55 | * Дата должна быть задана в формате YYYY-MM-DD. По умолчанию, сегодня. 56 | * 57 | * @param string|null $date Дата в формате YYYY-MM-DD 58 | * 59 | * @return StatResponse Статистика 60 | * 61 | * @throws DadataException|InvalidConfigException 62 | */ 63 | public function stat(string $date = null): StatResponse 64 | { 65 | /** @var StatRequest $request */ 66 | $request = $this->requestFactory->create('stat'); 67 | $request->date = $date; 68 | $responseData = $this->query($request); 69 | 70 | return new StatResponse($responseData); 71 | } 72 | 73 | /** 74 | * Возвращает даты актуальности справочников (ФИАС, ЕГРЮЛ, банки и другие). 75 | * 76 | * @return array Информация по датам актуальности справочников 77 | * 78 | * @throws DadataException|InvalidConfigException 79 | */ 80 | public function version(): array 81 | { 82 | return $this->query($this->requestFactory->create('version')); 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /src/Service/DadataGeolocate.php: -------------------------------------------------------------------------------- 1 | requestFactory->create($method); 26 | 27 | $request->fillOptions(array_merge([ 28 | 'lat' => $latitude, 29 | 'lon' => $longitude, 30 | ], $options)); 31 | 32 | $responseData = $this->query($request); 33 | foreach ($responseData['suggestions'] ?? [] as $suggestion) { 34 | $data[] = $this->responseFactory->create($method, $suggestion); 35 | } 36 | 37 | return $data ?? []; 38 | } 39 | 40 | /** 41 | * {@inheritdoc} 42 | */ 43 | protected function query(AbstractRequest $request): array 44 | { 45 | try { 46 | $response = $this->httpClient->request('POST', $request->getUrl(), [ 47 | 'headers' => [ 48 | 'Content-Type' => 'application/json', 49 | 'Accept' => 'application/json', 50 | 'Authorization' => "Token {$this->token}", 51 | ], 52 | 'body' => json_encode($request->getBody()), 53 | ]); 54 | 55 | return json_decode($response->getContent(), true) ?? []; 56 | } catch (ExceptionInterface $exception) { 57 | throw new DadataException($exception); 58 | } 59 | } 60 | 61 | /** 62 | * Адрес по координатам. 63 | * 64 | * Находит ближайшие адреса (дома, улицы, города) по географическим координатам. Только для России. 65 | * 66 | * @param float $latitude - широта 67 | * @param float $longitude - долгота 68 | * @param array $options - дополнительные параметры запроса 69 | * 70 | * @return AddressResponse[] 71 | * 72 | * @throws DadataException|InvalidConfigException 73 | */ 74 | public function geolocateAddress(float $latitude, float $longitude, array $options = []): array 75 | { 76 | return $this->handle('geolocateAddress', $latitude, $longitude, $options); 77 | } 78 | 79 | /** 80 | * Почтовое отделение по координатам. 81 | * 82 | * @param float $latitude - широта 83 | * @param float $longitude - долгота 84 | * @param array $options - дополнительные параметры запроса 85 | * 86 | * @return PostalUnitResponse[] 87 | * 88 | * @throws DadataException|InvalidConfigException 89 | */ 90 | public function geolocatePostalUnit(float $latitude, float $longitude, array $options = []): array 91 | { 92 | return $this->handle('geolocatePostalUnit', $latitude, $longitude, $options); 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /src/Service/DadataIplocate.php: -------------------------------------------------------------------------------- 1 | requestFactory->create($method); 26 | 27 | $request 28 | ->setQuery($ip) 29 | ->fillOptions($options); 30 | 31 | $responseData = $this->query($request); 32 | 33 | return isset($responseData['location']) 34 | ? $this->responseFactory->create($method, $responseData['location']) 35 | : null; 36 | } 37 | 38 | /** 39 | * {@inheritdoc} 40 | */ 41 | protected function query(AbstractRequest $request): array 42 | { 43 | try { 44 | $response = $this->httpClient->request('GET', $request->getUrl(), [ 45 | 'headers' => [ 46 | 'Content-Type' => 'application/json', 47 | 'Accept' => 'application/json', 48 | 'Authorization' => "Token {$this->token}", 49 | ], 50 | 'query' => $request->getBody(), 51 | ]); 52 | 53 | return json_decode($response->getContent(), true) ?? []; 54 | } catch (ExceptionInterface $exception) { 55 | throw new DadataException($exception); 56 | } 57 | } 58 | 59 | /** 60 | * Город по IP-адресу. 61 | * 62 | * - Определяет город по IP-адресу в России 63 | * - Поддерживает как IPv4, так и IPv6 адреса 64 | * - Возвращает детальную информацию о городе, в том числе почтовый индекс 65 | * 66 | * @param string $ip IP-адрес 67 | * @param array $options Дополнительные параметры запроса 68 | * 69 | * @return AddressResponse|null Ответ 70 | * 71 | * @throws DadataException|InvalidConfigException 72 | */ 73 | public function iplocateAddress(string $ip, array $options = []): ?AddressResponse 74 | { 75 | /** @var AddressResponse|null $response */ 76 | $response = $this->handle('iplocateAddress', $ip, $options); 77 | 78 | return $response; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/Traits/Address.php: -------------------------------------------------------------------------------- 1 | setParameter('kernel.debug', true); 21 | 22 | $extension = new VelhronDadataExtension(); 23 | $extension->load($config, $containerBuilder); 24 | 25 | $this->assertSame('token', $containerBuilder->getParameter('velhron_dadata.token')); 26 | $this->assertSame('secret', $containerBuilder->getParameter('velhron_dadata.secret')); 27 | $this->assertSame('https://example.com/general', $containerBuilder->getParameter('velhron_dadata.base_general_url')); 28 | $this->assertSame('https://example.com/cleaner', $containerBuilder->getParameter('velhron_dadata.base_cleaner_url')); 29 | $this->assertSame('https://example.com/suggetions', $containerBuilder->getParameter('velhron_dadata.base_suggestions_url')); 30 | } 31 | 32 | public function testRegisterWithDefaults(): void 33 | { 34 | /** @var ContainerBuilder|MockObject $containerBuilder */ 35 | $containerBuilder = $this->getMockBuilder(ContainerBuilder::class)->disableOriginalConstructor()->getMock(); 36 | 37 | $containerBuilder 38 | ->expects($this->exactly(5)) 39 | ->method('setParameter') 40 | ->withConsecutive( 41 | ['velhron_dadata.token', 'token12345'], 42 | ['velhron_dadata.secret', 'secret12345'], 43 | ['velhron_dadata.base_general_url', 'https://dadata.ru/api/v2'], 44 | ['velhron_dadata.base_cleaner_url', 'https://cleaner.dadata.ru/api/v1/clean'], 45 | ['velhron_dadata.base_suggestions_url', 'https://suggestions.dadata.ru/suggestions/api/4_1/rs'] 46 | ); 47 | 48 | $config = [ 49 | 'velhron_dadata' => [ 50 | 'token' => 'token12345', 51 | 'secret' => 'secret12345', 52 | ], 53 | ]; 54 | 55 | $extension = new VelhronDadataExtension(); 56 | $extension->load($config, $containerBuilder); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /tests/DependencyInjection/config.yaml: -------------------------------------------------------------------------------- 1 | velhron_dadata: 2 | token: 'token' 3 | secret: 'secret' 4 | base_general_url: 'https://example.com/general' 5 | base_cleaner_url: 'https://example.com/cleaner' 6 | base_suggestions_url: 'https://example.com/suggetions' -------------------------------------------------------------------------------- /tests/Service/DadataCleanTest.php: -------------------------------------------------------------------------------- 1 | getMockHttpClient($mockFilepath), $this->requestFactory, $this->responseFactory); 16 | } 17 | 18 | public function testCleanAddress(): void 19 | { 20 | $service = $this->createService(__DIR__.'/../mocks/Clean/address.json'); 21 | $result = $service->cleanAddress('мск сухонска 11/-89'); 22 | 23 | $this->assertEquals(0, $result->qc); 24 | $this->assertEquals('г Москва, ул Сухонская, д 11, кв 89', $result->result); 25 | $this->assertEquals('77000000000000028360004', $result->fiasCode); 26 | } 27 | 28 | public function testCleanPhone(): void 29 | { 30 | $service = $this->createService(__DIR__.'/../mocks/Clean/phone.json'); 31 | $result = $service->cleanPhone('раб 846)231.60.14 *139'); 32 | 33 | $this->assertEquals('+7 846 231-60-14 доб. 139', $result->phone); 34 | $this->assertEquals('ООО "СИПАУТНЭТ"', $result->provider); 35 | } 36 | 37 | public function testCleanPassport(): void 38 | { 39 | $service = $this->createService(__DIR__.'/../mocks/Clean/passport.json'); 40 | $result = $service->cleanPassport('4509 235857'); 41 | 42 | $this->assertEquals('45 09', $result->series); 43 | $this->assertEquals('235857', $result->number); 44 | } 45 | 46 | public function testCleanBirthdate(): void 47 | { 48 | $service = $this->createService(__DIR__.'/../mocks/Clean/birthdate.json'); 49 | $result = $service->cleanBirthdate('24/3/12'); 50 | 51 | $this->assertEquals('24.03.2012', $result->birthdate); 52 | } 53 | 54 | public function testCleanVehicle(): void 55 | { 56 | $service = $this->createService(__DIR__.'/../mocks/Clean/vehicle.json'); 57 | $result = $service->cleanVehicle('бмв'); 58 | 59 | $this->assertEquals('BMW', $result->brand); 60 | } 61 | 62 | public function testCleanName(): void 63 | { 64 | $service = $this->createService(__DIR__.'/../mocks/Clean/name.json'); 65 | $result = $service->cleanName('Срегей владимерович иванов'); 66 | 67 | $this->assertEquals('Иванов', $result->surname); 68 | $this->assertEquals('Сергей', $result->name); 69 | $this->assertEquals('Владимирович', $result->patronymic); 70 | } 71 | 72 | public function testCleanEmail(): void 73 | { 74 | $service = $this->createService(__DIR__.'/../mocks/Clean/email.json'); 75 | $result = $service->cleanEmail('serega@yandex/ru'); 76 | 77 | $this->assertEquals('serega@yandex.ru', $result->email); 78 | } 79 | 80 | /** 81 | * @dataProvider dataProvider 82 | */ 83 | public function testRequestParams( 84 | string $methodName, 85 | string $methodUrl, 86 | string $query, 87 | string $filePath 88 | ): void { 89 | $expectedUrl = 'https://example.com/cleaner'.$methodUrl; 90 | 91 | $expectedOptions = [ 92 | 'headers' => [ 93 | 'Content-Type' => 'application/json', 94 | 'Authorization' => 'Token token', 95 | 'X-Secret' => 'secret', 96 | ], 97 | 'body' => json_encode([$query]), 98 | ]; 99 | 100 | $response = $this->createMock(ResponseInterface::class); 101 | 102 | $response 103 | ->expects($this->once()) 104 | ->method('getContent') 105 | ->willReturn(file_get_contents($filePath)); 106 | 107 | $httpClient = $this->createMock(HttpClientInterface::class); 108 | 109 | $httpClient 110 | ->expects($this->once()) 111 | ->method('request') 112 | ->with('POST', $expectedUrl, $expectedOptions) 113 | ->willReturn($response); 114 | 115 | $service = new DadataClean('token', 'secret', $httpClient, $this->requestFactory, $this->responseFactory); 116 | 117 | $service->$methodName($query); 118 | } 119 | 120 | public function dataProvider(): array 121 | { 122 | return [ 123 | [ 124 | 'cleanAddress', 125 | '/address', 126 | 'мск сухонска 11/-89', 127 | __DIR__.'/../mocks/Clean/address.json', 128 | ], 129 | [ 130 | 'cleanPhone', 131 | '/phone', 132 | 'раб 846)231.60.14 *139', 133 | __DIR__.'/../mocks/Clean/phone.json', 134 | ], 135 | [ 136 | 'cleanPassport', 137 | '/passport', 138 | '4509 235857', 139 | __DIR__.'/../mocks/Clean/passport.json', 140 | ], 141 | [ 142 | 'cleanBirthdate', 143 | '/birthdate', 144 | '24/3/12', 145 | __DIR__.'/../mocks/Clean/birthdate.json', 146 | ], 147 | [ 148 | 'cleanVehicle', 149 | '/vehicle', 150 | 'бмв', 151 | __DIR__.'/../mocks/Clean/vehicle.json', 152 | ], 153 | [ 154 | 'cleanName', 155 | '/name', 156 | 'Срегей владимерович иванов', 157 | __DIR__.'/../mocks/Clean/name.json', 158 | ], 159 | [ 160 | 'cleanEmail', 161 | '/email', 162 | 'serega@yandex/ru', 163 | __DIR__.'/../mocks/Clean/email.json', 164 | ], 165 | ]; 166 | } 167 | } 168 | -------------------------------------------------------------------------------- /tests/Service/DadataGeneralTest.php: -------------------------------------------------------------------------------- 1 | getMockHttpClient($mockFilepath), $this->requestFactory, $this->responseFactory); 16 | } 17 | 18 | public function testBalance(): void 19 | { 20 | $service = $this->createService(__DIR__.'/../mocks/General/balance.json'); 21 | $result = $service->balance(); 22 | 23 | $this->assertEquals(7.0, $result); 24 | } 25 | 26 | public function testStat(): void 27 | { 28 | $service = $this->createService(__DIR__.'/../mocks/General/stat.json'); 29 | $result = $service->stat(); 30 | 31 | $this->assertEquals('2020-07-09', $result->date); 32 | $this->assertEquals(36, $result->suggestions); 33 | $this->assertEquals(7, $result->clean); 34 | } 35 | 36 | /** 37 | * @dataProvider dataProvider 38 | */ 39 | public function testRequestParams(string $methodName, string $methodUrl, string $filePath): void 40 | { 41 | $expectedUrl = 'https://example.com/general'.$methodUrl; 42 | 43 | $expectedOptions = [ 44 | 'headers' => [ 45 | 'Authorization' => 'Token token', 46 | 'X-Secret' => 'secret', 47 | ], 48 | 'query' => [], 49 | ]; 50 | 51 | $response = $this->createMock(ResponseInterface::class); 52 | 53 | $response 54 | ->expects($this->once()) 55 | ->method('getContent') 56 | ->willReturn(file_get_contents($filePath)); 57 | 58 | $httpClient = $this->createMock(HttpClientInterface::class); 59 | 60 | $httpClient 61 | ->expects($this->once()) 62 | ->method('request') 63 | ->with('GET', $expectedUrl, $expectedOptions) 64 | ->willReturn($response); 65 | 66 | $service = new DadataGeneral('token', 'secret', $httpClient, $this->requestFactory, $this->responseFactory); 67 | 68 | $service->$methodName(); 69 | } 70 | 71 | public function dataProvider(): array 72 | { 73 | return [ 74 | [ 75 | 'balance', 76 | '/profile/balance', 77 | __DIR__.'/../mocks/General/balance.json', 78 | ], 79 | [ 80 | 'stat', 81 | '/stat/daily', 82 | __DIR__.'/../mocks/General/stat.json', 83 | ], 84 | ]; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /tests/Service/DadataGeolocateTest.php: -------------------------------------------------------------------------------- 1 | getMockHttpClient($mockFilepath), $this->requestFactory, $this->responseFactory); 16 | } 17 | 18 | public function testGeolocateAddress(): void 19 | { 20 | $service = $this->createService(__DIR__.'/../mocks/Geolocate/address.json'); 21 | $result = $service->geolocateAddress(55.878, 37.653); 22 | 23 | $this->assertEquals('г Москва, ул Сухонская, д 11', $result[0]->value); 24 | $this->assertEquals('7700000000028360004', $result[0]->kladrId); 25 | } 26 | 27 | public function testGeolocatePostalUnit(): void 28 | { 29 | $service = $this->createService(__DIR__.'/../mocks/Geolocate/postalUnit.json'); 30 | $result = $service->geolocatePostalUnit(55.878, 37.653, ['radius_meters' => 1000]); 31 | 32 | $this->assertEquals('127642', $result[0]->postalCode); 33 | $this->assertEquals('г Москва, проезд Дежнёва, д 2А', $result[0]->addressStr); 34 | } 35 | 36 | /** 37 | * @dataProvider dataProvider 38 | */ 39 | public function testRequestParams(string $methodName, string $methodUrl, string $filePath): void 40 | { 41 | $expectedUrl = 'https://example.com/suggetions'.$methodUrl; 42 | 43 | $expectedOptions = [ 44 | 'headers' => [ 45 | 'Content-Type' => 'application/json', 46 | 'Accept' => 'application/json', 47 | 'Authorization' => 'Token token', 48 | ], 49 | 'body' => '{"lat":55.878,"lon":37.653}', 50 | ]; 51 | 52 | $response = $this->createMock(ResponseInterface::class); 53 | 54 | $response 55 | ->expects($this->once()) 56 | ->method('getContent') 57 | ->willReturn(file_get_contents($filePath)); 58 | 59 | $httpClient = $this->createMock(HttpClientInterface::class); 60 | 61 | $httpClient 62 | ->expects($this->once()) 63 | ->method('request') 64 | ->with('POST', $expectedUrl, $expectedOptions) 65 | ->willReturn($response); 66 | 67 | $service = new DadataGeolocate('token', 'secret', $httpClient, $this->requestFactory, $this->responseFactory); 68 | 69 | $service->$methodName(55.878, 37.653); 70 | } 71 | 72 | public function dataProvider(): array 73 | { 74 | return [ 75 | [ 76 | 'geolocateAddress', 77 | '/geolocate/address', 78 | __DIR__.'/../mocks/Geolocate/address.json', 79 | ], 80 | [ 81 | 'geolocatePostalUnit', 82 | '/geolocate/postal_unit', 83 | __DIR__.'/../mocks/Geolocate/postalUnit.json', 84 | ], 85 | ]; 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /tests/Service/DadataIplocateTest.php: -------------------------------------------------------------------------------- 1 | getMockHttpClient($mockFilepath), $this->requestFactory, $this->responseFactory); 16 | } 17 | 18 | public function testIplocateAddress(): void 19 | { 20 | $service = $this->createService(__DIR__.'/../mocks/Iplocate/address.json'); 21 | $result = $service->iplocateAddress('46.226.227.20'); 22 | 23 | $this->assertEquals('г Белгород', $result->value); 24 | $this->assertEquals('639efe9d-3fc8-4438-8e70-ec4f2321f2a7', $result->regionFiasId); 25 | $this->assertEquals('31000001000000000000000', $result->fiasCode); 26 | } 27 | 28 | /** 29 | * @dataProvider dataProvider 30 | */ 31 | public function testRequestParams(string $methodName, string $methodUrl, string $filePath): void 32 | { 33 | $expectedUrl = 'https://example.com/suggetions'.$methodUrl; 34 | 35 | $expectedOptions = [ 36 | 'headers' => [ 37 | 'Content-Type' => 'application/json', 38 | 'Accept' => 'application/json', 39 | 'Authorization' => 'Token token', 40 | ], 41 | 'query' => ['ip' => '46.226.227.20'], 42 | ]; 43 | 44 | $response = $this->createMock(ResponseInterface::class); 45 | 46 | $response 47 | ->expects($this->once()) 48 | ->method('getContent') 49 | ->willReturn(file_get_contents($filePath)); 50 | 51 | $httpClient = $this->createMock(HttpClientInterface::class); 52 | 53 | $httpClient 54 | ->expects($this->once()) 55 | ->method('request') 56 | ->with('GET', $expectedUrl, $expectedOptions) 57 | ->willReturn($response); 58 | 59 | $service = new DadataIplocate('token', 'secret', $httpClient, $this->requestFactory, $this->responseFactory); 60 | 61 | $service->$methodName('46.226.227.20'); 62 | } 63 | 64 | public function dataProvider(): array 65 | { 66 | return [ 67 | [ 68 | 'iplocateAddress', 69 | '/iplocate/address', 70 | __DIR__.'/../mocks/Iplocate/address.json', 71 | ], 72 | ]; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /tests/Service/DadataServiceTest.php: -------------------------------------------------------------------------------- 1 | boot(); 35 | $container = $kernel->getContainer(); 36 | $this->requestFactory = $container->get(RequestFactory::class); 37 | $this->responseFactory = $container->get(ResponseFactory::class); 38 | } 39 | 40 | protected function getMockHttpClient(string $filepath): MockHttpClient 41 | { 42 | return new MockHttpClient(new MockResponse(file_get_contents($filepath))); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /tests/TestingKernel.php: -------------------------------------------------------------------------------- 1 | 16 | */ 17 | public function registerBundles() 18 | { 19 | return [ 20 | new VelhronDadataBundle(), 21 | ]; 22 | } 23 | 24 | /** 25 | * {@inheritdoc} 26 | */ 27 | public function registerContainerConfiguration(LoaderInterface $loader) 28 | { 29 | $loader->load(__DIR__.'/DependencyInjection/config.yaml'); 30 | } 31 | } 32 | } else { 33 | class TestingKernel extends Kernel 34 | { 35 | public function registerBundles(): iterable 36 | { 37 | return [ 38 | new VelhronDadataBundle(), 39 | ]; 40 | } 41 | 42 | /** 43 | * {@inheritdoc} 44 | */ 45 | public function registerContainerConfiguration(LoaderInterface $loader) 46 | { 47 | $loader->load(__DIR__.'/DependencyInjection/config.yaml'); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /tests/mocks/Clean/address.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "source": "мск сухонска 11/-89", 4 | "result": "г Москва, ул Сухонская, д 11, кв 89", 5 | "postal_code": "127642", 6 | "country": "Россия", 7 | "country_iso_code": "RU", 8 | "federal_district": "Центральный", 9 | "region_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5", 10 | "region_kladr_id": "7700000000000", 11 | "region_iso_code": "RU-MOW", 12 | "region_with_type": "г Москва", 13 | "region_type": "г", 14 | "region_type_full": "город", 15 | "region": "Москва", 16 | "area_fias_id": null, 17 | "area_kladr_id": null, 18 | "area_with_type": null, 19 | "area_type": null, 20 | "area_type_full": null, 21 | "area": null, 22 | "city_fias_id": null, 23 | "city_kladr_id": null, 24 | "city_with_type": null, 25 | "city_type": null, 26 | "city_type_full": null, 27 | "city": null, 28 | "city_area": "Северо-восточный", 29 | "city_district_fias_id": null, 30 | "city_district_kladr_id": null, 31 | "city_district_with_type": "р-н Северное Медведково", 32 | "city_district_type": "р-н", 33 | "city_district_type_full": "район", 34 | "city_district": "Северное Медведково", 35 | "settlement_fias_id": null, 36 | "settlement_kladr_id": null, 37 | "settlement_with_type": null, 38 | "settlement_type": null, 39 | "settlement_type_full": null, 40 | "settlement": null, 41 | "street_fias_id": "95dbf7fb-0dd4-4a04-8100-4f6c847564b5", 42 | "street_kladr_id": "77000000000283600", 43 | "street_with_type": "ул Сухонская", 44 | "street_type": "ул", 45 | "street_type_full": "улица", 46 | "street": "Сухонская", 47 | "house_fias_id": "5ee84ac0-eb9a-4b42-b814-2f5f7c27c255", 48 | "house_kladr_id": "7700000000028360004", 49 | "house_type": "д", 50 | "house_type_full": "дом", 51 | "house": "11", 52 | "block_type": null, 53 | "block_type_full": null, 54 | "block": null, 55 | "flat_type": "кв", 56 | "flat_type_full": "квартира", 57 | "flat": "89", 58 | "flat_area": "34.6", 59 | "square_meter_price": "198113", 60 | "flat_price": "6854710", 61 | "postal_box": null, 62 | "fias_id": "5ee84ac0-eb9a-4b42-b814-2f5f7c27c255", 63 | "fias_code": "77000000000000028360004", 64 | "fias_level": "8", 65 | "fias_actuality_state": "0", 66 | "kladr_id": "7700000000028360004", 67 | "capital_marker": "0", 68 | "okato": "45280583000", 69 | "oktmo": "45362000", 70 | "tax_office": "7715", 71 | "tax_office_legal": "7715", 72 | "timezone": "UTC+3", 73 | "geo_lat": "55.8782557", 74 | "geo_lon": "37.65372", 75 | "beltway_hit": "IN_MKAD", 76 | "beltway_distance": null, 77 | "qc_geo": 0, 78 | "qc_complete": 0, 79 | "qc_house": 2, 80 | "qc": 0, 81 | "unparsed_parts": null, 82 | "metro": [ 83 | { 84 | "distance": 1.1, 85 | "line": "Калужско-Рижская", 86 | "name": "Бабушкинская" 87 | }, 88 | { 89 | "distance": 1.2, 90 | "line": "Калужско-Рижская", 91 | "name": "Медведково" 92 | }, 93 | { 94 | "distance": 2.5, 95 | "line": "Калужско-Рижская", 96 | "name": "Свиблово" 97 | } 98 | ] 99 | } 100 | ] -------------------------------------------------------------------------------- /tests/mocks/Clean/birthdate.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "source": "24/3/12", 4 | "birthdate": "24.03.2012", 5 | "qc": 1 6 | } 7 | ] -------------------------------------------------------------------------------- /tests/mocks/Clean/email.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "source": "serega@yandex/ru", 4 | "email": "serega@yandex.ru", 5 | "local": "serega", 6 | "domain": "yandex.ru", 7 | "type": "PERSONAL", 8 | "qc": 4 9 | } 10 | ] -------------------------------------------------------------------------------- /tests/mocks/Clean/name.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "source": "Срегей владимерович иванов", 4 | "result": "Иванов Сергей Владимирович", 5 | "result_genitive": "Иванова Сергея Владимировича", 6 | "result_dative": "Иванову Сергею Владимировичу", 7 | "result_ablative": "Ивановым Сергеем Владимировичем", 8 | "surname": "Иванов", 9 | "name": "Сергей", 10 | "patronymic": "Владимирович", 11 | "gender": "М", 12 | "qc": 1 13 | } 14 | ] -------------------------------------------------------------------------------- /tests/mocks/Clean/passport.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "source": "4509 235857", 4 | "series": "45 09", 5 | "number": "235857", 6 | "qc": 0 7 | } 8 | ] -------------------------------------------------------------------------------- /tests/mocks/Clean/phone.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "source": "раб 846)231.60.14 *139", 4 | "type": "Стационарный", 5 | "phone": "+7 846 231-60-14 доб. 139", 6 | "country_code": "7", 7 | "city_code": "846", 8 | "number": "2316014", 9 | "extension": "139", 10 | "provider": "ООО \"СИПАУТНЭТ\"", 11 | "country": "Россия", 12 | "region": "Самарская область", 13 | "city": "Самара", 14 | "timezone": "UTC+4", 15 | "qc_conflict": 0, 16 | "qc": 0 17 | } 18 | ] -------------------------------------------------------------------------------- /tests/mocks/Clean/vehicle.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "source": "бмв", 4 | "result": "BMW", 5 | "brand": "BMW", 6 | "model": null, 7 | "qc": 1 8 | } 9 | ] -------------------------------------------------------------------------------- /tests/mocks/Find/address.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "г Москва, ул Снежная", 5 | "unrestricted_value": "129323, г Москва, ул Снежная", 6 | "data": { 7 | "postal_code": "129323", 8 | "country": "Россия", 9 | "country_iso_code": "RU", 10 | "federal_district": "Центральный", 11 | "region_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5", 12 | "region_kladr_id": "7700000000000", 13 | "region_iso_code": "RU-MOW", 14 | "region_with_type": "г Москва", 15 | "region_type": "г", 16 | "region_type_full": "город", 17 | "region": "Москва", 18 | "area_fias_id": null, 19 | "area_kladr_id": null, 20 | "area_with_type": null, 21 | "area_type": null, 22 | "area_type_full": null, 23 | "area": null, 24 | "city_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5", 25 | "city_kladr_id": "7700000000000", 26 | "city_with_type": "г Москва", 27 | "city_type": "г", 28 | "city_type_full": "город", 29 | "city": "Москва", 30 | "city_area": null, 31 | "city_district_fias_id": null, 32 | "city_district_kladr_id": null, 33 | "city_district_with_type": null, 34 | "city_district_type": null, 35 | "city_district_type_full": null, 36 | "city_district": null, 37 | "settlement_fias_id": null, 38 | "settlement_kladr_id": null, 39 | "settlement_with_type": null, 40 | "settlement_type": null, 41 | "settlement_type_full": null, 42 | "settlement": null, 43 | "street_fias_id": "9120b43f-2fae-4838-a144-85e43c2bfb29", 44 | "street_kladr_id": "77000000000268400", 45 | "street_with_type": "ул Снежная", 46 | "street_type": "ул", 47 | "street_type_full": "улица", 48 | "street": "Снежная", 49 | "house_fias_id": null, 50 | "house_kladr_id": null, 51 | "house_type": null, 52 | "house_type_full": null, 53 | "house": null, 54 | "block_type": null, 55 | "block_type_full": null, 56 | "block": null, 57 | "flat_type": null, 58 | "flat_type_full": null, 59 | "flat": null, 60 | "flat_area": null, 61 | "square_meter_price": null, 62 | "flat_price": null, 63 | "postal_box": null, 64 | "fias_id": "9120b43f-2fae-4838-a144-85e43c2bfb29", 65 | "fias_code": "77000000000000026840000", 66 | "fias_level": "7", 67 | "fias_actuality_state": "0", 68 | "kladr_id": "77000000000268400", 69 | "geoname_id": "524901", 70 | "capital_marker": "0", 71 | "okato": "45000000000", 72 | "oktmo": "45000000", 73 | "tax_office": "7716", 74 | "tax_office_legal": "7716", 75 | "timezone": null, 76 | "geo_lat": "55.8523466", 77 | "geo_lon": "37.6469376", 78 | "beltway_hit": null, 79 | "beltway_distance": null, 80 | "metro": null, 81 | "qc_geo": "2", 82 | "qc_complete": null, 83 | "qc_house": null, 84 | "history_values": null, 85 | "unparsed_parts": null, 86 | "source": null, 87 | "qc": null 88 | } 89 | } 90 | ] 91 | } -------------------------------------------------------------------------------- /tests/mocks/Find/affiliatedParty.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "ООО \"ДЗЕН.ПЛАТФОРМА\"", 5 | "unrestricted_value": "ООО \"ДЗЕН.ПЛАТФОРМА\"", 6 | "data": { 7 | "kpp": "770501001", 8 | "capital": null, 9 | "management": null, 10 | "founders": null, 11 | "managers": null, 12 | "branch_type": "MAIN", 13 | "branch_count": 0, 14 | "source": null, 15 | "qc": null, 16 | "hid": "7d012acf8db1719e9669758c3e12ae1a6859842ff733a680ecf62a32363b6534", 17 | "type": "LEGAL", 18 | "state": { 19 | "status": "ACTIVE", 20 | "actuality_date": 1577836800000, 21 | "registration_date": 1499126400000, 22 | "liquidation_date": null 23 | }, 24 | "opf": null, 25 | "name": null, 26 | "inn": "7704431373", 27 | "ogrn": "1177746651389", 28 | "okpo": "16210930", 29 | "okato": "45286560000", 30 | "oktmo": "45376000000", 31 | "okogu": "4210014", 32 | "okfs": "16", 33 | "okved": "63.11.1", 34 | "okveds": null, 35 | "authorities": null, 36 | "documents": null, 37 | "licenses": null, 38 | "finance": { 39 | "tax_system": null, 40 | "income": null, 41 | "expense": null, 42 | "debt": null, 43 | "penalty": null 44 | }, 45 | "address": { 46 | "value": "115035, ГОРОД МОСКВА, УЛИЦА САДОВНИЧЕСКАЯ, ДОМ 82, СТРОЕНИЕ 2, ПОМЕЩЕНИЕ 4А29", 47 | "unrestricted_value": "115035, ГОРОД МОСКВА, УЛИЦА САДОВНИЧЕСКАЯ, ДОМ 82, СТРОЕНИЕ 2, ПОМЕЩЕНИЕ 4А29", 48 | "data": null 49 | }, 50 | "phones": null, 51 | "emails": null, 52 | "ogrn_date": 1499126400000, 53 | "okved_type": "2014", 54 | "employee_count": null 55 | } 56 | }, 57 | { 58 | "value": "ООО \"ЕДАДИЛ\"", 59 | "unrestricted_value": "ООО \"ЕДАДИЛ\"", 60 | "data": { 61 | "kpp": "770401001", 62 | "capital": null, 63 | "management": null, 64 | "founders": null, 65 | "managers": null, 66 | "branch_type": "MAIN", 67 | "branch_count": 0, 68 | "source": null, 69 | "qc": null, 70 | "hid": "1bd907427a567a4939888ba23e3f1a96e6372c5c0bc7c7474d995452feed8c43", 71 | "type": "LEGAL", 72 | "state": { 73 | "status": "ACTIVE", 74 | "actuality_date": 1577836800000, 75 | "registration_date": 1430179200000, 76 | "liquidation_date": null 77 | }, 78 | "opf": null, 79 | "name": null, 80 | "inn": "7728237907", 81 | "ogrn": "1157746397368", 82 | "okpo": "11624347", 83 | "okato": "45286590000", 84 | "oktmo": "45383000000", 85 | "okogu": "4210014", 86 | "okfs": "16", 87 | "okved": "63.11.1", 88 | "okveds": null, 89 | "authorities": null, 90 | "documents": null, 91 | "licenses": null, 92 | "finance": { 93 | "tax_system": null, 94 | "income": null, 95 | "expense": null, 96 | "debt": null, 97 | "penalty": null 98 | }, 99 | "address": { 100 | "value": "г Москва, ул Тимура Фрунзе, д 11 к 2, пом 8206", 101 | "unrestricted_value": "119021, г Москва, р-н Хамовники, ул Тимура Фрунзе, д 11 к 2, пом 8206", 102 | "data": null 103 | }, 104 | "phones": null, 105 | "emails": null, 106 | "ogrn_date": 1430179200000, 107 | "okved_type": "2014", 108 | "employee_count": null 109 | } 110 | } 111 | ] 112 | } -------------------------------------------------------------------------------- /tests/mocks/Find/bank.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "ПАО Сбербанк", 5 | "unrestricted_value": "ПАО Сбербанк", 6 | "data": { 7 | "opf": { 8 | "type": "BANK", 9 | "full": null, 10 | "short": null 11 | }, 12 | "name": { 13 | "payment": "ПАО СБЕРБАНК", 14 | "full": null, 15 | "short": "ПАО Сбербанк" 16 | }, 17 | "bic": "044525225", 18 | "swift": "SABRRUMM", 19 | "inn": "7707083893", 20 | "kpp": "773601001", 21 | "okpo": null, 22 | "correspondent_account": "30101810400000000225", 23 | "registration_number": "1481", 24 | "payment_city": "г Москва", 25 | "state": { 26 | "status": "ACTIVE", 27 | "actuality_date": 1594166400000, 28 | "registration_date": 677376000000, 29 | "liquidation_date": null 30 | }, 31 | "rkc": null, 32 | "address": { 33 | "value": "г Москва, ул Вавилова, д 19", 34 | "unrestricted_value": "117312, г Москва, Академический р-н, ул Вавилова, д 19", 35 | "data": { 36 | "postal_code": "117312", 37 | "country": "Россия", 38 | "country_iso_code": "RU", 39 | "federal_district": "Центральный", 40 | "region_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5", 41 | "region_kladr_id": "7700000000000", 42 | "region_iso_code": "RU-MOW", 43 | "region_with_type": "г Москва", 44 | "region_type": "г", 45 | "region_type_full": "город", 46 | "region": "Москва", 47 | "area_fias_id": null, 48 | "area_kladr_id": null, 49 | "area_with_type": null, 50 | "area_type": null, 51 | "area_type_full": null, 52 | "area": null, 53 | "city_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5", 54 | "city_kladr_id": "7700000000000", 55 | "city_with_type": "г Москва", 56 | "city_type": "г", 57 | "city_type_full": "город", 58 | "city": "Москва", 59 | "city_area": "Юго-западный", 60 | "city_district_fias_id": null, 61 | "city_district_kladr_id": null, 62 | "city_district_with_type": "Академический р-н", 63 | "city_district_type": "р-н", 64 | "city_district_type_full": "район", 65 | "city_district": "Академический", 66 | "settlement_fias_id": null, 67 | "settlement_kladr_id": null, 68 | "settlement_with_type": null, 69 | "settlement_type": null, 70 | "settlement_type_full": null, 71 | "settlement": null, 72 | "street_fias_id": "25f8f29b-b110-40ab-a48e-9c72f5fb4331", 73 | "street_kladr_id": "77000000000092400", 74 | "street_with_type": "ул Вавилова", 75 | "street_type": "ул", 76 | "street_type_full": "улица", 77 | "street": "Вавилова", 78 | "house_fias_id": "93409d8c-d8d4-4491-838f-f9aa1678b5e6", 79 | "house_kladr_id": "7700000000009240170", 80 | "house_type": "д", 81 | "house_type_full": "дом", 82 | "house": "19", 83 | "block_type": null, 84 | "block_type_full": null, 85 | "block": null, 86 | "flat_type": null, 87 | "flat_type_full": null, 88 | "flat": null, 89 | "flat_area": null, 90 | "square_meter_price": null, 91 | "flat_price": null, 92 | "postal_box": null, 93 | "fias_id": "93409d8c-d8d4-4491-838f-f9aa1678b5e6", 94 | "fias_code": "77000000000000009240170", 95 | "fias_level": "8", 96 | "fias_actuality_state": "0", 97 | "kladr_id": "7700000000009240170", 98 | "geoname_id": "524901", 99 | "capital_marker": "0", 100 | "okato": "45293554000", 101 | "oktmo": "45397000", 102 | "tax_office": "7736", 103 | "tax_office_legal": "7736", 104 | "timezone": "UTC+3", 105 | "geo_lat": "55.7001865", 106 | "geo_lon": "37.5802234", 107 | "beltway_hit": "IN_MKAD", 108 | "beltway_distance": null, 109 | "metro": [ 110 | { 111 | "name": "Ленинский проспект", 112 | "line": "Калужско-Рижская", 113 | "distance": 0.8 114 | }, 115 | { 116 | "name": "Площадь Гагарина", 117 | "line": "МЦК", 118 | "distance": 0.8 119 | }, 120 | { 121 | "name": "Академическая", 122 | "line": "Калужско-Рижская", 123 | "distance": 1.5 124 | } 125 | ], 126 | "qc_geo": "0", 127 | "qc_complete": "5", 128 | "qc_house": "2", 129 | "history_values": null, 130 | "unparsed_parts": null, 131 | "source": "117997, г Москва, ул Вавилова, 19", 132 | "qc": "0" 133 | } 134 | }, 135 | "phones": null 136 | } 137 | } 138 | ] 139 | } -------------------------------------------------------------------------------- /tests/mocks/Find/country.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "Таиланд", 5 | "unrestricted_value": "Королевство Таиланд", 6 | "data": { 7 | "code": "764", 8 | "alfa2": "TH", 9 | "alfa3": "THA", 10 | "name_short": "Таиланд", 11 | "name": "Королевство Таиланд" 12 | } 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /tests/mocks/Find/delivery.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "3100400100000", 5 | "unrestricted_value": "fe7eea4a-875a-4235-aa61-81c2a37a0440", 6 | "data": { 7 | "kladr_id": "3100400100000", 8 | "fias_id": "fe7eea4a-875a-4235-aa61-81c2a37a0440", 9 | "boxberry_id": "01929", 10 | "cdek_id": "344", 11 | "dpd_id": "196006461" 12 | } 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /tests/mocks/Find/fias.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "г Москва, ул Снежная", 5 | "unrestricted_value": "129323, г Москва, ул Снежная", 6 | "data": { 7 | "postal_code": "129323", 8 | "region_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5", 9 | "region_kladr_id": "7700000000000", 10 | "region_with_type": "г Москва", 11 | "region_type": "г", 12 | "region_type_full": "город", 13 | "region": "Москва", 14 | "area_fias_id": null, 15 | "area_kladr_id": null, 16 | "area_with_type": null, 17 | "area_type": null, 18 | "area_type_full": null, 19 | "area": null, 20 | "city_fias_id": null, 21 | "city_kladr_id": null, 22 | "city_with_type": null, 23 | "city_type": null, 24 | "city_type_full": null, 25 | "city": null, 26 | "city_district_fias_id": null, 27 | "city_district_kladr_id": null, 28 | "city_district_with_type": null, 29 | "city_district_type": null, 30 | "city_district_type_full": null, 31 | "city_district": null, 32 | "settlement_fias_id": null, 33 | "settlement_kladr_id": null, 34 | "settlement_with_type": null, 35 | "settlement_type": null, 36 | "settlement_type_full": null, 37 | "settlement": null, 38 | "planning_structure_fias_id": null, 39 | "planning_structure_kladr_id": null, 40 | "planning_structure_with_type": null, 41 | "planning_structure_type": null, 42 | "planning_structure_type_full": null, 43 | "planning_structure": null, 44 | "street_fias_id": "9120b43f-2fae-4838-a144-85e43c2bfb29", 45 | "street_kladr_id": "77000000000268400", 46 | "street_with_type": "ул Снежная", 47 | "street_type": "ул", 48 | "street_type_full": "улица", 49 | "street": "Снежная", 50 | "house_fias_id": null, 51 | "house_kladr_id": null, 52 | "house_type": null, 53 | "house": null, 54 | "block": null, 55 | "building_type": null, 56 | "building": null, 57 | "fias_id": "9120b43f-2fae-4838-a144-85e43c2bfb29", 58 | "fias_code": "7700000000000002684", 59 | "fias_level": "7", 60 | "fias_actuality_state": "0", 61 | "kladr_id": "77000000000268400", 62 | "capital_marker": "0", 63 | "okato": null, 64 | "oktmo": null, 65 | "cadastral_number": null, 66 | "tax_office": "7716", 67 | "tax_office_legal": "7716", 68 | "history_values": null, 69 | "source": null, 70 | "qc": null 71 | } 72 | } 73 | ] 74 | } -------------------------------------------------------------------------------- /tests/mocks/Find/fnsUnit.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "Межрайонная инспекция ФНС России № 19 по Нижегородской области", 5 | "unrestricted_value": "Межрайонная инспекция ФНС России № 19 по Нижегородской области", 6 | "data": { 7 | "code": "5257", 8 | "name": "Межрайонная инспекция ФНС России № 19 по Нижегородской области", 9 | "name_short": "Межрайонная инспекция ФНС России № 19 по Нижегородской области", 10 | "address": ",603011,,,Нижний Новгород г,,Искры ул,1,,", 11 | "phone": "831 432-65-65, факс: 432-65-66", 12 | "comment": "Код ОКПО:70381914. Режим работы: понедельник-четверг 08:30-17:30, пятница 08:30-16:30, перерыв на обед 12:30-13:18. Оперзал понедельник-четверг 09:00-18:00, пятница 09:00-16:45 без обеда. Информирование и прием деклараций вторник, четверг 09:00-20:00", 13 | "payment_name": "УФК по Нижегородской области (Межрайонная инспекция ФНС России № 19 по Нижегородской области)", 14 | "oktmo": "22701000,22712000", 15 | "inn": "5257046101", 16 | "kpp": "525701001", 17 | "bank_name": "ВОЛГО-ВЯТСКОЕ ГУ БАНКА РОССИИ//УФК по Нижегородской области г. Нижний Новгород", 18 | "bank_bic": "012202102", 19 | "bank_correspondent_account": "40102810745370000024", 20 | "bank_account": "03100643000000013200", 21 | "parent_code": "52198", 22 | "parent_name": "МРИ ФНС России № 15 по Нижегородской области", 23 | "parent_address": ",603155,,, Нижний Новгород г,, Фрунзе ул, д 7,,", 24 | "parent_phone": "831-4162231", 25 | "parent_comment": "Режим работы: ПН-ЧТ: с 9-00 до 18-00, ПТ: с 9-00 до 16-45" 26 | } 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /tests/mocks/Find/ftsUnit.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "ДОМОДЕДОВСКАЯ", 5 | "unrestricted_value": "ДОМОДЕДОВСКАЯ ТАМОЖНЯ", 6 | "data": { 7 | "code": "10002000", 8 | "name_short": "ДОМОДЕДОВСКАЯ", 9 | "name": "ДОМОДЕДОВСКАЯ ТАМОЖНЯ", 10 | "inn": "5009004697", 11 | "ogrn": "1035001283228", 12 | "okpo": "34861084", 13 | "osf": "07", 14 | "address": "142015 МОСКОВСКАЯ ОБЛ., Г. ДОМОДЕДОВО, ТЕРРИТОРИЯ \"АЭРОПОРТ \"ДОМОДЕДОВО\", СТР. 24", 15 | "phone": "(495)967-83-52", 16 | "fax": "(495)787-86-04", 17 | "email": "domodedovo@ca.eais.customs.ru" 18 | } 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /tests/mocks/Find/oktmo.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "54623425", 5 | "unrestricted_value": "54623425", 6 | "data": { 7 | "oktmo": "54623425", 8 | "area_type": "1", 9 | "area_code": "54623000", 10 | "area": "Колпнянский", 11 | "subarea_type": "2", 12 | "subarea_code": "54623425", 13 | "subarea": "Ярищенское" 14 | } 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /tests/mocks/Find/postalUnit.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "127642", 5 | "unrestricted_value": "г Москва, проезд Дежнёва, д 2А", 6 | "data": { 7 | "postal_code": "127642", 8 | "is_closed": false, 9 | "type_code": "ГОПС", 10 | "address_str": "г Москва, проезд Дежнёва, д 2А", 11 | "address_kladr_id": "7700000000000", 12 | "address_qc": "0", 13 | "geo_lat": 55.872127, 14 | "geo_lon": 37.651223, 15 | "schedule_mon": "08:00-20:00", 16 | "schedule_tue": "08:00-20:00", 17 | "schedule_wed": "08:00-20:00", 18 | "schedule_thu": "08:00-20:00", 19 | "schedule_fri": "08:00-20:00", 20 | "schedule_sat": "09:00-18:00", 21 | "schedule_sun": "09:00-18:00" 22 | } 23 | } 24 | ] 25 | } -------------------------------------------------------------------------------- /tests/mocks/Find/regionCourt.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "Судебный участок № 1 Ленинского судебного района города Нижний Новгород Нижегородской области", 5 | "unrestricted_value": "Судебный участок № 1 Ленинского судебного района города Нижний Новгород Нижегородской области", 6 | "data": { 7 | "code": "52MS0022", 8 | "name": "Судебный участок № 1 Ленинского судебного района города Нижний Новгород Нижегородской области", 9 | "region_code": "52" 10 | } 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /tests/mocks/General/balance.json: -------------------------------------------------------------------------------- 1 | { 2 | "balance": 7.0 3 | } -------------------------------------------------------------------------------- /tests/mocks/General/stat.json: -------------------------------------------------------------------------------- 1 | { 2 | "date": "2020-07-09", 3 | "services": { 4 | "merging": 0, 5 | "suggestions": 36, 6 | "clean": 7 7 | } 8 | } -------------------------------------------------------------------------------- /tests/mocks/Geolocate/postalUnit.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "127642", 5 | "unrestricted_value": "г Москва, проезд Дежнёва, д 2А", 6 | "data": { 7 | "postal_code": "127642", 8 | "is_closed": false, 9 | "type_code": "ГОПС", 10 | "address_str": "г Москва, проезд Дежнёва, д 2А", 11 | "address_kladr_id": "7700000000000", 12 | "address_qc": "0", 13 | "geo_lat": 55.872127, 14 | "geo_lon": 37.651223, 15 | "schedule_mon": "08:00-20:00", 16 | "schedule_tue": "08:00-20:00", 17 | "schedule_wed": "08:00-20:00", 18 | "schedule_thu": "08:00-20:00", 19 | "schedule_fri": "08:00-20:00", 20 | "schedule_sat": "09:00-18:00", 21 | "schedule_sun": "09:00-18:00" 22 | } 23 | }, 24 | { 25 | "value": "127221", 26 | "unrestricted_value": "г Москва, ул Полярная, д 16 к 1", 27 | "data": { 28 | "postal_code": "127221", 29 | "is_closed": false, 30 | "type_code": "ГОПС", 31 | "address_str": "г Москва, ул Полярная, д 16 к 1", 32 | "address_kladr_id": "7700000000000", 33 | "address_qc": "0", 34 | "geo_lat": 55.876607, 35 | "geo_lon": 37.637308, 36 | "schedule_mon": "08:00-20:00", 37 | "schedule_tue": "08:00-20:00", 38 | "schedule_wed": "08:00-20:00", 39 | "schedule_thu": "08:00-20:00", 40 | "schedule_fri": "08:00-20:00", 41 | "schedule_sat": "09:00-18:00", 42 | "schedule_sun": "09:00-18:00" 43 | } 44 | } 45 | ] 46 | } -------------------------------------------------------------------------------- /tests/mocks/Iplocate/address.json: -------------------------------------------------------------------------------- 1 | { 2 | "location": { 3 | "value": "г Белгород", 4 | "unrestricted_value": "308000, Белгородская обл, г Белгород", 5 | "data": { 6 | "postal_code": "308000", 7 | "country": "Россия", 8 | "country_iso_code": "RU", 9 | "federal_district": "Центральный", 10 | "region_fias_id": "639efe9d-3fc8-4438-8e70-ec4f2321f2a7", 11 | "region_kladr_id": "3100000000000", 12 | "region_iso_code": "RU-BEL", 13 | "region_with_type": "Белгородская обл", 14 | "region_type": "обл", 15 | "region_type_full": "область", 16 | "region": "Белгородская", 17 | "area_fias_id": null, 18 | "area_kladr_id": null, 19 | "area_with_type": null, 20 | "area_type": null, 21 | "area_type_full": null, 22 | "area": null, 23 | "city_fias_id": "02e9c019-ab4d-4fa0-928e-d6c0a41dc256", 24 | "city_kladr_id": "3100000100000", 25 | "city_with_type": "г Белгород", 26 | "city_type": "г", 27 | "city_type_full": "город", 28 | "city": "Белгород", 29 | "city_area": null, 30 | "city_district_fias_id": null, 31 | "city_district_kladr_id": null, 32 | "city_district_with_type": null, 33 | "city_district_type": null, 34 | "city_district_type_full": null, 35 | "city_district": null, 36 | "settlement_fias_id": null, 37 | "settlement_kladr_id": null, 38 | "settlement_with_type": null, 39 | "settlement_type": null, 40 | "settlement_type_full": null, 41 | "settlement": null, 42 | "street_fias_id": null, 43 | "street_kladr_id": null, 44 | "street_with_type": null, 45 | "street_type": null, 46 | "street_type_full": null, 47 | "street": null, 48 | "house_fias_id": null, 49 | "house_kladr_id": null, 50 | "house_type": null, 51 | "house_type_full": null, 52 | "house": null, 53 | "block_type": null, 54 | "block_type_full": null, 55 | "block": null, 56 | "flat_type": null, 57 | "flat_type_full": null, 58 | "flat": null, 59 | "flat_area": null, 60 | "square_meter_price": null, 61 | "flat_price": null, 62 | "postal_box": null, 63 | "fias_id": "02e9c019-ab4d-4fa0-928e-d6c0a41dc256", 64 | "fias_code": "31000001000000000000000", 65 | "fias_level": "4", 66 | "fias_actuality_state": "0", 67 | "kladr_id": "3100000100000", 68 | "geoname_id": "578072", 69 | "capital_marker": "2", 70 | "okato": "14401000000", 71 | "oktmo": "14701000", 72 | "tax_office": "3123", 73 | "tax_office_legal": "3123", 74 | "timezone": null, 75 | "geo_lat": "50.5976472", 76 | "geo_lon": "36.5856652", 77 | "beltway_hit": null, 78 | "beltway_distance": null, 79 | "metro": null, 80 | "qc_geo": "4", 81 | "qc_complete": null, 82 | "qc_house": null, 83 | "history_values": null, 84 | "unparsed_parts": null, 85 | "source": null, 86 | "qc": null 87 | } 88 | } 89 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/bank.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "ПАО Сбербанк", 5 | "unrestricted_value": "ПАО Сбербанк", 6 | "data": { 7 | "opf": { 8 | "type": "BANK", 9 | "full": null, 10 | "short": null 11 | }, 12 | "name": { 13 | "payment": "ПАО СБЕРБАНК", 14 | "full": null, 15 | "short": "ПАО Сбербанк" 16 | }, 17 | "bic": "044525225", 18 | "swift": "SABRRUMM", 19 | "inn": "7707083893", 20 | "kpp": "773601001", 21 | "okpo": null, 22 | "correspondent_account": "30101810400000000225", 23 | "registration_number": "1481", 24 | "payment_city": "г Москва", 25 | "state": { 26 | "status": "ACTIVE", 27 | "actuality_date": 1594166400000, 28 | "registration_date": 677376000000, 29 | "liquidation_date": null 30 | }, 31 | "rkc": null, 32 | "address": { 33 | "value": "г Москва, ул Вавилова, д 19", 34 | "unrestricted_value": "117312, г Москва, Академический р-н, ул Вавилова, д 19", 35 | "data": { 36 | "postal_code": "117312", 37 | "country": "Россия", 38 | "country_iso_code": "RU", 39 | "federal_district": "Центральный", 40 | "region_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5", 41 | "region_kladr_id": "7700000000000", 42 | "region_iso_code": "RU-MOW", 43 | "region_with_type": "г Москва", 44 | "region_type": "г", 45 | "region_type_full": "город", 46 | "region": "Москва", 47 | "area_fias_id": null, 48 | "area_kladr_id": null, 49 | "area_with_type": null, 50 | "area_type": null, 51 | "area_type_full": null, 52 | "area": null, 53 | "city_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5", 54 | "city_kladr_id": "7700000000000", 55 | "city_with_type": "г Москва", 56 | "city_type": "г", 57 | "city_type_full": "город", 58 | "city": "Москва", 59 | "city_area": "Юго-западный", 60 | "city_district_fias_id": null, 61 | "city_district_kladr_id": null, 62 | "city_district_with_type": "Академический р-н", 63 | "city_district_type": "р-н", 64 | "city_district_type_full": "район", 65 | "city_district": "Академический", 66 | "settlement_fias_id": null, 67 | "settlement_kladr_id": null, 68 | "settlement_with_type": null, 69 | "settlement_type": null, 70 | "settlement_type_full": null, 71 | "settlement": null, 72 | "street_fias_id": "25f8f29b-b110-40ab-a48e-9c72f5fb4331", 73 | "street_kladr_id": "77000000000092400", 74 | "street_with_type": "ул Вавилова", 75 | "street_type": "ул", 76 | "street_type_full": "улица", 77 | "street": "Вавилова", 78 | "house_fias_id": "93409d8c-d8d4-4491-838f-f9aa1678b5e6", 79 | "house_kladr_id": "7700000000009240170", 80 | "house_type": "д", 81 | "house_type_full": "дом", 82 | "house": "19", 83 | "block_type": null, 84 | "block_type_full": null, 85 | "block": null, 86 | "flat_type": null, 87 | "flat_type_full": null, 88 | "flat": null, 89 | "flat_area": null, 90 | "square_meter_price": null, 91 | "flat_price": null, 92 | "postal_box": null, 93 | "fias_id": "93409d8c-d8d4-4491-838f-f9aa1678b5e6", 94 | "fias_code": "77000000000000009240170", 95 | "fias_level": "8", 96 | "fias_actuality_state": "0", 97 | "kladr_id": "7700000000009240170", 98 | "geoname_id": "524901", 99 | "capital_marker": "0", 100 | "okato": "45293554000", 101 | "oktmo": "45397000", 102 | "tax_office": "7736", 103 | "tax_office_legal": "7736", 104 | "timezone": "UTC+3", 105 | "geo_lat": "55.7001865", 106 | "geo_lon": "37.5802234", 107 | "beltway_hit": "IN_MKAD", 108 | "beltway_distance": null, 109 | "metro": [ 110 | { 111 | "name": "Ленинский проспект", 112 | "line": "Калужско-Рижская", 113 | "distance": 0.8 114 | }, 115 | { 116 | "name": "Площадь Гагарина", 117 | "line": "МЦК", 118 | "distance": 0.8 119 | }, 120 | { 121 | "name": "Академическая", 122 | "line": "Калужско-Рижская", 123 | "distance": 1.5 124 | } 125 | ], 126 | "qc_geo": "0", 127 | "qc_complete": "5", 128 | "qc_house": "2", 129 | "history_values": null, 130 | "unparsed_parts": null, 131 | "source": "117997, г Москва, ул Вавилова, 19", 132 | "qc": "0" 133 | } 134 | }, 135 | "phones": null 136 | } 137 | }, 138 | { 139 | "value": "БАЙКАЛЬСКИЙ БАНК ПАО СБЕРБАНК", 140 | "unrestricted_value": "БАЙКАЛЬСКИЙ БАНК ПАО СБЕРБАНК", 141 | "data": { 142 | "opf": { 143 | "type": "BANK_BRANCH", 144 | "full": null, 145 | "short": null 146 | }, 147 | "name": { 148 | "payment": "БАЙКАЛЬСКИЙ БАНК ПАО СБЕРБАНК", 149 | "full": null, 150 | "short": null 151 | }, 152 | "bic": "042520607", 153 | "swift": "SABRRU66XXX", 154 | "inn": "7707083893", 155 | "kpp": "380843001", 156 | "okpo": null, 157 | "correspondent_account": "30101810900000000607", 158 | "registration_number": "1481/422", 159 | "payment_city": "г Иркутск", 160 | "state": { 161 | "status": "ACTIVE", 162 | "actuality_date": 1594166400000, 163 | "registration_date": null, 164 | "liquidation_date": null 165 | }, 166 | "rkc": null, 167 | "address": { 168 | "value": "г Иркутск, ул Нижняя Набережная, д 10", 169 | "unrestricted_value": "664011, Иркутская обл, г Иркутск, Кировский р-н, ул Нижняя Набережная, д 10", 170 | "data": { 171 | "postal_code": "664011", 172 | "country": "Россия", 173 | "country_iso_code": "RU", 174 | "federal_district": "Сибирский", 175 | "region_fias_id": "6466c988-7ce3-45e5-8b97-90ae16cb1249", 176 | "region_kladr_id": "3800000000000", 177 | "region_iso_code": "RU-IRK", 178 | "region_with_type": "Иркутская обл", 179 | "region_type": "обл", 180 | "region_type_full": "область", 181 | "region": "Иркутская", 182 | "area_fias_id": null, 183 | "area_kladr_id": null, 184 | "area_with_type": null, 185 | "area_type": null, 186 | "area_type_full": null, 187 | "area": null, 188 | "city_fias_id": "8eeed222-72e7-47c3-ab3a-9a553c31cf72", 189 | "city_kladr_id": "3800000300000", 190 | "city_with_type": "г Иркутск", 191 | "city_type": "г", 192 | "city_type_full": "город", 193 | "city": "Иркутск", 194 | "city_area": null, 195 | "city_district_fias_id": null, 196 | "city_district_kladr_id": null, 197 | "city_district_with_type": "Кировский р-н", 198 | "city_district_type": "р-н", 199 | "city_district_type_full": "район", 200 | "city_district": "Кировский", 201 | "settlement_fias_id": null, 202 | "settlement_kladr_id": null, 203 | "settlement_with_type": null, 204 | "settlement_type": null, 205 | "settlement_type_full": null, 206 | "settlement": null, 207 | "street_fias_id": "241f2f43-5a67-4d79-b440-fda4a700ad45", 208 | "street_kladr_id": "38000003000038000", 209 | "street_with_type": "ул Нижняя Набережная", 210 | "street_type": "ул", 211 | "street_type_full": "улица", 212 | "street": "Нижняя Набережная", 213 | "house_fias_id": "9332c1e4-555c-478c-90cd-08a3e4454ef9", 214 | "house_kladr_id": "3800000300003800001", 215 | "house_type": "д", 216 | "house_type_full": "дом", 217 | "house": "10", 218 | "block_type": null, 219 | "block_type_full": null, 220 | "block": null, 221 | "flat_type": null, 222 | "flat_type_full": null, 223 | "flat": null, 224 | "flat_area": null, 225 | "square_meter_price": null, 226 | "flat_price": null, 227 | "postal_box": null, 228 | "fias_id": "9332c1e4-555c-478c-90cd-08a3e4454ef9", 229 | "fias_code": "38000003000000003800001", 230 | "fias_level": "8", 231 | "fias_actuality_state": "0", 232 | "kladr_id": "3800000300003800001", 233 | "geoname_id": "2023469", 234 | "capital_marker": "2", 235 | "okato": "25401365000", 236 | "oktmo": "25701000001", 237 | "tax_office": "3808", 238 | "tax_office_legal": "3808", 239 | "timezone": "UTC+8", 240 | "geo_lat": "52.2928747", 241 | "geo_lon": "104.2875056", 242 | "beltway_hit": null, 243 | "beltway_distance": null, 244 | "metro": null, 245 | "qc_geo": "0", 246 | "qc_complete": "5", 247 | "qc_house": "2", 248 | "history_values": null, 249 | "unparsed_parts": null, 250 | "source": "664011, г Иркутск, ул Н. Набережная, 10", 251 | "qc": "0" 252 | } 253 | }, 254 | "phones": null 255 | } 256 | } 257 | ] 258 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/carBrand.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "Ford", 5 | "unrestricted_value": "Ford", 6 | "data": { 7 | "id": "FORD", 8 | "name": "Ford", 9 | "name_ru": "Форд" 10 | } 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/country.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "Таджикистан", 5 | "unrestricted_value": "Республика Таджикистан", 6 | "data": { 7 | "code": "762", 8 | "alfa2": "TJ", 9 | "alfa3": "TJK", 10 | "name_short": "Таджикистан", 11 | "name": "Республика Таджикистан" 12 | } 13 | }, 14 | { 15 | "value": "Таиланд", 16 | "unrestricted_value": "Королевство Таиланд", 17 | "data": { 18 | "code": "764", 19 | "alfa2": "TH", 20 | "alfa3": "THA", 21 | "name_short": "Таиланд", 22 | "name": "Королевство Таиланд" 23 | } 24 | }, 25 | { 26 | "value": "Тайвань", 27 | "unrestricted_value": "Тайвань (китай)", 28 | "data": { 29 | "code": "158", 30 | "alfa2": "TW", 31 | "alfa3": "TWN", 32 | "name_short": "Тайвань", 33 | "name": "Тайвань (китай)" 34 | } 35 | }, 36 | { 37 | "value": "Танзания", 38 | "unrestricted_value": "Объединенная Республика Танзания", 39 | "data": { 40 | "code": "834", 41 | "alfa2": "TZ", 42 | "alfa3": "TZA", 43 | "name_short": "Танзания", 44 | "name": "Объединенная Республика Танзания" 45 | } 46 | } 47 | ] 48 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/currency.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "Белорусский рубль", 5 | "unrestricted_value": "Белорусский рубль", 6 | "data": { 7 | "code": "933", 8 | "strcode": "BYN", 9 | "name": "Белорусский рубль", 10 | "country": "Беларусь" 11 | } 12 | }, 13 | { 14 | "value": "Российский рубль", 15 | "unrestricted_value": "Российский рубль", 16 | "data": { 17 | "code": "643", 18 | "strcode": "RUB", 19 | "name": "Российский рубль", 20 | "country": "Россия" 21 | } 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/email.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "anton@mail.ru", 5 | "unrestricted_value": "anton@mail.ru", 6 | "data": { 7 | "local": "anton", 8 | "domain": "mail.ru", 9 | "type": null, 10 | "source": null, 11 | "qc": null 12 | } 13 | }, 14 | { 15 | "value": "anton@gmail.com", 16 | "unrestricted_value": "anton@gmail.com", 17 | "data": { 18 | "local": "anton", 19 | "domain": "gmail.com", 20 | "type": null, 21 | "source": null, 22 | "qc": null 23 | } 24 | }, 25 | { 26 | "value": "anton@yandex.ru", 27 | "unrestricted_value": "anton@yandex.ru", 28 | "data": { 29 | "local": "anton", 30 | "domain": "yandex.ru", 31 | "type": null, 32 | "source": null, 33 | "qc": null 34 | } 35 | }, 36 | { 37 | "value": "anton@ngs.ru", 38 | "unrestricted_value": "anton@ngs.ru", 39 | "data": { 40 | "local": "anton", 41 | "domain": "ngs.ru", 42 | "type": null, 43 | "source": null, 44 | "qc": null 45 | } 46 | }, 47 | { 48 | "value": "anton@pochta.ru", 49 | "unrestricted_value": "anton@pochta.ru", 50 | "data": { 51 | "local": "anton", 52 | "domain": "pochta.ru", 53 | "type": null, 54 | "source": null, 55 | "qc": null 56 | } 57 | }, 58 | { 59 | "value": "anton@yahoo.com", 60 | "unrestricted_value": "anton@yahoo.com", 61 | "data": { 62 | "local": "anton", 63 | "domain": "yahoo.com", 64 | "type": null, 65 | "source": null, 66 | "qc": null 67 | } 68 | }, 69 | { 70 | "value": "anton@rambler.ru", 71 | "unrestricted_value": "anton@rambler.ru", 72 | "data": { 73 | "local": "anton", 74 | "domain": "rambler.ru", 75 | "type": null, 76 | "source": null, 77 | "qc": null 78 | } 79 | }, 80 | { 81 | "value": "anton@km.ru", 82 | "unrestricted_value": "anton@km.ru", 83 | "data": { 84 | "local": "anton", 85 | "domain": "km.ru", 86 | "type": null, 87 | "source": null, 88 | "qc": null 89 | } 90 | }, 91 | { 92 | "value": "anton@meta.ua", 93 | "unrestricted_value": "anton@meta.ua", 94 | "data": { 95 | "local": "anton", 96 | "domain": "meta.ua", 97 | "type": null, 98 | "source": null, 99 | "qc": null 100 | } 101 | }, 102 | { 103 | "value": "anton@mail.com", 104 | "unrestricted_value": "anton@mail.com", 105 | "data": { 106 | "local": "anton", 107 | "domain": "mail.com", 108 | "type": null, 109 | "source": null, 110 | "qc": null 111 | } 112 | } 113 | ] 114 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/fias.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "г Москва, ул Хабаровская", 5 | "unrestricted_value": "г Москва, ул Хабаровская", 6 | "data": { 7 | "postal_code": null, 8 | "region_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5", 9 | "region_kladr_id": "7700000000000", 10 | "region_with_type": "г Москва", 11 | "region_type": "г", 12 | "region_type_full": "город", 13 | "region": "Москва", 14 | "area_fias_id": null, 15 | "area_kladr_id": null, 16 | "area_with_type": null, 17 | "area_type": null, 18 | "area_type_full": null, 19 | "area": null, 20 | "city_fias_id": null, 21 | "city_kladr_id": null, 22 | "city_with_type": null, 23 | "city_type": null, 24 | "city_type_full": null, 25 | "city": null, 26 | "city_district_fias_id": null, 27 | "city_district_kladr_id": null, 28 | "city_district_with_type": null, 29 | "city_district_type": null, 30 | "city_district_type_full": null, 31 | "city_district": null, 32 | "settlement_fias_id": null, 33 | "settlement_kladr_id": null, 34 | "settlement_with_type": null, 35 | "settlement_type": null, 36 | "settlement_type_full": null, 37 | "settlement": null, 38 | "planning_structure_fias_id": null, 39 | "planning_structure_kladr_id": null, 40 | "planning_structure_with_type": null, 41 | "planning_structure_type": null, 42 | "planning_structure_type_full": null, 43 | "planning_structure": null, 44 | "street_fias_id": "32fcb102-2a50-44c9-a00e-806420f448ea", 45 | "street_kladr_id": "77000000000713400", 46 | "street_with_type": "ул Хабаровская", 47 | "street_type": "ул", 48 | "street_type_full": "улица", 49 | "street": "Хабаровская", 50 | "house_fias_id": null, 51 | "house_kladr_id": null, 52 | "house_type": null, 53 | "house": null, 54 | "block": null, 55 | "building_type": null, 56 | "building": null, 57 | "fias_id": "32fcb102-2a50-44c9-a00e-806420f448ea", 58 | "fias_code": "7700000000000007134", 59 | "fias_level": "7", 60 | "fias_actuality_state": "0", 61 | "kladr_id": "77000000000713400", 62 | "capital_marker": "0", 63 | "okato": "45263564000", 64 | "oktmo": "45305000", 65 | "cadastral_number": null, 66 | "tax_office": "7718", 67 | "tax_office_legal": "7718", 68 | "history_values": [ 69 | "ул Черненко" 70 | ], 71 | "source": null, 72 | "qc": null 73 | } 74 | }, 75 | { 76 | "value": "г Москва, Московский поселение, г Московский, ул Хабарова", 77 | "unrestricted_value": "г Москва, Московский поселение, г Московский, ул Хабарова", 78 | "data": { 79 | "postal_code": null, 80 | "region_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5", 81 | "region_kladr_id": "7700000000000", 82 | "region_with_type": "г Москва", 83 | "region_type": "г", 84 | "region_type_full": "город", 85 | "region": "Москва", 86 | "area_fias_id": "762758bb-18b9-440f-bc61-8e1e77ff3fd8", 87 | "area_kladr_id": "7701100000000", 88 | "area_with_type": "Московский поселение", 89 | "area_type": "п", 90 | "area_type_full": "поселение", 91 | "area": "Московский", 92 | "city_fias_id": "fbcf1fff-1d7c-445e-ad92-b71c08b8aba3", 93 | "city_kladr_id": "7701100200000", 94 | "city_with_type": "г Московский", 95 | "city_type": "г", 96 | "city_type_full": "город", 97 | "city": "Московский", 98 | "city_district_fias_id": null, 99 | "city_district_kladr_id": null, 100 | "city_district_with_type": null, 101 | "city_district_type": null, 102 | "city_district_type_full": null, 103 | "city_district": null, 104 | "settlement_fias_id": null, 105 | "settlement_kladr_id": null, 106 | "settlement_with_type": null, 107 | "settlement_type": null, 108 | "settlement_type_full": null, 109 | "settlement": null, 110 | "planning_structure_fias_id": null, 111 | "planning_structure_kladr_id": null, 112 | "planning_structure_with_type": null, 113 | "planning_structure_type": null, 114 | "planning_structure_type_full": null, 115 | "planning_structure": null, 116 | "street_fias_id": "4d70a35d-9246-4d9c-bcf1-90812ad056a3", 117 | "street_kladr_id": "77011002000003700", 118 | "street_with_type": "ул Хабарова", 119 | "street_type": "ул", 120 | "street_type_full": "улица", 121 | "street": "Хабарова", 122 | "house_fias_id": null, 123 | "house_kladr_id": null, 124 | "house_type": null, 125 | "house": null, 126 | "block": null, 127 | "building_type": null, 128 | "building": null, 129 | "fias_id": "4d70a35d-9246-4d9c-bcf1-90812ad056a3", 130 | "fias_code": "7701100200000000037", 131 | "fias_level": "7", 132 | "fias_actuality_state": "0", 133 | "kladr_id": "77011002000003700", 134 | "capital_marker": "0", 135 | "okato": "45297565001", 136 | "oktmo": "45952000", 137 | "cadastral_number": null, 138 | "tax_office": "7751", 139 | "tax_office_legal": "7751", 140 | "history_values": null, 141 | "source": null, 142 | "qc": null 143 | } 144 | } 145 | ] 146 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/fio.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "Виктор", 5 | "unrestricted_value": "Виктор", 6 | "data": { 7 | "surname": null, 8 | "name": "Виктор", 9 | "patronymic": null, 10 | "gender": "MALE", 11 | "source": null, 12 | "qc": "0" 13 | } 14 | }, 15 | { 16 | "value": "Виктория", 17 | "unrestricted_value": "Виктория", 18 | "data": { 19 | "surname": null, 20 | "name": "Виктория", 21 | "patronymic": null, 22 | "gender": "FEMALE", 23 | "source": null, 24 | "qc": "0" 25 | } 26 | }, 27 | { 28 | "value": "Викторова", 29 | "unrestricted_value": "Викторова", 30 | "data": { 31 | "surname": "Викторова", 32 | "name": null, 33 | "patronymic": null, 34 | "gender": "FEMALE", 35 | "source": null, 36 | "qc": "0" 37 | } 38 | }, 39 | { 40 | "value": "Викторов", 41 | "unrestricted_value": "Викторов", 42 | "data": { 43 | "surname": "Викторов", 44 | "name": null, 45 | "patronymic": null, 46 | "gender": "MALE", 47 | "source": null, 48 | "qc": "0" 49 | } 50 | }, 51 | { 52 | "value": "Викторина", 53 | "unrestricted_value": "Викторина", 54 | "data": { 55 | "surname": null, 56 | "name": "Викторина", 57 | "patronymic": null, 58 | "gender": "FEMALE", 59 | "source": null, 60 | "qc": "0" 61 | } 62 | }, 63 | { 64 | "value": "Викторенко", 65 | "unrestricted_value": "Викторенко", 66 | "data": { 67 | "surname": "Викторенко", 68 | "name": null, 69 | "patronymic": null, 70 | "gender": "UNKNOWN", 71 | "source": null, 72 | "qc": "0" 73 | } 74 | }, 75 | { 76 | "value": "Викторович", 77 | "unrestricted_value": "Викторович", 78 | "data": { 79 | "surname": "Викторович", 80 | "name": null, 81 | "patronymic": null, 82 | "gender": "UNKNOWN", 83 | "source": null, 84 | "qc": "0" 85 | } 86 | }, 87 | { 88 | "value": "Викторин", 89 | "unrestricted_value": "Викторин", 90 | "data": { 91 | "surname": null, 92 | "name": "Викторин", 93 | "patronymic": null, 94 | "gender": "MALE", 95 | "source": null, 96 | "qc": "0" 97 | } 98 | }, 99 | { 100 | "value": "Викторенкова", 101 | "unrestricted_value": "Викторенкова", 102 | "data": { 103 | "surname": "Викторенкова", 104 | "name": null, 105 | "patronymic": null, 106 | "gender": "FEMALE", 107 | "source": null, 108 | "qc": "0" 109 | } 110 | }, 111 | { 112 | "value": "Викторас", 113 | "unrestricted_value": "Викторас", 114 | "data": { 115 | "surname": null, 116 | "name": "Викторас", 117 | "patronymic": null, 118 | "gender": "MALE", 119 | "source": null, 120 | "qc": "0" 121 | } 122 | } 123 | ] 124 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/fmsUnit.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "ОВД ЗЮЗИНО Г. МОСКВЫ", 5 | "unrestricted_value": "ОВД ЗЮЗИНО Г. МОСКВЫ", 6 | "data": { 7 | "code": "772-053", 8 | "name": "ОВД ЗЮЗИНО Г. МОСКВЫ", 9 | "region_code": "77", 10 | "type": "2" 11 | } 12 | }, 13 | { 14 | "value": "ОВД ЗЮЗИНО Г. МОСКВЫ ПАСПОРТНЫЙ СТОЛ 1", 15 | "unrestricted_value": "ОВД ЗЮЗИНО Г. МОСКВЫ ПАСПОРТНЫЙ СТОЛ 1", 16 | "data": { 17 | "code": "772-053", 18 | "name": "ОВД ЗЮЗИНО Г. МОСКВЫ ПАСПОРТНЫЙ СТОЛ 1", 19 | "region_code": "77", 20 | "type": "2" 21 | } 22 | }, 23 | { 24 | "value": "ОВД ЗЮЗИНО ПС УВД ЮЗАО Г. МОСКВЫ", 25 | "unrestricted_value": "ОВД ЗЮЗИНО ПС УВД ЮЗАО Г. МОСКВЫ", 26 | "data": { 27 | "code": "772-053", 28 | "name": "ОВД ЗЮЗИНО ПС УВД ЮЗАО Г. МОСКВЫ", 29 | "region_code": "77", 30 | "type": "2" 31 | } 32 | }, 33 | { 34 | "value": "ОВД ЗЮЗИНО ПС № 1 УВД ЮЗАО Г. МОСКВЫ", 35 | "unrestricted_value": "ОВД ЗЮЗИНО ПС № 1 УВД ЮЗАО Г. МОСКВЫ", 36 | "data": { 37 | "code": "772-053", 38 | "name": "ОВД ЗЮЗИНО ПС № 1 УВД ЮЗАО Г. МОСКВЫ", 39 | "region_code": "77", 40 | "type": "2" 41 | } 42 | }, 43 | { 44 | "value": "ОВД РАЙОНА ЗЮЗИНО УВД ЮГО-ЗАО Г. МОСКВЫ", 45 | "unrestricted_value": "ОВД РАЙОНА ЗЮЗИНО УВД ЮГО-ЗАО Г. МОСКВЫ", 46 | "data": { 47 | "code": "772-053", 48 | "name": "ОВД РАЙОНА ЗЮЗИНО УВД ЮГО-ЗАО Г. МОСКВЫ", 49 | "region_code": "77", 50 | "type": "2" 51 | } 52 | }, 53 | { 54 | "value": "ПАСПОРТНО-ВИЗОВЫМ ОТДЕЛЕНИЕМ ОВД РАЙОНА ЗЮЗИНО Г. МОСКВЫ", 55 | "unrestricted_value": "ПАСПОРТНО-ВИЗОВЫМ ОТДЕЛЕНИЕМ ОВД РАЙОНА ЗЮЗИНО Г. МОСКВЫ", 56 | "data": { 57 | "code": "772-053", 58 | "name": "ПАСПОРТНО-ВИЗОВЫМ ОТДЕЛЕНИЕМ ОВД РАЙОНА ЗЮЗИНО Г. МОСКВЫ", 59 | "region_code": "77", 60 | "type": "2" 61 | } 62 | }, 63 | { 64 | "value": "ПАСПОРТНО-ВИЗОВЫМ ОТДЕЛЕНИЕМ ОВД РАЙОНА СЕВЕРНЫЙ Г. МОСКВЫ", 65 | "unrestricted_value": "ПАСПОРТНО-ВИЗОВЫМ ОТДЕЛЕНИЕМ ОВД РАЙОНА СЕВЕРНЫЙ Г. МОСКВЫ", 66 | "data": { 67 | "code": "772-053", 68 | "name": "ПАСПОРТНО-ВИЗОВЫМ ОТДЕЛЕНИЕМ ОВД РАЙОНА СЕВЕРНЫЙ Г. МОСКВЫ", 69 | "region_code": "77", 70 | "type": "2" 71 | } 72 | }, 73 | { 74 | "value": "ПВО ОВД РАЙОНА ЗЮЗИНО Г. МОСКВЫ", 75 | "unrestricted_value": "ПВО ОВД РАЙОНА ЗЮЗИНО Г. МОСКВЫ", 76 | "data": { 77 | "code": "772-053", 78 | "name": "ПВО ОВД РАЙОНА ЗЮЗИНО Г. МОСКВЫ", 79 | "region_code": "77", 80 | "type": "2" 81 | } 82 | } 83 | ] 84 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/fnsUnit.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "Инспекция ФНС России по Автозаводскому району г.Нижнего Новгорода", 5 | "unrestricted_value": "Инспекция ФНС России по Автозаводскому району г.Нижнего Новгорода", 6 | "data": { 7 | "code": "5256", 8 | "name": "Инспекция ФНС России по Автозаводскому району г.Нижнего Новгорода", 9 | "name_short": "Инспекция ФНС России по Автозаводскому району г.Нижнего Новгорода", 10 | "address": ",603004,,,Нижний Новгород г,,Юлиуса Фучика ул,6,,", 11 | "phone": "831 295-87-47, факс: 831 297-01-47", 12 | "comment": "Код ОКПО:43005446. Режим работы: понедельник-четверг 9.00-18.00, пятница 9.00-17.00, перерыв на обед 12.30-13.18. Информирование и прием деклараций в операционном зале: вторник, четверг до 20.00, пятница до 16.45, 2-я и 4-я суббота месяца 10.00-15.00", 13 | "payment_name": "УФК по Нижегородской области (Инспекция ФНС России по Автозаводскому району г.Нижнего Новгорода)", 14 | "oktmo": "22701000", 15 | "inn": "5256034801", 16 | "kpp": "525601001", 17 | "bank_name": "ВОЛГО-ВЯТСКОЕ ГУ БАНКА РОССИИ", 18 | "bank_bic": "042202001", 19 | "bank_account": "40101810400000010002", 20 | "parent_code": "52198", 21 | "parent_name": "МРИ ФНС России № 15 по Нижегородской области", 22 | "parent_address": ",603155,,, Нижний Новгород г,, Фрунзе ул, д 7,,", 23 | "parent_phone": "831-4162231", 24 | "parent_comment": "Режим работы: ПН-ЧТ: с 9-00 до 18-00, ПТ: с 9-00 до 16-45" 25 | } 26 | }, 27 | { 28 | "value": "Инспекция ФНС России по Канавинскому району г.Нижнего Новгорода", 29 | "unrestricted_value": "Инспекция ФНС России по Канавинскому району г.Нижнего Новгорода", 30 | "data": { 31 | "code": "5257", 32 | "name": "Инспекция ФНС России по Канавинскому району г.Нижнего Новгорода", 33 | "name_short": "Инспекция ФНС России по Канавинскому району г.Нижнего Новгорода", 34 | "address": ",603011,,,Нижний Новгород г,,Искры ул,1,,", 35 | "phone": "831 432-65-65, факс: 432-65-66", 36 | "comment": "Код ОКПО:70381914. Режим работы: понедельник-четверг 9.00-18.00, пятница 9.00-17.00, перерыв на обед 12.30-13.18. Информирование и прием деклараций в операционном зале: вторник, четверг до 20.00, пятница до 16.45, 2-я и 4-я суббота месяца 10.00-15.00", 37 | "payment_name": "УФК по Нижегородской области (Инспекция ФНС России по Канавинскому району г.Нижнего Новгорода)", 38 | "oktmo": "22701000", 39 | "inn": "5257046101", 40 | "kpp": "525701001", 41 | "bank_name": "ВОЛГО-ВЯТСКОЕ ГУ БАНКА РОССИИ", 42 | "bank_bic": "042202001", 43 | "bank_account": "40101810400000010002", 44 | "parent_code": "52198", 45 | "parent_name": "МРИ ФНС России № 15 по Нижегородской области", 46 | "parent_address": ",603155,,, Нижний Новгород г,, Фрунзе ул, д 7,,", 47 | "parent_phone": "831-4162231", 48 | "parent_comment": "Режим работы: ПН-ЧТ: с 9-00 до 18-00, ПТ: с 9-00 до 16-45" 49 | } 50 | }, 51 | { 52 | "value": "Инспекция ФНС России по Ленинскому району г.Нижнего Новгорода", 53 | "unrestricted_value": "Инспекция ФНС России по Ленинскому району г.Нижнего Новгорода", 54 | "data": { 55 | "code": "5258", 56 | "name": "Инспекция ФНС России по Ленинскому району г.Нижнего Новгорода", 57 | "name_short": "Инспекция ФНС России по Ленинскому району г.Нижнего Новгорода", 58 | "address": ",603029,,,Нижний Новгород г,,Космонавта Комарова ул,2б,,", 59 | "phone": "831 250-24-15, факс: 831 250-38-89", 60 | "comment": "Код ОКПО:14334319. Режим работы: понедельник-четверг 9.00-18.00, пятница 9.00-17.00, перерыв на обед 12.30-13.18. Информирование и прием деклараций в операционном зале: вторник, четверг до 20.00, пятница до 16.45, 2-я и 4-я суббота месяца 10.00-15.00", 61 | "payment_name": "УФК по Нижегородской области (Инспекция ФНС России по Ленинскому району г.Нижнего Новгорода)", 62 | "oktmo": "22701000", 63 | "inn": "5258035293", 64 | "kpp": "525801001", 65 | "bank_name": "ВОЛГО-ВЯТСКОЕ ГУ БАНКА РОССИИ", 66 | "bank_bic": "042202001", 67 | "bank_account": "40101810400000010002", 68 | "parent_code": "52198", 69 | "parent_name": "МРИ ФНС России № 15 по Нижегородской области", 70 | "parent_address": ",603155,,, Нижний Новгород г,, Фрунзе ул, д 7,,", 71 | "parent_phone": "831-4162231", 72 | "parent_comment": "Режим работы: ПН-ЧТ: с 9-00 до 18-00, ПТ: с 9-00 до 16-45" 73 | } 74 | }, 75 | { 76 | "value": "Инспекция ФНС России по Московскому району г.Нижнего Новгорода", 77 | "unrestricted_value": "Инспекция ФНС России по Московскому району г.Нижнего Новгорода", 78 | "data": { 79 | "code": "5259", 80 | "name": "Инспекция ФНС России по Московскому району г.Нижнего Новгорода", 81 | "name_short": "Инспекция ФНС России по Московскому району г.Нижнего Новгорода", 82 | "address": ",603047,,,Нижний Новгород г,,Героя Давыдова ул,22,,", 83 | "phone": "831 224-15-71, факс: 831 270-81-53", 84 | "comment": "Код ОКПО:70381570. Режим работы: понедельник-четверг 9.00-18.00, пятница 9.00-17.00, перерыв на обед 12.30-13.18. Информирование и прием деклараций в операционном зале: вторник, четверг до 20.00, пятница до 16.45, 2-я и 4-я суббота месяца 10.00-15.00", 85 | "payment_name": "УФК по Нижегородской области (Инспекция ФНС России по Московскому району г.Нижнего Новгорода)", 86 | "oktmo": "22701000", 87 | "inn": "5259025322", 88 | "kpp": "525901001", 89 | "bank_name": "ВОЛГО-ВЯТСКОЕ ГУ БАНКА РОССИИ", 90 | "bank_bic": "042202001", 91 | "bank_account": "40101810400000010002", 92 | "parent_code": "52198", 93 | "parent_name": "МРИ ФНС России № 15 по Нижегородской области", 94 | "parent_address": ",603155,,, Нижний Новгород г,, Фрунзе ул, д 7,,", 95 | "parent_phone": "831-4162231", 96 | "parent_comment": "Режим работы: ПН-ЧТ: с 9-00 до 18-00, ПТ: с 9-00 до 16-45" 97 | } 98 | }, 99 | { 100 | "value": "Инспекция ФНС России по Нижегородскому району г.Нижнего Новгорода", 101 | "unrestricted_value": "Инспекция ФНС России по Нижегородскому району г.Нижнего Новгорода", 102 | "data": { 103 | "code": "5260", 104 | "name": "Инспекция ФНС России по Нижегородскому району г.Нижнего Новгорода", 105 | "name_short": "Инспекция ФНС России по Нижегородскому району г.Нижнего Новгорода", 106 | "address": ",603109,,,Нижний Новгород г,,Ильинская ул,52а,,", 107 | "phone": "831 433-22-01, факс: 831 433-84-78", 108 | "comment": "Код ОКПО:25699975. Режим работы: понедельник-четверг 9.00-18.00, пятница 9.00-17.00, перерыв на обед 12.30-13.18. Информирование и прием деклараций в операционном зале: вторник, четверг до 20.00, пятница до 16.45, 2-я и 4-я суббота месяца 10.00-15.00", 109 | "payment_name": "УФК по Нижегородской области (Инспекция ФНС России по Нижегородскому району г.Нижнего Новгорода)", 110 | "oktmo": "22701000", 111 | "inn": "5260090005", 112 | "kpp": "526001001", 113 | "bank_name": "ВОЛГО-ВЯТСКОЕ ГУ БАНКА РОССИИ", 114 | "bank_bic": "042202001", 115 | "bank_account": "40101810400000010002", 116 | "parent_code": "52198", 117 | "parent_name": "МРИ ФНС России № 15 по Нижегородской области", 118 | "parent_address": ",603155,,, Нижний Новгород г,, Фрунзе ул, д 7,,", 119 | "parent_phone": "831-4162231", 120 | "parent_comment": "Режим работы: ПН-ЧТ: с 9-00 до 18-00, ПТ: с 9-00 до 16-45" 121 | } 122 | }, 123 | { 124 | "value": "Инспекция ФНС России по Приокскому району г.Нижнего Новгорода", 125 | "unrestricted_value": "Инспекция ФНС России по Приокскому району г.Нижнего Новгорода", 126 | "data": { 127 | "code": "5261", 128 | "name": "Инспекция ФНС России по Приокскому району г.Нижнего Новгорода", 129 | "name_short": "Инспекция ФНС России по Приокскому району г.Нижнего Новгорода", 130 | "address": ",603009,,,Нижний Новгород г,,Пятигорская ул,6а,,", 131 | "phone": "831 465-20-64, факс: 831 464-20-77", 132 | "comment": "Код ОКПО:58592130. Режим работы: понедельник-четверг 9.00-18.00, пятница 9.00-17.00, перерыв на обед 12.30-13.18. Информирование и прием деклараций в операционном зале: вторник, четверг до 20.00, пятница до 16.45, 2-я и 4-я суббота месяца 10.00-15.00", 133 | "payment_name": "УФК по Нижегородской области (Инспекция ФНС России по Приокскому району г.Нижнего Новгорода)", 134 | "oktmo": "22701000", 135 | "inn": "5261025908", 136 | "kpp": "526101001", 137 | "bank_name": "ВОЛГО-ВЯТСКОЕ ГУ БАНКА РОССИИ", 138 | "bank_bic": "042202001", 139 | "bank_account": "40101810400000010002", 140 | "parent_code": "52198", 141 | "parent_name": "МРИ ФНС России № 15 по Нижегородской области", 142 | "parent_address": ",603155,,, Нижний Новгород г,, Фрунзе ул, д 7,,", 143 | "parent_phone": "831-4162231", 144 | "parent_comment": "Режим работы: ПН-ЧТ: с 9-00 до 18-00, ПТ: с 9-00 до 16-45" 145 | } 146 | }, 147 | { 148 | "value": "Инспекция ФНС России по Советскому району г.Нижнего Новгорода", 149 | "unrestricted_value": "Инспекция ФНС России по Советскому району г.Нижнего Новгорода", 150 | "data": { 151 | "code": "5262", 152 | "name": "Инспекция ФНС России по Советскому району г.Нижнего Новгорода", 153 | "name_short": "Инспекция ФНС России по Советскому району г.Нижнего Новгорода", 154 | "address": ",603089,,,Нижний Новгород г,,Ижорская ул,50/4,,", 155 | "phone": "831 428-67-44 , факс: 831 428-89-20", 156 | "comment": "Код ОКПО:14689672. Режим работы: понедельник-четверг 9.00-18.00, пятница 9.00-17.00, перерыв на обед 12.30-13.18. Информирование и прием деклараций в операционном зале: вторник, четверг до 20.00, пятница до 16.45, 2-я и 4-я суббота месяца 10.00-15.00", 157 | "payment_name": "УФК по Нижегородской области (Инспекция ФНС России по Советскому району г.Нижнего Новгорода)", 158 | "oktmo": "22701000", 159 | "inn": "5262082560", 160 | "kpp": "526201001", 161 | "bank_name": "ВОЛГО-ВЯТСКОЕ ГУ БАНКА РОССИИ", 162 | "bank_bic": "042202001", 163 | "bank_account": "40101810400000010002", 164 | "parent_code": "52198", 165 | "parent_name": "МРИ ФНС России № 15 по Нижегородской области", 166 | "parent_address": ",603155,,, Нижний Новгород г,, Фрунзе ул, д 7,,", 167 | "parent_phone": "831-4162231", 168 | "parent_comment": "Режим работы: ПН-ЧТ: с 9-00 до 18-00, ПТ: с 9-00 до 16-45" 169 | } 170 | }, 171 | { 172 | "value": "Инспекция ФНС России по Сормовскому району г.Нижнего Новгорода", 173 | "unrestricted_value": "Инспекция ФНС России по Сормовскому району г.Нижнего Новгорода", 174 | "data": { 175 | "code": "5263", 176 | "name": "Инспекция ФНС России по Сормовскому району г.Нижнего Новгорода", 177 | "name_short": "Инспекция ФНС России по Сормовскому району г.Нижнего Новгорода", 178 | "address": ",603037,,,Нижний Новгород г,,Культуры ул,115,,", 179 | "phone": "831 229-14-40, факс 831 223-32-52", 180 | "comment": "Код ОКПО:57181582. Режим работы: понедельник-четверг 9.00-18.00, пятница 9.00-17.00, перерыв на обед 12.30-13.18. Информирование и прием деклараций в операционном зале: вторник, четверг до 20.00, пятница до 16.45, 2-я и 4-я суббота месяца 10.00-15.00", 181 | "payment_name": "УФК по Нижегородской области (Инспекция ФНС России по Сормовскому району г.Нижнего Новгорода)", 182 | "oktmo": "22701000", 183 | "inn": "5263031209", 184 | "kpp": "526301001", 185 | "bank_name": "ВОЛГО-ВЯТСКОЕ ГУ БАНКА РОССИИ", 186 | "bank_bic": "042202001", 187 | "bank_account": "40101810400000010002", 188 | "parent_code": "52198", 189 | "parent_name": "МРИ ФНС России № 15 по Нижегородской области", 190 | "parent_address": ",603155,,, Нижний Новгород г,, Фрунзе ул, д 7,,", 191 | "parent_phone": "831-4162231", 192 | "parent_comment": "Режим работы: ПН-ЧТ: с 9-00 до 18-00, ПТ: с 9-00 до 16-45" 193 | } 194 | } 195 | ] 196 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/ftsUnit.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "ДОМОДЕДОВСКАЯ", 5 | "unrestricted_value": "ДОМОДЕДОВСКАЯ ТАМОЖНЯ", 6 | "data": { 7 | "code": "10002000", 8 | "name_short": "ДОМОДЕДОВСКАЯ", 9 | "name": "ДОМОДЕДОВСКАЯ ТАМОЖНЯ", 10 | "inn": "5009004697", 11 | "ogrn": "1035001283228", 12 | "okpo": "34861084", 13 | "osf": "07", 14 | "address": "142015 МОСКОВСКАЯ ОБЛ., Г. ДОМОДЕДОВО, ТЕРРИТОРИЯ \"АЭРОПОРТ \"ДОМОДЕДОВО\", СТР. 24", 15 | "phone": "(495)967-83-52", 16 | "fax": "(495)787-86-04", 17 | "email": "domodedovo@ca.eais.customs.ru" 18 | } 19 | }, 20 | { 21 | "value": "т/п Аэропорт Домодедово (грузовой)", 22 | "unrestricted_value": "таможенный пост Аэропорт Домодедово (грузовой)", 23 | "data": { 24 | "code": "10002010", 25 | "name_short": "т/п Аэропорт Домодедово (грузовой)", 26 | "name": "таможенный пост Аэропорт Домодедово (грузовой)", 27 | "inn": null, 28 | "ogrn": null, 29 | "okpo": null, 30 | "osf": "07", 31 | "address": "142015 МОСКОВСКАЯ ОБЛ., ДОМОДЕДОВСКИЙ Р-Н, АЭРОПОРТ ДОМОДЕДОВО", 32 | "phone": "(495)276-09-52", 33 | "fax": null, 34 | "email": null 35 | } 36 | }, 37 | { 38 | "value": "т/п Аэропорт Домодедово (пассажирский)", 39 | "unrestricted_value": "таможенный пост Аэропорт Домодедово (пассажирский)", 40 | "data": { 41 | "code": "10002040", 42 | "name_short": "т/п Аэропорт Домодедово (пассажирский)", 43 | "name": "таможенный пост Аэропорт Домодедово (пассажирский)", 44 | "inn": null, 45 | "ogrn": null, 46 | "okpo": null, 47 | "osf": "07", 48 | "address": "142015 МОСКОВСКАЯ ОБЛ., ДОМОДЕДОВСКИЙ Р-Н, АЭРОПОРТ ДОМОДЕДОВО", 49 | "phone": "(495)787-16-69", 50 | "fax": null, 51 | "email": null 52 | } 53 | }, 54 | { 55 | "value": "т/п Донской", 56 | "unrestricted_value": "Донской таможенный пост", 57 | "data": { 58 | "code": "10009050", 59 | "name_short": "т/п Донской", 60 | "name": "Донской таможенный пост", 61 | "inn": null, 62 | "ogrn": null, 63 | "okpo": null, 64 | "osf": "04", 65 | "address": "142000 МОСКОВСКАЯ ОБЛ., Г.ДОМОДЕДОВО, УЛ. КРАСНОДАРСКАЯ, Д.17", 66 | "phone": "(495)657-92-37", 67 | "fax": null, 68 | "email": null 69 | } 70 | }, 71 | { 72 | "value": "т/п Каширский", 73 | "unrestricted_value": "Каширский таможенный пост", 74 | "data": { 75 | "code": "10013060", 76 | "name_short": "т/п Каширский", 77 | "name": "Каширский таможенный пост", 78 | "inn": null, 79 | "ogrn": null, 80 | "okpo": null, 81 | "osf": "00", 82 | "address": "142000 МОСКОВСКАЯ ОБЛ., Г.ДОМОДЕДОВО, УЛ.ЛОГИСТИЧЕСКАЯ, Д.1/6, КОРП.7Б", 83 | "phone": "(495)644-45-90", 84 | "fax": "(495)644-45-96", 85 | "email": "mot-kash-insp@mtu.customs.ru" 86 | } 87 | }, 88 | { 89 | "value": "Экспертно-исследоват. отдел №2 (пгт. Домодедово)", 90 | "unrestricted_value": "Экспертно-исследовательский отдел №2 (пгт. Домодедово)", 91 | "data": { 92 | "code": "12411020", 93 | "name_short": "Экспертно-исследоват. отдел №2 (пгт. Домодедово)", 94 | "name": "Экспертно-исследовательский отдел №2 (пгт. Домодедово)", 95 | "inn": null, 96 | "ogrn": null, 97 | "okpo": null, 98 | "osf": null, 99 | "address": "142015, МОСКОВСКАЯ ОБЛАСТЬ, Г. ДОМОДЕДОВО, ТЕРРИТОРИЯ \"АЭРОПОРТ \"ДОМОДЕДОВО\", СТР.24", 100 | "phone": null, 101 | "fax": null, 102 | "email": null 103 | } 104 | } 105 | ] 106 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/metro.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "Александровский сад", 5 | "unrestricted_value": "Александровский сад (Филёвская)", 6 | "data": { 7 | "city_kladr_id": "7700000000000", 8 | "city_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5", 9 | "city": "Москва", 10 | "name": "Александровский сад", 11 | "line_id": "4", 12 | "line_name": "Филёвская", 13 | "geo_lat": 55.752255, 14 | "geo_lon": 37.608775, 15 | "color": "1EBCEF", 16 | "is_closed": false 17 | } 18 | }, 19 | { 20 | "value": "Алексеевская", 21 | "unrestricted_value": "Алексеевская (Калужско-Рижская)", 22 | "data": { 23 | "city_kladr_id": "7700000000000", 24 | "city_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5", 25 | "city": "Москва", 26 | "name": "Алексеевская", 27 | "line_id": "6", 28 | "line_name": "Калужско-Рижская", 29 | "geo_lat": 55.807794, 30 | "geo_lon": 37.638699, 31 | "color": "F07E24", 32 | "is_closed": false 33 | } 34 | }, 35 | { 36 | "value": "Площадь Александра Невского 1", 37 | "unrestricted_value": "Площадь Александра Невского 1 (Невско-Василеостровская)", 38 | "data": { 39 | "city_kladr_id": "7800000000000", 40 | "city_fias_id": "c2deb16a-0330-4f05-821f-1d09c93331e6", 41 | "city": "Санкт-Петербург", 42 | "name": "Площадь Александра Невского 1", 43 | "line_id": "3", 44 | "line_name": "Невско-Василеостровская", 45 | "geo_lat": 59.924369, 46 | "geo_lon": 30.384989, 47 | "color": "009A49", 48 | "is_closed": false 49 | } 50 | }, 51 | { 52 | "value": "Площадь Александра Невского 2", 53 | "unrestricted_value": "Площадь Александра Невского 2 (Правобережная)", 54 | "data": { 55 | "city_kladr_id": "7800000000000", 56 | "city_fias_id": "c2deb16a-0330-4f05-821f-1d09c93331e6", 57 | "city": "Санкт-Петербург", 58 | "name": "Площадь Александра Невского 2", 59 | "line_id": "4", 60 | "line_name": "Правобережная", 61 | "geo_lat": 59.923563, 62 | "geo_lon": 30.383421, 63 | "color": "EA7125", 64 | "is_closed": false 65 | } 66 | } 67 | ] 68 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/okpd2.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "Услуги по обрезиневанию валенок (рыбацкие калоши)", 5 | "unrestricted_value": "Услуги по обрезиневанию валенок (рыбацкие калоши)", 6 | "data": { 7 | "idx": "S.95.23.10.133", 8 | "razdel": "S", 9 | "kod": "95.23.10.133", 10 | "name": "Услуги по обрезиневанию валенок (рыбацкие калоши)" 11 | } 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/oktmo.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "54623422", 5 | "unrestricted_value": "54623422", 6 | "data": { 7 | "oktmo": "54623422", 8 | "area_type": "1", 9 | "area_code": "54623000", 10 | "area": "Колпнянский", 11 | "subarea_type": "2", 12 | "subarea_code": "54623422", 13 | "subarea": "Ушаковское" 14 | } 15 | }, 16 | { 17 | "value": "54623425", 18 | "unrestricted_value": "54623425", 19 | "data": { 20 | "oktmo": "54623425", 21 | "area_type": "1", 22 | "area_code": "54623000", 23 | "area": "Колпнянский", 24 | "subarea_type": "2", 25 | "subarea_code": "54623425", 26 | "subarea": "Ярищенское" 27 | } 28 | } 29 | ] 30 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/okved2.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "Запуск ракет космического назначения и выведение космических объектов на орбиту", 5 | "unrestricted_value": "Запуск ракет космического назначения и выведение космических объектов на орбиту", 6 | "data": { 7 | "idx": "H.51.22.3", 8 | "razdel": "H", 9 | "kod": "51.22.3", 10 | "name": "Запуск ракет космического назначения и выведение космических объектов на орбиту" 11 | } 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/postalUnit.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "127642", 5 | "unrestricted_value": "г Москва, проезд Дежнёва, д 2А", 6 | "data": { 7 | "postal_code": "127642", 8 | "is_closed": false, 9 | "type_code": "ГОПС", 10 | "address_str": "г Москва, проезд Дежнёва, д 2А", 11 | "address_kladr_id": "7700000000000", 12 | "address_qc": "0", 13 | "geo_lat": 55.872127, 14 | "geo_lon": 37.651223, 15 | "schedule_mon": "08:00-20:00", 16 | "schedule_tue": "08:00-20:00", 17 | "schedule_wed": "08:00-20:00", 18 | "schedule_thu": "08:00-20:00", 19 | "schedule_fri": "08:00-20:00", 20 | "schedule_sat": "09:00-18:00", 21 | "schedule_sun": "09:00-18:00" 22 | } 23 | } 24 | ] 25 | } -------------------------------------------------------------------------------- /tests/mocks/Suggest/regionCourt.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggestions": [ 3 | { 4 | "value": "Судебный участок № 1 Автозаводского судебного района города Нижний Новгород Нижегородской области", 5 | "unrestricted_value": "Судебный участок № 1 Автозаводского судебного района города Нижний Новгород Нижегородской области", 6 | "data": { 7 | "code": "52MS0001", 8 | "name": "Судебный участок № 1 Автозаводского судебного района города Нижний Новгород Нижегородской области", 9 | "region_code": "52" 10 | } 11 | }, 12 | { 13 | "value": "Судебный участок № 1 Канавинского судебного района города Нижний Новгород Нижегородской области", 14 | "unrestricted_value": "Судебный участок № 1 Канавинского судебного района города Нижний Новгород Нижегородской области", 15 | "data": { 16 | "code": "52MS0014", 17 | "name": "Судебный участок № 1 Канавинского судебного района города Нижний Новгород Нижегородской области", 18 | "region_code": "52" 19 | } 20 | }, 21 | { 22 | "value": "Судебный участок № 1 Ленинского судебного района города Нижний Новгород Нижегородской области", 23 | "unrestricted_value": "Судебный участок № 1 Ленинского судебного района города Нижний Новгород Нижегородской области", 24 | "data": { 25 | "code": "52MS0022", 26 | "name": "Судебный участок № 1 Ленинского судебного района города Нижний Новгород Нижегородской области", 27 | "region_code": "52" 28 | } 29 | }, 30 | { 31 | "value": "Судебный участок № 1 Московского судебного района города Нижний Новгород Нижегородской области", 32 | "unrestricted_value": "Судебный участок № 1 Московского судебного района города Нижний Новгород Нижегородской области", 33 | "data": { 34 | "code": "52MS0029", 35 | "name": "Судебный участок № 1 Московского судебного района города Нижний Новгород Нижегородской области", 36 | "region_code": "52" 37 | } 38 | }, 39 | { 40 | "value": "Судебный участок № 1 Нижегородского судебного района города Нижний Новгород Нижегородской области", 41 | "unrestricted_value": "Судебный участок № 1 Нижегородского судебного района города Нижний Новгород Нижегородской области", 42 | "data": { 43 | "code": "52MS0036", 44 | "name": "Судебный участок № 1 Нижегородского судебного района города Нижний Новгород Нижегородской области", 45 | "region_code": "52" 46 | } 47 | }, 48 | { 49 | "value": "Судебный участок № 1 Приокского судебного района города Нижний Новгород Нижегородской области", 50 | "unrestricted_value": "Судебный участок № 1 Приокского судебного района города Нижний Новгород Нижегородской области", 51 | "data": { 52 | "code": "52MS0042", 53 | "name": "Судебный участок № 1 Приокского судебного района города Нижний Новгород Нижегородской области", 54 | "region_code": "52" 55 | } 56 | }, 57 | { 58 | "value": "Судебный участок № 1 Советского судебного района города Нижний Новгород Нижегородской области", 59 | "unrestricted_value": "Судебный участок № 1 Советского судебного района города Нижний Новгород Нижегородской области", 60 | "data": { 61 | "code": "52MS0047", 62 | "name": "Судебный участок № 1 Советского судебного района города Нижний Новгород Нижегородской области", 63 | "region_code": "52" 64 | } 65 | }, 66 | { 67 | "value": "Судебный участок № 1 Сормовского судебного района города Нижний Новгород Нижегородской области", 68 | "unrestricted_value": "Судебный участок № 1 Сормовского судебного района города Нижний Новгород Нижегородской области", 69 | "data": { 70 | "code": "52MS0054", 71 | "name": "Судебный участок № 1 Сормовского судебного района города Нижний Новгород Нижегородской области", 72 | "region_code": "52" 73 | } 74 | }, 75 | { 76 | "value": "Судебный участок № 1 судебного района, в котором создан Дзержинский районный суд г. Нижний Тагил Свердловской области", 77 | "unrestricted_value": "Судебный участок № 1 судебного района, в котором создан Дзержинский районный суд г. Нижний Тагил Свердловской области", 78 | "data": { 79 | "code": "66MS0064", 80 | "name": "Судебный участок № 1 судебного района, в котором создан Дзержинский районный суд г. Нижний Тагил Свердловской области", 81 | "region_code": "66" 82 | } 83 | }, 84 | { 85 | "value": "Судебный участок № 1 судебного района, в котором создан Ленинский районный суд г. Нижний Тагил Свердловской области", 86 | "unrestricted_value": "Судебный участок № 1 судебного района, в котором создан Ленинский районный суд г. Нижний Тагил Свердловской области", 87 | "data": { 88 | "code": "66MS0069", 89 | "name": "Судебный участок № 1 судебного района, в котором создан Ленинский районный суд г. Нижний Тагил Свердловской области", 90 | "region_code": "66" 91 | } 92 | } 93 | ] 94 | } --------------------------------------------------------------------------------