Управление отчётами

Отчёт – основная сущность сервиса B2B-Sync. Он используется для предоставления информации по запрошенному объекту (автомобилю, физическому лицу или контрагенту).

Сервис использует синхронный метод генерации отчётов. Получив запрос на генерацию, API создаёт новый отчёт с уникальным идентификатором, наполняет его данными, полученными от поставщиков, и возвращает отчёт в теле ответа. Отчёт предоставляется за фиксированное время (даже если ответ от некотрых источников ещё не был получен) или раньше, если отчёт готов.

Запросы на генерацию отчёта не являются идемпотентными, то есть каждый запрос к сервису обрабатывается независимо от других. При получении нескольких идентичных запросов API запустит процесс получения данных для каждого из них.

Типы отчётов

Тип отчёта определяет, какие блоки данных будут содержаться в отчёте по запрошенному объекту.

Чтобы получить список доступных вашему домену типов отчётов, используйте GET-запрос к /domain/report_types. В запросе можно указать дополнительные параметры получения ответа.

Параметры строки запроса

Параметр Тип Описание
Необязательные
_can_generate boolean Отображение типов отчётов, доступных пользователю для генерации. Значение по умолчанию – false.
Возможные значения:
  • true – отображать только доступные для генерации типы отчётов.
  • false – отображать все типы отчётов
_content boolean Наличие в теле ответа данных о составе отчёта (набор источников и полей). Значение по умолчанию – false.
Возможные значения:
  • true – указывать состав отчётов.
  • false – не указывать состав отчётов
_query string Параметры фильтрации данных в ответе. Запрос представляет собой выражение, состоящее из одного или нескольких условий отбора, объединённых логическими операциями.
Формат условия отбора: Ключ:[Префикс]Значение.
Префикс указывает на отношение неравенства. Допустимые префиксы: !, <, >. При обращении к полям со строковыми значениями допускается использование только отношений «равно» и «не равно».
Допустимые логические операции: ; (OR), , (AND).
Строковые значения должны быть заключены в апострофы. Внутри них не допускается использование символов ;:,!<>'".
Пример: _query=month_quote:<10,day_quote:>1
_size integer Количество отчётов на одной странице ответа. Допустимые значения: от 1 до 100. Значение по умолчанию – 100
_offset integer Количество объектов в ответе, которые необходимо пропустить. Значение по умолчанию – 0
_page integer Номер страницы ответа. Значение по умолчанию – 1
_sort string Порядок сортировки. Поля указываются через запятую, - перед названием поля указывает на сортировку по убыванию. Пример: -day_quote,name
_calc_total boolean Наличие в теле ответа переменной total  – количество доступных типов отчётов. Значение по умолчанию – false.
Возможные значения:
  • true – указывать количество доступных типов отчётов.
  • false – не указывать количество доступных типов отчётов

Пример запроса на получение доступных типов отчёта

curl -X GET \
--header 'Accept: application/json' \
--header 'Authorization: AR-REST dGVzdF91c2VyQHRlc3RfZG9tYWluOjE0ODM2MzQ3MjM6OTk5OTk5OTk5OjN3ZzgyRXVUd2VjMjkvT3ZRN215eUE9PQ==' \
'https://b2bsync.spectrumdata.ru/b2b/api/v1/domain/report_types'

Пример тела ответа

{
  "size": 1,
  "stamp": "2017-01-18T15:23:12Z",
  "state": "ok",
  "data": [
    {
      "comment": "очень значимая информация",
      "name": "Тестовый тип отчета",
      "state": "DRAFT",
      "uid": "default@test",
      "day_quote": 20,
      "month_quote": 100,
      "total_quote": 200,
      "content": {},
      "domain_uid": "default",
      "max_age": 0,
      "clean_options": {},
      "min_priority": 1,
      "max_priority": 200,
      "tags": "main,test",
      "created_at": "2017-19-01T23:15:56Z",
      "max_request": 0,
      "created_by": "sysadmin@sys",
      "updated_at": "2017-19-01T23:15:56Z",
      "updated_by": "admin@test",
      "active_from": "2017-19-02T23:15:56Z",
      "period_priority": 0,
      "active_to": "2017-19-02T23:15:56Z",
      "report_make_mode": "TRANSACTIONAL",
      "meta_data": {
        "additionalProp1": {},
        "additionalProp2": {},
        "additionalProp3": {}
      },
      "id": 123456,
      "deleted": false
    }
  ]
}

Генерация отчёта

Для генерации отчёта отправьте POST-запрос к /user/reports/{REPORT_TYPE_UID}/_syncmake.

В параметре REPORT_TYPE_UID укажите нужный тип отчёта.

Используйте параметр запроса _content = true, чтобы получить в ответе содержимое отчёта. Если параметр _content не указан или имеет значение false, ответ API будет содержать только заголовочную часть без данных отчёта.

В теле запроса передайте идентификаторы объекта, по которому должен формироваться отчёт. Структура тела запроса зависит от объекта поиска:

  • для отчёта по транспортному средству используется простой запрос: в поле queryType указывается вид идентификатора, а в query — его значение;
  • для отчётов по объектам, которые описываются несколькими параметрами, используется сложный запрос: в поле queryType указывается значение MULTIPART, в поле query передаётся пробел, а идентифкаторы объекта поиска перечисляются в объекте data.

Подробнее о типах запросов

Пример запроса на генерацию отчёта

curl -X POST \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: AR-REST dGVzdF91c2VyQHRlc3RfZG9tYWluOjE0ODM2MzQ3MjM6OTk5OTk5OTk5OjN3ZzgyRXVUd2VjMjkvT3ZRN215eUE9PQ==' \
-d '{<тело запроса>}' \
'https://b2bsync.spectrumdata.ru/b2b/api/v1/user/reports/test_report_type@test_domain/_syncmake?_content=true'

Пример тела запроса на генерацию отчёта по физическому лицу

{
  "queryType": "MULTIPART",
  "query": " ",
  "data": {
    "last_name": "Корнейчук",
    "first_name": "Семен",
    "patronymic": "Дмитриевич",
    "birth": "16.01.1995",
    "passport": "4218127156",
    "passport_date": "30.05.2018"
  }
}

Пример тела запроса на генерацию отчёта по автомобилю

{ 
 "queryType": "GRZ",
 "query": "А111АА77"
}

Сгенерированный отчёт содержится в теле ответа.

Пример ответа

{
  "state": "ok",
  "size": 1,
  "stamp": "2021-07-09T14:25:58.561Z",
  "data": [
    {
      "domain_uid": "test_domain",
      "report_type_uid": "test_report_type@test_domain",
      "query": {
        "type": "MULTIPART",
        "body": " ",
        "data": {
          "last_name": "Корнейчук",
          "first_name": "Семен",
          "patronymic": "Дмитриевич",
          "birth": "16.01.1995",
          "passport": "4218127156",
          "passport_date": "30.05.2018"
        }
      },
      "progress_ok": 1,
      "progress_error": 0,
      "state": {
        "sources": [
          {
            "_id": "check_person/person_inn",
            "state": "OK",
            "data": {}
          }
        ]
      },
      "requested_at": "2021-07-07T07:42:27.008Z",
      "content": {
        "check_person": {
          "inn": {
            "status": "FOUND",
            "value": "504724045776"
          }
        }
      },
      "last_generation_stat": {
        "start_time": "2021-07-07T07:42:30.000Z",
        "complete_time": "2021-07-07T08:42:30.000Z",
        "duration": 60000
      },
      "uid": "report_2_1628749485392@test_domain",
      "name": "NONAME",
      "comment": "",
      "tags": "",
      "created_at": "2021-07-07T07:42:26.919Z",
      "created_by": "system",
      "updated_at": "2021-07-07T07:42:29.707Z",
      "updated_by": "system",
      "active_from": "1900-01-01T00:00:00.000Z",
      "active_to": "3000-01-01T00:00:00.000Z"
    }
  ]
}