NAV
json

Сервис разметчика

Сервис разметчика (Marker) - это система для подготовки обучающей выборки.
Marker позволяет пользователям размечать данные документов и проверять корректность разметки других пользователей, после чего результаты разметки могут использоваться для машинного обучения.

В сервисе предусмотрены следующие команды:

Конфигурирование сервиса разметчика

Требования к запуску сервиса разметчика

Запуск сервиса осуществляется локально через sbt, на стенде в docker на jvm.

Для корректной минимальной работы сервиса требуется обязательное подключение к PostgreSQL, Kafka, Consul. Для настройки подключения к ним нужно заполнить обязательные переменные окружения из раздела ниже.

Для нормальной работы сервису дополнительно требуется окружение Verdi: CommandStatus и ApiGateway. В этом случае нужно уделить внимание настройкам, связанным с ServiceDiscovery и CommandDiscovery.

Список переменных окружения сервиса разметчика

Все доступные переменные окружения для настройки сервиса разметчика.

Переменная Тип Обяза-тельная Значение по умолчанию Описание
MARKER_HTTP_HOST string нет "0.0.0.0" Хост, на котором слушает HTTP-сервер
MARKER_HTTP_PORT int нет 8192 Порт, на котором слушает HTTP-сервер
MARKER_KAFKA_SERVERS string да "localhost:9092" Адрес Kafka
MARKER_KAFKA_TOPIC string нет "marker_commands" Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery.
MARKER_KAFKA_CONSUMER_GROUP string нет "marker_consumer_group" Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске.
MARKER_KAFKA_COMMANDEVENT_TOPIC string да "commandevents" Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд.
MARKER_KAFKA_ENTITY_OBJECT_EVENT_TOPIC string нет "entityObjectEvent" Название кафка-топика, с событиями об объектах в модели данных
MARKER_KAFKA_PARTITIONS int да 10 Количество партиций в топике команд.
MARKER_ENTITY_OBJECT_EVENT_KAFKA_PARTITIONS int нет 10 Количество партиций в топике с событиями об объектах в модели данных
MARKER_KAFKA_CONSUMER_RESTART_MIN_BACKOFF duration string да 1 second Минимальная задержка перед перезапуском.
MARKER_KAFKA_CONSUMER_RESTART_MAX_BACKOFF duration string да 30 seconds Максимально возможная задержка перед перезапуском.
MARKER_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR double да 0.2 Величина дополнительной случайной задержки: 0.0 - без случайно задержки, 1.0 - до 100% задрежки.
MARKER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS int да 5 Максимальное количество перезапусков в заданный период времени.
MARKER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN duration string да 5 minutes Период времени для ограничения перезапусков.
MARKER_KAFKA_AUTH_USER string да "" Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены.
MARKER_KAFKA_AUTH_PASSWORD string да "" Пароль учетной записи Kafka.
MARKER_KAFKA_AUTH_TRUSTSTORE_LOCATION string да "" Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применятся не будет.
MARKER_KAFKA_AUTH_TRUSTSTORE_PASSWORD string да "" Пароль к харнилищу сертификатов.
MARKER_KAFKA_AUTH_MODE string нет "static" Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
MARKER_KAFKA_AUTH_CONFIG string нет "" Настройки для аутентификации
MARKER_KAFKA_AUTH_CACHE_SIZE int нет Максимальный размер кеша для Kafka producer (количество активных соединений).
MARKER_KAFKA_AUTH_CACHE_TTL duration string нет Время жизни Kafka producer в кеше.
MARKER_CONSUL_ADDR url string да "http://localhost:8500" Адрес Сonsul.
MARKER_CONSUL_AUTH_USER string да "" Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены.
MARKER_CONSUL_AUTH_PASSWORD string да "" Пароль учетной записи Сonsul.
MARKER_TRACE_DURATION boolean нет false Признак необходимости трассировки выполнения команд
MARKER_DISCOVERABLE_ID string нет "another_marker_instance" ID сервиса в ServiceDiscovery
MARKER_DISCOVERABLE_NAME string нет "marker" Имя сервиса в ServiceDiscovery
MARKER_DISCOVERABLE_HOST string да "localhost" Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service
MARKER_DISCOVERABLE_PORT int нет Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер.
MARKER_DISCOVERABLE_LIVETIME duration string нет 2 minutes Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым.
MARKER_DISCOVERABLE_HEALTHPASS string нет 1 minute Периодичность отправки health check в ServiceDiscovery
MARKER_AKKA_HTTP_CLIENT_MAXCON int нет 512 Максимальное число одновременных исходящих HTTP-соединений
MARKER_AKKA_HTTP_CLIENT_MAXREQ int нет 1024 Максимальное число одновременных исходящих HTTP-запросов
MARKER_AKKA_HTTP_SERVER_MAXCON int нет 1024 Максимальное число одновременных входящих HTTP-соединений
MARKER_INTERNALCMD_ALLOW bool нет true Можно ли сервису отправлять внутрисистемные команды
MARKER_HEALTH_TIMEOUT duration string нет 5 seconds Максимальное время ожидания ответа health check
MARKER_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD duration string нет 10 minutes Время кэширования данных по командам из CommandDiscovery
MARKER_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD duration string нет 30 seconds Время кэширования данных по сервисам из ServiceDiscovery
MARKER_DB_HOST string да Хост БД
MARKER_DB_PORT int да Порт БД
MARKER_DB_NAME string да Имя базы в БД
MARKER_DB_URL jdbc url string нет JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы.
MARKER_DB_USER string да Пользователь БД
MARKER_DB_PASSWORD string да Пароль пользователя БД
MARKER_FS_URI url string нет http://localhost:9000 Адрес для подключения к Minio
MARKER_FS_ACCESS_KEY_ID string нет "minioadmin" Ключ доступа к хранилищу файлов Minio (aka пользователь)
MARKER_FS_SECRET_ACCESS_KEY string нет "minioadmin" Секретный код доступа к хранилищу файлов Minio (aka пароль)
MARKER_FS_UPLOAD_PARALLELISM int нет 4 Максимально возможный параллелизм при загрузке файлов в хранилище
MARKER_FS_AUTH_MODE string нет static Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
MARKER_FS_AUTH_CONFIG string нет "" Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с маппингом учетных записей
MARKER_FS_CACHE_SIZE int нет 1 Максимальный размер кеша клиентов для хранилища файлов (количество активных соединений).
MARKER_FS_CACHE_TTL duration string нет Время жизни клиента в кеше
MARKER_LABELING_BUCKET string нет "labeling" Название бакета в Minio, в котором сохраняются файлы экспорта разметки
MARKER_ENTITY_OBJECTS_BUCKET string нет "datamodel" Название бакета в Minio, в котором сохраняются файлы документов
MARKER_ADDITIONAL_FIELDS_PDF_VIEW string нет "extractedText" Ключ, под которым сервис индексации сохраняет результаты извлечения json из pdf
MARKER_SERVICE_NAME string нет "marker" Читаемое имя сервиса
MARKER_SERVICE_DESCRIPTION string нет "Сервис разметчика" Читаемое описание сервиса
MARKER_CUSTOM_CHANGE_MIGRATIONS_TIMEOUT duration string нет 3 minutes Максимальное время выполнения одной миграции customChange

Команды сервиса разметчика

CreateProject

На входе свойства и перечень настроек создаваемого проекта

{
  "title": "Проект Пандора",
  "startDate": 1648114231,
  "endDate": 1648114231,
  "instruction": "Берешь и размечаешь, чего думать-то",
  "instructionFile": [],
  "labelingType": "f8a90fc7-d2a9-4203-b723-5b1ba7d3e530",
  "nerSettings": [
    {
      "title": "Город",
      "selectionColor": "#783f13",
      "showInDocList": true,
      "nerHint": "размечай обдумывая",
      "minLabelingCount": 10,
      "attributes": [
        {
          "title": "Тип",
          "classificationAction": "52201975-3940-4754-9ae5-e6f8ab5c4fb4",
          "optionsList": ["райцентр", "поселок", "деревня"],
          "showInDocList": true
        }
      ],
      "subNers": [
        {
          "title": "Город",
          "selectionColor": "#783f13",
          "attributes": [
            {
              "title": "Тип",
              "classificationAction": "52201975-3940-4754-9ae5-e6f8ab5c4fb4",
              "optionsList": ["райцентр", "поселок", "деревня"],
              "showInDocList": true
            },
            {
              "title": "Описание города",
              "classificationAction": "dd50441d-a829-4648-be9c-afe5547a7da0",
              "maxLength": 250,
              "classificationHint": "описывайте тезисно, без фанатизма",
              "showInDocList": true
            }
          ]
        }
      ]
    },
    {
      "title": "Телефон",
      "selectionColor": "#8b10ad"
    }
  ],
  "classificationSettings": [
    {
      "title": "Город",
      "classificationAction": "52201975-3940-4754-9ae5-e6f8ab5c4fb4",
      "optionsList": [
        "Москва",
        "Казань",
        "Омск"
      ],
      "classificationHint": "Выбирайте правильно!",
      "minLabelingCount": 10,
      "showInDocList": true
    }
  ],
  "docsPerTask": 10,
  "markupSuggesters": ["41b3f3ad-cf79-4290-8caa-766a8c9c54c3", "4c5b18b7-5bd6-496c-b50d-51cd571bde8b"]
}

На выходе ID созданного проекта

"db77be48-6ffb-4d8f-983a-c20411043e10"

Создание нового проекта. Подсущности подсущностей не обрабатываются текущей реализацией сервиса.

Имя команды для вызова: marker_createProject. Поддерживается асинхронный и синхронный вызов.

GetProject

На входе ID проекта

"db77be48-6ffb-4d8f-983a-c20411043e10"

На выходе свойства и перечень настроек проекта

{
  "id": "0a25b8ad-0734-4b6b-a1b7-5005db0cb813",
  "title": "Проект Пандора",
  "created": 1653305248400,
  "startDate": 1648114231,
  "endDate": 1648114231,
  "instruction": "Берешь и размечаешь, чего думать-то",
  "labelingType": "f8a90fc7-d2a9-4203-b723-5b1ba7d3e530",
  "projectStatus": "1ae23fa9-d5d4-4dc7-bcd7-2e4f7761c79f",
  "documentEntityType": "DocForbWpsVi-iTNSTHn7ZRzJYlQ",
  "nerSettings": [
    {
      "id": "fb601105-5cdd-4b28-93c0-63fae268b850",
      "projectIds": [
        "0a25b8ad-0734-4b6b-a1b7-5005db0cb813"
      ],
      "field": "nerField1",
      "title": "Город",
      "selectionColor": "#783f13",
      "showInDocList": true,
      "nerHint": "размечай обдумывая",
      "minLabelingCount": 10,
      "attributes": [
        {
          "id": "8b79cdd2-00af-4015-af23-ef3fb7e5a301",
          "projectIds": [
            "0a25b8ad-0734-4b6b-a1b7-5005db0cb813"
          ],
          "field": "nerField1_Attribute1",
          "title": "Тип",
          "classificationAction": "52201975-3940-4754-9ae5-e6f8ab5c4fb4",
          "optionsList": [
            "райцентр",
            "поселок",
            "деревня"
          ],
          "showInDocList": true
        }
      ],
      "subNers": [
        {
          "id": "8bc226e0-5913-4f81-8ee4-34c3200389a9",
          "projectIds": [
            "0a25b8ad-0734-4b6b-a1b7-5005db0cb813"
          ],
          "field": "nerField1SubNer3",
          "title": "Город",
          "selectionColor": "#783f13",
          "showInDocList": true,
          "nerHint": "размечай обдумывая",
          "minLabelingCount": 10,
          "attributes": [
            {
              "id": "6a927e3f-9001-4a80-822d-1c34e64b4727",
              "projectIds": [
                "0a25b8ad-0734-4b6b-a1b7-5005db0cb813"
              ],
              "field": "nerField1SubNer3Attribute1",
              "title": "Тип",
              "classificationAction": "52201975-3940-4754-9ae5-e6f8ab5c4fb4",
              "optionsList": [
                "райцентр",
                "поселок",
                "деревня"
              ],
              "showInDocList": true
            },
            {
              "id": "097f602b-afb5-47f1-b899-755a9f641e11",
              "projectIds": [
                "0a25b8ad-0734-4b6b-a1b7-5005db0cb813"
              ],
              "field": "nerField1SubNer3Attribute2",
              "title": "Описание города",
              "classificationAction": "dd50441d-a829-4648-be9c-afe5547a7da0",
              "maxLength": 250,
              "classificationHint": "описывайте тезисно, без фанатизма",
              "showInDocList": true
            }
          ],
          "subNers": []
        }
      ]
    },
    {
      "id": "8bc226e0-5913-4f81-8ee4-34c3200389a9",
      "projectIds": [
        "0a25b8ad-0734-4b6b-a1b7-5005db0cb813"
      ],
      "field": "nerField2",
      "title": "Телефон",
      "selectionColor": "#8b10ad",
      "attributes": []
    }
  ],
  "classificationSettings": [
    {
      "id": "8b79cdd2-00af-4015-af23-ef3fb7e5a301",
      "projectIds": [
        "0a25b8ad-0734-4b6b-a1b7-5005db0cb813"
      ],
      "field": "classificationField1",
      "title": "Город",
      "classificationAction": "52201975-3940-4754-9ae5-e6f8ab5c4fb4",
      "optionsList": [
        "Москва",
        "Казань",
        "Омск"
      ],
      "classificationHint": "Выбирайте правильно!",
      "minLabelingCount": 10,
      "showInDocList": true
    }
  ],
  "version": 1,
  "docsPerTask": 10,
  "markupSuggesters": ["41b3f3ad-cf79-4290-8caa-766a8c9c54c3", "4c5b18b7-5bd6-496c-b50d-51cd571bde8b"]
}

Или ошибка, если проект отсутствует

{
    "businessError": null,
    "message": "ERROR: Object not found",
    "stackTrace": null,
    "data": null
}

Получение проекта по ID

Имя команды для вызова: marker_getProject. Поддерживается только синхронный вызов.

UpdateProject

На входе свойства обновляемого объекта, включая ID и версию

{
  "id": "662d697d-c037-474e-8f18-5736f992f7ff",
  "version": 2,
  "title": "Проект Пандора",
  "startDate": 1648114231,
  "endDate": 1648114231,
  "instruction": "Берешь и размечаешь, чего думать-то",
  "instructionFile": [],
  "labelingType": "f8a90fc7-d2a9-4203-b723-5b1ba7d3e530",
  "nerSettings": [
    {
      "title": "Город",
      "selectionColor": "#8b10ad",
      "showInDocList": true,
      "nerHint": "размечай обдумывая",
      "minLabelingCount": 10,
      "attributes": [
        {
          "title": "Тип",
          "classificationAction": "52201975-3940-4754-9ae5-e6f8ab5c4fb4",
          "optionsList": ["столица", "райцентр", "поселок", "деревня"],
          "showInDocList": true,
          "minLabelingCount": 10
        }
      ],
      "subNers": [
        {
          "title": "Город",
          "selectionColor": "#783f13",
          "showInDocList": true,
          "nerHint": "размечай обдумывая",
          "minLabelingCount": 10,
          "attributes": [
            {
              "title": "Тип",
              "classificationAction": "52201975-3940-4754-9ae5-e6f8ab5c4fb4",
              "optionsList": ["райцентр", "поселок", "деревня"],
              "showInDocList": true
            },
            {
              "title": "Описание города",
              "classificationAction": "dd50441d-a829-4648-be9c-afe5547a7da0",
              "maxLength": 250,
              "classificationHint": "описывайте тезисно, без фанатизма",
              "showInDocList": true
            }
          ]
        }
      ]
    }
  ],
  "docsPerTask": 10,
  "markupSuggesters": ["41b3f3ad-cf79-4290-8caa-766a8c9c54c3", "4c5b18b7-5bd6-496c-b50d-51cd571bde8b"]
}

На выходе признак успешности

true

Или ошибка, если проект отсутствует

{
    "businessError": null,
    "message": "ERROR: Object not found",
    "stackTrace": null,
    "data": null
}

Или ошибка, если проект был обновлен из другого места

{
    "businessError": null,
    "message": "ERROR: Object version is not actual (Optimistic Lock)",
    "stackTrace": null,
    "data": null
}

Обновление проекта. Подсущности подсущностей не обрабатываются текущей реализацией сервиса.

Имя команды для вызова: marker_updateProject. Поддерживается асинхронный и синхронный вызов.

UpdateProjectStatus

На входе новый статус проекта, а также его ID и версия

{
  "id": "db77be48-6ffb-4d8f-983a-c20411043e10",
  "projectStatus": "6fae306e-9120-4b84-a79e-530a0be5617c",
  "version": 2
}

На выходе признак успешности

true

Или ошибка, если проект отсутствует

{
    "businessError": null,
    "message": "ERROR: Object not found",
    "stackTrace": null,
    "data": null
}

Или ошибка, если проект был обновлен из другого места

{
    "businessError": null,
    "message": "ERROR: Object version is not actual (Optimistic Lock)",
    "stackTrace": null,
    "data": null
}

Обновление статуса проекта

Имя команды для вызова: marker_updateProjectStatus. Поддерживается асинхронный и синхронный вызов.

DeleteProject

На входе ID проекта

"db77be48-6ffb-4d8f-983a-c20411043e10"

На выходе результат удаления

true

Или ошибка, если проект отсутствует

{
    "businessError": null,
    "message": "ERROR: Object not found",
    "stackTrace": null,
    "data": null
}

Удаление проекта по ID

Имя команды для вызова: marker_deleteProject. Поддерживается асинхронный и синхронный вызов.

AddFilesToProject

На входе ID проекта и ID файлов

{
  "projectId": "db77be48-6ffb-4d8f-983a-c20411043e10",
  "fileIds": [
    "f11614f5-0c78-4408-84a9-a1e68aac6dca",
    "24aff3d7-200b-4b1b-b70e-8e9e19a519a0"
  ]
}

На выходе ссылки для скачивания добавленных файлов

[
  "temp/5192b9e8-8b67-4cba-b6b0-6317d4d5863c",
  "temp/1cf4fd4b-f33a-4c0f-be0e-5f9ea65bcbf9"
]

Или ошибка, если проекта с указанным ID нет

{
    "businessError": null,
    "message": "ERROR: Object not found",
    "stackTrace": null,
    "data": null
}

Добавление указанных файлов в проект

Имя команды для вызова: marker_addFilesToProject. Поддерживается асинхронный и синхронный вызов.

GetDocument

На входе ID проекта и документа этого проекта

{
  "projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
  "documentId": "24330347-d7e6-4ad0-b153-a299e04612d2"
}

На выходе искомый документ

{
  "id": "24330347-d7e6-4ad0-b153-a299e04612d2",
  "projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
  "title": "TestDoc.pdf",
  "created": 1649146493990,
  "entityType": "wYeggYeqSWK8-wAAPQLeZg",
  "data": {
    "file": [{
      "fileId": "545828dd-7b6a-40e3-b9b3-317eb52b4c71",
      "name": "TestDoc.pdf",
      "extension": "pdf",
      "size": 1025,
      "url": "datamodel/545828dd-7b6a-40e3-b9b3-317eb52b4c71",
      "additional": {},
      "created": 0,
      "modified": 0,
      "md5": "D41D8CD98F00B204E9800998ECF8427E"
    }],
    "name": "TestDoc.pdf",
    "path": "/docs/TestDoc.pdf",
    "created": 1649146493990,
    "modified": 1649146493990,
    "owner": "IvanovII"          
  }
}

Или ошибка, если проект отсутствует

{
    "businessError": null,
    "message": "ERROR: Object not found",
    "stackTrace": null,
    "data": null
}

Получение документа определенного проекта по их ID.

Имя команды для вызова: marker_getDocument. Поддерживается только синхронный вызов.

ListProjectDocuments

На входе ID проекта и параметры поиска

{
  "projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
  "search": {
    "query": "",
    "context": {},
    "sorting": null,
    "paging": null
  }
}

На выходе перечень документов по страницам

{
  "items": [
    {
      "id": "24330347-d7e6-4ad0-b153-a299e04612d2",
      "projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
      "title": "TestDoc.pdf",
      "created": 1649146493990,
      "data": {
        "file": [{
          "fileId": "545828dd-7b6a-40e3-b9b3-317eb52b4c71",
          "name": "TestDoc.pdf",
          "extension": "pdf",
          "size": 1025,
          "url": "datamodel/545828dd-7b6a-40e3-b9b3-317eb52b4c71",
          "additional": {},
          "created": 0,
          "modified": 0,
          "md5": "D41D8CD98F00B204E9800998ECF8427E"
        }],
        "name": "TestDoc.pdf",
        "path": "/docs/TestDoc.pdf",
        "created": 1649146493990,
        "modified": 1649146493990,
        "owner": "IvanovII",
        "entityType": "wYeggYeqSWK8-wAAPQLeZg"
      }
    }
  ],
  "total": 5
}

Получение документов проекта.

Имя команды для вызова: marker_listProjectDocuments. Поддерживается только синхронный вызов.

ListProjectTasks

На входе ID проекта и параметры поиска

{
  "projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
  "batchTaskId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
  "search": {
    "query": "",
    "context": {},
    "sorting": null,
    "paging": null
  }
}

На выходе перечень заданий по страницам

{
  "items": [
    {
      "id": "24330347-d7e6-4ad0-b153-a299e04612d2",
      "projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
      "title": "TestDoc.pdf",
      "created": 1649146493990,
      "status": "cd17be48-6fdb-5d8f-183a-c20411043d20",
      "documentId": "24330347-d7e6-4ad0-b153-a299e04612d2",
      "skipReason": "Document not valid",
      "skipDate": 1649146493990,
      "ner": {
        "data": {
          "nerField1": [
            {
              "start": 54,
              "length": 10
            },
            {
              "start": 1976,
              "length": 10
            }
          ]
        },
        "version": 4
      }
    }
  ],
  "total": 5
}

Получение заданий проекта (для текущего пользователя).

Имя команды для вызова: marker_listProjectTasks. Поддерживается только синхронный вызов.

GetTaskPositionInProject

На входе ID проекта и задания и параметры поиска

{
  "projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
  "taskId": "24330347-d7e6-4ad0-b153-a299e04612d2",
  "search": {
    "query": "",
    "context": {}
  }
}

На выходе позиция задания среди всех найденных (в соответствии с поисковым запросом)

{
  "position": 1,
  "total": 5
}

Получение позиции задания в отфильтрованном и отсортированном списке.

Имя команды для вызова: marker_getTaskPositionInProject. Поддерживается только синхронный вызов.

ListProjects

На входе параметры поиска и пагинации проектов (Search)

{
  "query": "",
  "context": {},
  "paging": {"page": 1, "count": 5}
}

На выходе свойства проектов

{
  "items": [
    {
      "id": "9bc7e8c6-f71c-4a53-abc6-222a8a431e84",
      "title": "Test Classification",
      "created": 1649847357350,
      "startDate": 1649146493990,
      "endDate": 1649146493990,
      "labelingType": "9d08b328-9882-4ea2-bbc9-c44d341e028c",
      "projectStatus": "6fae306e-9120-4b84-a79e-530a0be5617c",
      "version": 1,
      "documentsTotal": 5,
      "participantsTotal": 10
    }
  ],
  "total": 1
}

Получение списка проектов

Имя команды для вызова: marker_listProjects. Поддерживается только синхронный вызов.

AssignProjectToUser

На входе ID проекта

"1879aa41-10d9-4ae5-89a6-aeeff005b345"

На выходе количество новых назначенных заданий

42

Назначение всех документов проекта на текущего пользователя

Имя команды для вызова: marker_assignProjectToUser. Поддерживается асинхронный и синхронный вызов.

LabelDocument

На входе ID задания на разметку документа, версия разметки и новая разметка

{
  "projectId": "1879aa41-10d9-4ae5-89a6-aeeff005b345",
  "taskId": "3c6a450e-bbce-442c-905e-8108ed8c5a05",
  "ner": {
    "nerField1": [
      {
        "start": 150,
        "length": 34
      },
      {
        "start": 498,
        "length": 187
      }
    ]
  },
  "version": 5
}

На выходе новая версия разметки

6

Обновление разметки документа

Имя команды для вызова: marker_labelDocument. Поддерживается асинхронный и синхронный вызов.

CommitTask

На входе ID проекта и задания

{
  "projectId": "1879aa41-10d9-4ae5-89a6-aeeff005b345",
  "taskId": "3c6a450e-bbce-442c-905e-8108ed8c5a05"
}

На выходе результат

true

Сохранение окончательного варианта разметки (перевод в статус "Завершенный")

Имя команды для вызова: marker_commitTask. Поддерживается асинхронный и синхронный вызов.

SkipTask

На входе ID проекта, ID задания и причина пропуска

{
  "projectId": "1879aa41-10d9-4ae5-89a6-aeeff005b345",
  "taskId": "3c6a450e-bbce-442c-905e-8108ed8c5a05",
  "reason": "I'm too tired"
}

На выходе результат

true

Пропуск задания на разметку документа. Удаляет существующую разметку.

Имя команды для вызова: marker_skipTask. Поддерживается асинхронный и синхронный вызов.

ReturnTaskToWork

На входе ID проекта и задания

{
  "projectId": "1879aa41-10d9-4ae5-89a6-aeeff005b345",
  "taskId": "3c6a450e-bbce-442c-905e-8108ed8c5a05"
}

На выходе результат

true

Вернуть задание в работу.

Имя команды для вызова: marker_returnTaskToWork. Поддерживается асинхронный и синхронный вызов.

ReturnTaskToDraft

На входе ID проекта и задания

{
  "projectId": "1879aa41-10d9-4ae5-89a6-aeeff005b345",
  "taskId": "3c6a450e-bbce-442c-905e-8108ed8c5a05"
}

На выходе результат

true

Вернуть задание в необработанные.

Имя команды для вызова: marker_returnTaskToDraft. Поддерживается асинхронный и синхронный вызов.

ReturnTaskForLabeling

На входе ID проекта и задания эксперта

{
  "projectId": "1879aa41-10d9-4ae5-89a6-aeeff005b345",
  "taskId": "717ef405-b19e-45f0-8198-d0f2b896fd52"
}

На выходе результат

true

Вернуть задание от эксперта на доработку разметчику. При этом задание эксперта и связанное с ним задание разметчика переходят в состояние "Необработанный". Также при этом разметка от эксперта копируется разметчику на случай, если эксперт внес какие-нибудь изменения.

Если команда вызывается для таски разметчика, а не эксперта, команда вернет false (ничего не произошло полезного). Команда возвращает true, когда успешно проведена вся операция по копированию и смене статусов.

Команда принимает на вход только таску эксперта в состоянии "В работе". В противном случае возвращается ошибка.

Имя команды для вызова: marker_returnTaskForLabeling. Поддерживается асинхронный и синхронный вызов.

ListDocumentAssessors

На входе ID проекта и его документов

{
  "projectId": "1879aa41-10d9-4ae5-89a6-aeeff005b345",
  "documents": [
    "3c6a450e-bbce-442c-905e-8108ed8c5a05",
    "294146d9-ed05-4251-b34f-2192d4e83f05"
  ]
}

На выходе результат

{
  "documentUsers": [
    {
      "documentId": "3c6a450e-bbce-442c-905e-8108ed8c5a05",
      "assessors": [
        {
          "status": "9cc444a8-f6c9-4c5f-b6b6-13a27d958209",
          "users": [
            {
              "id": "4324bf49-e556-4058-ba5a-ccdc02199f79",
              "modified": 1651234477
            },{
              "id": "17f41b3b-100b-492e-a17d-4c6ea60d21ed",
              "modified": 1651234477
            }
          ]
        },{
          "status": "9cc444a8-f6c9-4c5f-b6b6-13a27d958209",
          "users":[
            {
              "id": "9e89421b-bfb6-40f8-bcc6-833aeb2bd676",
              "modified": 1651234477
            }
          ]
        },{
          "status": "9cc444a8-f6c9-4c5f-b6b6-13a27d958209",
          "users": [
            {
              "id": "c6d98e14-b2ef-4fbe-9bf1-6170cc8785f1",
              "modified": 1651234477
            }, {
              "id": "6d3d80b1-332f-41f2-837b-cccd5bc0b74c",
              "modified": 1651234477
            }
          ]
        },{
          "status": "9cc444a8-f6c9-4c5f-b6b6-13a27d958209",
          "users": [
            {
              "id": "4fcd63d6-db92-4d5b-93c6-bb78e4a59656",
              "modified": 1651234477
            }
          ]
        }
      ]
    },
    {
      "documentId": "294146d9-ed05-4251-b34f-2192d4e83f05",
      "assessors": [
        {
          "status": "9cc444a8-f6c9-4c5f-b6b6-13a27d958209",
          "users": [
          ]
        },{
          "status": "9cc444a8-f6c9-4c5f-b6b6-13a27d958209",
          "users":[
            {
              "id": "4fcd63d6-db92-4d5b-93c6-bb78e4a59656",
              "modified": 1651234477
            }, {
              "id": "9e89421b-bfb6-40f8-bcc6-833aeb2bd676",
              "modified": 1651234477
            }
          ]
        },{
          "status": "9cc444a8-f6c9-4c5f-b6b6-13a27d958209",
          "users": [
            {
              "id": "c6d98e14-b2ef-4fbe-9bf1-6170cc8785f1",
              "modified": 1651234477
            }, {
              "id": "6d3d80b1-332f-41f2-837b-cccd5bc0b74c",
              "modified": 1651234477
            }, {
              "id": "4324bf49-e556-4058-ba5a-ccdc02199f79",
              "modified": 1651234477
            }
          ]
        },{
          "status": "9cc444a8-f6c9-4c5f-b6b6-13a27d958209",
          "users": [
            {
              "id": "17f41b3b-100b-492e-a17d-4c6ea60d21ed",
              "modified": 1651234477
            }
          ]
        }
      ]
    }
  ]
}

Получить список пользователей, назначенных на разметку документов.

Имя команды для вызова: marker_listDocumentAssessors. Поддерживается асинхронный и синхронный вызов.

AddUsersToProject

На входе Id проекта, роли и пользователей

{
  "projectId": "b2993663-8dd4-435d-b14d-a1cf18a4ddae",
  "roleId": "2620a83a-361d-4b27-b37e-828c2e9e1941",
  "userIds": ["4eb15e5a-f388-4e85-9b35-cc025e784249"]
}

На выходе признак успешного выполнения команды

true

Добавляет пользователeй в проект, устанавливая им роль.

Имя команды для вызова: marker_addUsersToProject. Поддерживается асинхронный и синхронный вызов.

DeleteUsersFromProject

На входе Id проекта, пользователя

{
  "projectId": "b2993663-8dd4-435d-b14d-a1cf18a4ddae",
  "userIds": ["4eb15e5a-f388-4e85-9b35-cc025e784249"]
}

На выходе признак успешного выполнения команды

true

Удаляет пользователя из проекта.

Имя команды для вызова: marker_deleteUsersFromProject. Поддерживается асинхронный и синхронный вызов.

ListProjectsForUsers

На входе список Id пользователей, для которых нужна информация

[
  "022b1185-c0cd-4c7b-87b5-0dc35c430a76",
  "b42d0857-1128-44af-b876-bec33f028326",
  "a62cc9e4-2ca1-40f4-98e9-d0c189b9c731",
  "f57143ef-c129-4500-8e2e-97db93bd0c1b"
]

На выходе информация о проектах пользователей

[
  {
    "userId": "022b1185-c0cd-4c7b-87b5-0dc35c430a76",
    "projects": [
      {
        "projectId": "8af0fcbe-4b95-4b06-afb3-b77b4a3e1200",
        "roleId": "2620a83a-361d-4b27-b37e-828c2e9e1941",
        "addedToProject": 1651234477
      }
    ]
  }
]

Для заданного списка пользователей возвращает информацию о проектах.

Имя команды для вызова: marker_listProjectsForUsers. Поддерживается только синхронный вызов.

ExportLabeling

На входе объект с Id проекта

{
  "projectId": "9bc7e8c6-f71c-4a53-abc6-222a8a431e84"
}

На выходе url файла с результатом экспорта

"temp/8755c6dd-4655-45cc-a472-c65235542cf8"

Пример элемента выходного файла (здесь приведен с форматированием для читаемости; в файле представлен в одну строку)

{
  "nerField1": [
    {
      "type": "nerField1", 
      "start": 1602, 
      "length": 9, 
      "fragment": "Заказчику"
    }
  ], 
  "nerField2": [
    {
      "type": "nerField2", 
      "start": 3578, 
      "length": 25, 
      "fragment": "Если иное не предсмотрено"
    }
  ],
  "documentId": "5d8ad20e-59c8-45a6-bdb7-14a9fee3c43f",
  "documentUrl": "datamodel/Document/988bea95-a646-4f49-883e-bbbf1f3523ac",
  "extractedTextUrl": "datamodel/Document/46c2f52b-a831-4531-bedb-b0fcf8d7e94e"
}

Генерирует выгрузку разметки по проекту.
На выходе выдает файл в формате JSON Lines, где каждая строка имеет формат ExportLabelingItem

Имя команды для вызова: marker_exportLabeling. Поддерживается асинхронный и синхронный вызов.

ListBatchTaskDocuments

На входе ID задания и Search объект

{
  "id": "728e3d69-374a-40ac-8e18-725ff9950c12",
  "projectId": "8af0fcbe-4b95-4b06-afb3-b77b4a3e1200",
  "status": "aaf0fcbe-4b95-4b06-afb3-b77b4a3e1200",
  "search": {
    "query": "",
    "context": {},
    "sorting": null,
    "paging": {
      "page": 1,
      "count": 1
    }
  }
}

На выходе страница с документами

{
  "total": 300,
  "items": [
    {
      "id": "b8031f65-6995-469c-b0e5-03653ae792f5",
      "title": "Document",
      "created": 1667207480,
      "markerTaskStatus": "ad74bcdb-02a5-4750-9a28-aba5ef1bdad1",
      "expertTaskStatus": "395c8c75-2e5a-406c-8d10-e9d0511a48e2"
    }
  ]
}

Возвращает документы соответствующие заданию.

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
id InSetQuery
title InSetQuery, LikeQuery
created InSetQuery, RangeQuery

Доступные поля для сортировки

Поле
created
title

ListTaskWithFragment

На входе Id проекта, название поля, Search объект (поддерживается только пагинация)

{
  "projectId": "f41d1d65-6530-40b8-b601-43be45d3f195",
  "field": "nerField1",
  "search": {
    "query": "",
    "context": {},
    "sorting": null,
    "paging": {
      "page": 1,
      "count": 1
    }
  }
}

На выходе данные по соответствующим заданиям

{
  "total": 300,
  "items": [
    {
      "id": "6a0559e5-0ce6-4a7a-8046-732e3cb010d7",
      "projectId": "4486145d-e3d6-4d9a-9e7d-c27f54c2cf17",
      "taskId": "1cb3e56e-580a-4651-927b-e33068060c6f",
      "status": "8a7dabaa-da2c-4b8a-85ff-b7a70e0c71ab",
      "fragments": [
        {
          "created": 1668083991767,
          "fragment": "Политика определяет основные подходы к организации страхования рисков\r\nОАО «Газпром нефть» и ее ДЗО (далее - группы компаний ГПН)",
          "attributes": [
            {
              "key": "Ненужный атрибут для тестов",
              "value": "ппшашнломащ78"
            }
          ],
          "subNer": [
            {
              "title": "Месяц",
              "fragments": [
                {
                  "created": 1668083991767,
                  "fragment": "ром нефть» и ее ДЗО",
                  "attributes": [],
                  "subNer": []
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Возвращает разметку документов из указанного проекта, содержащие указанную сущность. Если в проекте нет экспертов, команда вернет разметку разметчиков Если в проекте есть эксперты, то будет возвращена только разметка экспертов

DistributeBatchTasks

На входе Id проекта и параметры распределения

{
  "projectId": "f41d1d65-6530-40b8-b601-43be45d3f195",
  "docsPerTask": 10
}

На выходе количество созданных BatchTask

5

Создает задания и распределяет их по разметчикам и экспертам. Имя команды для вызова: marker_distributeBatchTasks

DeleteBatchTask

На входе Id задания

{
  "projectId": "f41d1d65-6530-40b8-b601-43be45d3f195",
  "batchTaskId": "6780dcac-63a0-4f2d-9b9f-e6fc8d671b23"
}

На выходе ничего

{}

Удаляет задание. Имя команды для вызова: marker_deleteBatchTask

ListSettingsByField

На входе поле настроек

"nerField1"

На выходе настройки с данным полем

[
  {
    "id": "b0d79c75-82be-4b4d-893e-55f995455e3e",
    "field": "nerField1",
    "title": "Животное",
    "projectId": "b0d79c75-82be-4b4d-893e-55f995455e3e"
  },
  {
    "id": "bc31b57c-cf33-44b4-8eb2-f34011178019",
    "field": "nerField1",
    "title": "Тех. задание",
    "projectId": "b0d79c75-82be-4b4d-893e-55f995455e3e"
  }
]

Возвращает список настроек (NerSetting и ClassificationSetting) в обобщенном виде с запрошенным полем (кодом).

Имя команды для вызова: marker_listSettingsByField. Поддерживается только синхронный вызов.

ListCompletedLabelings

На входе пагинация

{
  "page": 1,
  "count": 10
}

На выходе список разметок

{
  "items": [
    {
      "id": "f41d1d65-6530-40b8-b601-43be45d3f195",
      "projectId": "f41d1d65-6530-40b8-b601-43be45d3f195",
      "userId": "f41d1d65-6530-40b8-b601-43be45d3f195",
      "created": 1668083991767,
      "modified": 1668083991767,
      "data": {
        "nerField1": []
      },
      "version": 1
    }
  ],
  "total": 10
}

Возвращает список разметок в статусе 'Завершено'. Имя команды для вызова: marker_listCompletedLabelings

ListAllNerSettings

На входе search-объект

{
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "title",
    "order": "asc"
  },
  "paging": {
    "page": 1,
    "count": 1
  }
}

На выходе список всех уникальных настроек выделения сущностей

{
  "items": [
    {
      "id": "8bc226e0-5913-4f81-8ee4-34c3200389a9",
      "projectIds": [
        "9ebbd15c-2be8-4055-a8ed-5d457b36e12c"
      ],
      "field": "testNerField",
      "title": "Тестовая сущность",
      "selectionColor": "#000000",
      "showInDocList": true,
      "attributes": [],
      "subNers": [
        {
          "id": "6a927e3f-9001-4a80-822d-1c34e64b4727",
          "projectIds": [
            "9ebbd15c-2be8-4055-a8ed-5d457b36e12c"
          ],
          "field": "testSubNerField",
          "title": "Тестовая подсущность",
          "selectionColor": "#101010",
          "showInDocList": false,
          "attributes": [],
          "subNers": []
        }
      ]
    }
  ],
  "total": 10
}

Возвращает список уникальных сущностей со всеми аттрибутами и подсущностями по всем проектам, не копированных ниоткуда. Уникальность определяется по признаку копирования. Имя команды для вызова: marker_listAllNerSettings. Поддерживается только синхронный вызов.

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
field InSetQuery, LikeQuery
title InSetQuery, LikeQuery

Доступные поля для сортировки: * field * title

Если поле sorting отсутствует, то список сортируется по дате создания настройки в порядке возрастания

listAllClassificationSettings

На входе search-объект

{
  "query": "",
  "context": {},
  "sorting": {
    "fieldName": "title",
    "order": "asc"
  },
  "paging": {
    "page": 1,
    "count": 1
  }
}

На выходе список всех уникальных настроек классификации

{
  "items": [
    {
      "id": "93bf1c26-fe22-4a08-95c0-a2b75204abb0",
      "projectIds": [
        "0201a55f-50e3-45de-acdb-86e294e3ec8d"
      ],
      "field": "testClass",
      "title": "Тестовая классификация",
      "classificationAction": "52201975-3940-4754-9ae5-e6f8ab5c4fb4",
      "optionsList": [
        "раз",
        "два",
        "три"
      ],
      "showInDocList": true
    }
  ],
  "total": 10
}

Возвращает список уникальных настроек классификации по всем проектам, не копированных ниоткуда. Уникальность определяется по признаку копирования. Имя команды для вызова: marker_listAllClassificationSettings. Поддерживается только синхронный вызов.

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
field InSetQuery, LikeQuery
title InSetQuery, LikeQuery

Доступные поля для сортировки: * field * title

Если поле sorting отсутствует, то список сортируется по дате создания настройки в порядке возрастания

GetTask

На входе ID проекта и задания

{
  "projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
  "taskId": "24330347-d7e6-4ad0-b153-a299e04612d2"
}

На выходе список всех уникальных настроек классификации

{
  "id": "24330347-d7e6-4ad0-b153-a299e04612d2",
  "projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
  "title": "TestDoc.pdf",
  "created": 1649146493990,
  "status": "cd17be48-6fdb-5d8f-183a-c20411043d20",
  "documentId": "24330347-d7e6-4ad0-b153-a299e04612d2",
  "skipReason": "Document not valid",
  "skipDate": 1649146493990,
  "ner": {
    "data": {
      "nerField1": [
        {
          "start": 54,
          "length": 10
        },
        {
          "start": 1976,
          "length": 10
        }
      ]
    },
    "version": 4
  },
  "checkingTask": "2408012d-4f06-442d-b7ac-c3221fdbdcd5"
}

Получает данные задания по его ID и ID проекта. Получает данные любого задания, без привязки к пользователю. Имя команды для вызова: marker_getTask. Поддерживается только синхронный вызов.

Объекты сервиса разметчика

CreateProjectReq

Поле Тип Обязательное Описание
title string да Наименование проекта
startDate timestamp нет Дата и время начала проекта
endDate timestamp нет Дата и время окончания проекта
instruction string нет Инструкция
instructionFile object нет Файл инструкции, формат аналогичен формату файла в data-model
labelingType uuid string да ID вида разметки (из справочника)
nerSettings object[] нет Настройки выделения сущностей
classificationSettings object[] нет Настройки классификации
docsPerTask number нет Количество документов в одной задаче (исключает параметр ниже)
tasksPerParticipant number нет Количество задач на участника (исключает параметр выше)
markupSuggesters uuid string[] да Список Id ролей, которые могу предлагать разметку

UpdateProjectReq

Поле Тип Обязательное Описание
id uuid string да ID обновляемого проекта
version number да Версия обновляемого проекта для оптимистичных блокировок
title string да Наименование проекта
startDate timestamp нет Дата и время начала проекта
endDate timestamp нет Дата и время окончания проекта
instruction string нет Инструкция
instructionFile object нет Файл инструкции, формат аналогичен формату файла в data-model
labelingType uuid string да ID вида разметки (из справочника)
nerSettings object[] нет Настройки выделения сущностей
classificationSettings object[] нет Настройки классификации
docsPerTask number нет Количество документов в одной задаче (исключает параметр ниже)
tasksPerParticipant number нет Количество задач на участника (исключает параметр выше)
markupSuggesters uuid string[] да Список Id ролей, которые могу предлагать разметку

UpdateProjectStatusReq

Поле Тип Обязательное Описание
id uuid string да ID обновляемого проекта
version number да Версия обновляемого проекта для оптимистичных блокировок
projectStatus uuid string да ID статуса проекта (из справочника)

AddFilesToProject (dto)

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
fileIds uuid string[] да Список ID файлов

UpsertNerSetting

Поле Тип Обязательное Описание
id uuid string нет ID настройки, если она существует
title string да Наименование настройки
selectionColor string да Цвет выделения
attributes object[] нет Атрибуты сущности
subNers object[] нет Подсущности
showInDocList boolean да Показывать в списке документов
nerHint string нет Подсказка
minLabelingCount string нет Минимальное количество разметки для обучения

UpsertClassificationSetting

Поле Тип Обязательное Описание
id uuid string нет ID настройки, если она существует
title string да Наименование настройки
classificationAction uuid string да ID действия при классификации
optionsList string[] нет Перечень вариантов
maxLength number нет Ограничение длины
classificationHint string нет Подсказка для настройки
showInDocList boolean да Показывать в списке документов
minLabelingCount string нет Минимальное количество разметки для обучения

Project

Поле Тип Обязательное Описание
id uuid string да ID проекта
created timestamp да Дата создания проекта
title string да Наименование проекта
startDate timestamp нет Дата и время начала проекта
endDate timestamp нет Дата и время окончания проекта
instruction string нет Инструкция
instructionFile object нет Файл инструкции
labelingType uuid string да ID вида разметки (из справочника)
projectStatus uuid string да ID статуса проекта (из справочника)
documentEntityType string да Тип сущности в модели данных, с которым сохраняются документы для этого проекта
nerSettings object[] нет Настройки выделения сущностей
classificationSettings object[] нет Настройки классификации
version number да Версия проекта для оптимистичных блокировок
docsPerTask number нет Количество документов в одной задаче (исключает параметр ниже)
tasksPerParticipant number нет Количество задач на участника (исключает параметр выше)
markupSuggesters uuid string[] да Список Id ролей, которые могу предлагать разметку

NerSetting

Поле Тип Обязательное Описание
id uuid string да ID настройки
projectIds uuid string[] да ID проекта, в котором определена эта настройка
field string да Код поля настройки
title string да Наименование настройки
selectionColor string да Цвет выделения
attributes object[] нет Атрибуты сущности
subNers object[] нет Подсущности
showInDocList boolean да Показывать в списке документов
nerHint string нет Подсказка
minLabelingCount string нет Минимальное количество разметки для обучения

ClassificationSetting

Поле Тип Обязательное Описание
id uuid string да ID настройки
projectIds uuid string[] да ID проекта, в котором определена эта настройка
field string да Код поля настройки
title string да Наименование настройки
classificationAction uuid string да ID действия при классификации
optionsList string[] нет Перечень вариантов
maxLength number нет Ограничение длины
classificationHint string нет Подсказка для настройки
showInDocList boolean да Показывать в списке документов
minLabelingCount string нет Минимальное количество разметки для обучения

ListProjectDocumentsReq

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
search Search да Фильтры, сортировка, пагинация

GetDocumentReq

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
documentId uuid string да ID документа в проекте

Document

Поле Тип Обязательное Описание
id uuid string да ID документа
projectId uuid string да ID проекта
title string да Наименование документа
created timestamp да Дата и время создания объекта документа (не путать с датой создания файла)
entityType string да Тип сущности соответствующей этому документу в модели данных
data object да Метаданные документа. В этом поле будут возвращены все поля документа, хранящиеся в модели данных. По умолчанию как пример всем документам разметчика создается модель DocumentData.

DocumentData

Поле Тип Обязательное Описание
file file object да Файл документа
name string да Наименование документа
path string нет Путь до файла в источнике
created timestamp да Дата и время создания файла (в источнике)
modified timestamp нет Дата и время изменения файла (в источнике)
owner object нет Владелец документа (в источнике файла)

ListProjectTasksReq

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
batchTaskId uuid string нет ID batchTask
search Search да Фильтры, сортировка, пагинация

GetTaskPositionInProjectReq

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
taskId uuid string да ID задания в проекте
search Search да Фильтры, сортировка, пагинация

Task

Поле Тип Обязательное Описание
id uuid string да ID задания
projectId uuid string да ID проекта
documentId uuid string да ID документа задания
userId uuid string да ID пользователя, которому назначено задание
title string да Наименование задания
created timestamp да Дата и время создания задания
status uuid string да ID Статус задания (из справочника)
skipReason string нет Причина пропуска задания
skipDate timestamp нет Дата и время пропуска
ner object нет Выделенные сущности
classification object нет Классификация
checkingTask uuid string нет ссылка на задание, проверяющее текущее (задание эксперта для разметчика)
checkedTask uuid string нет ссылка на исходное задание, которое проверяется текущим (задание разметчика для эксперта)

TaskLabeling

Поле Тип Обязательное Описание
version number да Версия разметки
data object да Данные (в зависимости от вида разметки, см. примеры в Confluence)

ProjectListItem

Поле Тип Обязательное Описание
id uuid string да ID проекта
created timestamp да Дата создания проекта
title string да Наименование проекта
startDate timestamp нет Дата и время начала проекта
endDate timestamp нет Дата и время окончания проекта
instruction string нет Инструкция
instructionFile object нет Файл инструкции
labelingType uuid string да ID вида разметки (из справочника)
projectStatus uuid string да ID статуса проекта (из справочника)
version number да Версия проекта для оптимистичных блокировок
documentsTotal number да Число документов в проекте

ProjectStatistics

Поле Тип Обязательное Описание
id uuid string да ID проекта
created timestamp да Дата создания проекта
title string да Наименование проекта
startDate timestamp нет Дата и время начала проекта
endDate timestamp нет Дата и время окончания проекта
instruction string нет Инструкция
instructionFile object нет Файл инструкции
labelingType uuid string да ID вида разметки (из справочника)
projectStatus uuid string да ID статуса проекта (из справочника)
version number да Версия проекта для оптимистичных блокировок
statistics object да Статистика проекта

ProjectStatisticsData

Поле Тип Обязательное Описание
taskStatuses object да Статистика статусов заданий запросившего статистику пользователя

ProjectTaskStatusStatItem

Поле Тип Обязательное Описание
status uuid string да ID Статус задания (из справочника)
count number да Количество заданий в данном статусе

LabelDocumentReq

Поле Тип Обязательное Описание
projectId uuid string да ID проекта задания
taskId uuid string да ID задания на разметку
ner object нет Новое выделение сущностей
classification object нет Новая классификация
version number да Версия разметки

ProjectTaskIdentity

Поле Тип Обязательное Описание
projectId uuid string да ID проекта, к которому относится задание
taskId uuid string да ID задания на разметку
reason string да Причина пропуска

SkipTaskReq

Поле Тип Обязательное Описание
projectId uuid string да ID проекта, к которому относится задание
taskId uuid string да ID задания на разметку

ListDocumentAssessorsReq

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
documents uuid string[] да ID документов проекта

ListDocumentAssessorsResult

Поле Тип Обязательное Описание
documentUsers object[] да Разметчики документов

SingleDocumentAssessors

Поле Тип Обязательное Описание
documentId uuid string да ID документа
assessors object[] да Разметчики документа, разбитые по статусу разметки

TaskStatusAssessors

Поле Тип Обязательное Описание
status uuid string да ID статуса из справочника
assessors object[] да Данные пользователей-разметчиков

TaskAssessor

Поле Тип Обязательное Описание
id uuid string да ID пользователя
modified timestamp да Последнее время изменения статуса задания на разметку
skipReason string нет Причина пропуска задания
skipDate timestamp нет Дата и время пропуска задания

ListProjectUsers (dto)

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
roleId uuid string нет ID роли, пользователей с которой нужно вернуть. Если не указан, вернет всех пользователей
search Search Да Объект поиска аналогичный другим сервисам

ProjectUser

Поле Тип Обязательное Описание
userId uuid string да ID пользователя
roleId uuid string да ID роли в справочнике
taskStatuses object[] да Статистика статусов заданий запросившего статистику пользователя

AddUsersToProject (dto)

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
userIds uuid string[] да ID пользователей
roleId uuid string нет ID роли в справочнике

DeleteUsersFromProject (dto)

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
userId uuid string[] да ID пользователей

UserWithProjects

Поле Тип Обязательное Описание
userId uuid string да ID пользователя
projects UserProjectInfo[] да Список с ифнформациями о проектах пользователя

UserProjectInfo

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
roleId uuid string да ID роли в справочнике
addedToProject timestamp Да Дата, когда пользователя добавили в проект

ExportLabelingItem

Поле Тип Обязательное Описание
documentId uuid string да ID документа
documentUrl url string нет Ссылка на файл документа
extractedTextUrl url string нет Ссылка на извлеченный текст документа
classificationFieldN (где N - номер поля) object для проектов типа Classification Поля со значениями проставленных классов
nerFieldN (где N - номер поля) object для проектов типа Ner (выделение сущностей) Поля с выделенными сущностями

ListBatchTaskDocuments (dto)

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
id uuid string да ID задания
status uuid string нет Статус задания
search Search да Search объект

BatchTaskDocument

Поле Тип Обязательное Описание
id uuid string да ID документа
title string да Название документа
created TimeStamp да Дата загрузки документа
markerTaskStatus uuid string да Статус документа у разметчика
expertTaskStatus uuid string да Статус документа у эксперта

ListTaskWithFragment (dto)

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
field string да Поле, документы с которым нужно получить
search Search да Search объект

TaskWithFragment

Поле Тип Обязательное Описание
id uuid string да ID документа
projectId uuid string да ID проекта
taskId uuid string да ID задания (Task, не BatchTask)
status LabelingStatus string да Статус разметки
title string Да Название документа
fragments Fragment[] Да Фрагменты

Fragment

Поле Тип Обязательное Описание
created TimeStamp да Дата создания разметки
fragment string да Фрагмент
attributes Atribute[] да Аттрибуты
subNer SubNer[] да Дочерние разметки

Attribute

Поле Тип Обязательное Описание
key string да Ключ аттрибута
value string нет Значение аттрибута

SubNer

Поле Тип Обязательное Описание
title string да Название разметки
fragments Fragment[] Да Фрагменты

DistributeBatchTasksDto

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
docsPerTask number нет Количество документов в BatchTask
tasksPerParticipant number нет Количество заданий на одном разметчике

Labeling

Поле Тип Обязательное Описание
id uuid string да ID разметки
projectId uuid string да ID проекта
userId uuid string да ID пользователя
created TimeStamp да Дата создания разметки
modified TimeStamp да Дата изменения разметки
data object да Данные разметки
version number да Версия разметки

DeleteBatchTask (Dto)

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
batchTaskId uuid string да ID задания

Setting

Настройка (nerSetting или classificationSetting) в обобщенном виде

Поле Тип Обязательное Описание
id uuid string да ID настройки
field string да поле
title string да название
projectId uuid string да ID проекта

Сервис статистики разметки

Сервис обрабатывает часть команд самого разметчика, и хранит промежуточные read представления для более удобного вывода информации. Сервис может принимать обрабатывать события, сохранять результат обработки в PostgresSQL и возвращать информацию из PostgresSQL. Команды на чтение приходят по HTTP, сервисные команды приходят через Kafka. Также поддерживается синхронизация с МД. Для этого через команду МД listObjects постранично выгружаются объекты, после чего, для каждого из объектов вызывается обработчик добавления объекта.

Сервис разбит на несколько модулей, в виде sbt проектов: - domain, в котором содержатся все доменные модели и их различные представления. - commands, в котором содержатся все команды, их описание и обработчики: http-routes. - store, содержит сервисы для сохранения и чтения из разных хранилищ доменных моделей. - service, содержит сервисы бизнес логики, которые определяют правила взаимодействия компонентов между собой. - boot, содержит зависимости и описание для сборки и запуска сервиса.

Локальный запуск

При запуске сервиса ожидается, что уже развернута необходимая инфраструктура: - PostgreSQL база по адресу localhost:5432/markerstats_db - Kafka по адресу localhost:9092 - Consul по адресу localhost:8500 - Адрес Kafka будет указан в application.conf - Добавлены необходимые переменные окружения: - MARKER_STATS_DB_HOST - MARKER_STATS_DB_PORT - MARKER_STATS_DB_NAME - MARKER_STATS_DB_USER - MARKER_STATS_DB_PASSWORD

Запуск из консоли с помощью SBT

MARKER_STATS_DB_HOST=localhost MARKER_STATS_DB_PORT=5432 MARKER_STATS_DB_NAME=markerstats_db MARKER_STATS_DB_USER=postgres MARKER_STATS_DB_PASSWORD=12345 sbt boot/run

Список переменных окружения сервиса marker-stats

Все доступные переменные окружения для настройки сервиса.

Переменная Тип Обязательная Значение по умолчанию Описание
MARKER_STATS_HTTP_HOST string нет "0.0.0.0" Хост, на котором слушает HTTP-сервер
MARKER_STATS_HTTP_PORT int нет 8192 Порт, на котором слушает HTTP-сервер
MARKER_STATS_KAFKA_SERVERS string да "localhost:9092" Адрес Kafka
MARKER_STATS_KAFKA_TOPIC string нет "marker_stats_commands" Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery.
MARKER_STATS_KAFKA_ENTITY_OBJECT_EVENT_TOPIC string нет "entityObjectEvent" Название кафка-топика, с событиями об объектах в модели данных
MARKER_STATS_KAFKA_CATALOG_EVENTS_TOPIC string нет "catalogEvents" Название кафка-топика, с событиями о каталогах
MARKER_STATS_KAFKA_USER_EVENTS_TOPIC string нет "userEvents" Название кафка-топика, с событиями о пользователях
MARKER_STATS_KAFKA_CONSUMER_GROUP string нет "marker_stats_consumer_group" Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске.
MARKER_STATS_KAFKA_PARTITIONS int нет 10 Число читаемых партиций из кафка-топика команд.
MARKER_STATS_EVENT_KAFKA_PARTITIONS int нет 10 Количество партиций в топике с событиями об объектах в модели данных
MARKER_STATS_KAFKA_CONSUMER_RESTART_MIN_BACKOFF duration string нет 1 second Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта)
MARKER_STATS_KAFKA_CONSUMER_RESTART_MAX_BACKOFF duration string нет 30 seconds Максимальное задержка до рестарта консьюмера после падения
MARKER_STATS_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR double нет 0.2 Рандомный фактор для вычисления задержки перед следующим рестратом консьюмера (При значении 0.2 задержка может быть до 20% больше, чем при 0)
MARKER_STATS_KAFKA_CONSUMER_RESTART_MAX_RESTARTS int нет 5 Максимальное число рестартов консьюмера после падения (в пределах MARKER_STATS_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN)
MARKER_STATS_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN duration string нет 5 minutes Временной отрезок, в который MARKER_STATS_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов
MARKER_STATS_KAFKA_COMMANDEVENT_TOPIC string да "commandevents" Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд.
MARKER_STATS_KAFKA_AUTH_USER string нет "" Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены.
MARKER_STATS_KAFKA_AUTH_PASSWORD string нет "" Пароль учетной записи Kafka.
MARKER_STATS_KAFKA_AUTH_TRUSTSTORE_LOCATION string нет "" Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применятся не будет.
MARKER_STATS_KAFKA_AUTH_TRUSTSTORE_PASSWORD string нет "" Пароль к харнилищу сертификатов.
MARKER_STATS_KAFKA_AUTH_MODE string нет "static" Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса
MARKER_STATS_KAFKA_AUTH_CONFIG string нет "" Настройки для аутентификации
MARKER_STATS_KAFKA_AUTH_CACHE_SIZE int нет Максимальный размер кеша для Kafka producer (количество активных соединений).
MARKER_STATS_KAFKA_AUTH_CACHE_TTL duration string нет Время жизни Kafka producer в кеше.
MARKER_STATS_CONSUL_ADDR url string нет "http://localhost:8500" Адрес Сonsul.
MARKER_STATS_CONSUL_AUTH_USER string нет "" Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены.
MARKER_STATS_CONSUL_AUTH_PASSWORD string нет "" Пароль учетной записи Сonsul.
MARKER_STATS_TRACE_DURATION boolean нет false Признак необходимости трассировки выполнения команд
MARKER_STATS_DISCOVERABLE_ID string нет "another_MARKER_STATS _service_instance" ID сервиса в ServiceDiscovery
MARKER_STATS_DISCOVERABLE_NAME string нет "markerstats" Имя сервиса в ServiceDiscovery
MARKER_STATS_DISCOVERABLE_HOST string да "localhost" Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service
MARKER_STATS_DISCOVERABLE_PORT int нет Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер.
MARKER_STATS_DISCOVERABLE_LIVETIME duration string нет 2 minutes Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым.
MARKER_STATS_DISCOVERABLE_HEALTHPASS string нет 1 minute Периодичность отправки health check в ServiceDiscovery
MARKER_STATS_AKKA_HTTP_CLIENT_MAXCON int нет 512 Максимальное число одновременных исходящих HTTP-соединений
MARKER_STATS_AKKA_HTTP_CLIENT_MAXREQ int нет 1024 Максимальное число одновременных исходящих HTTP-запросов
MARKER_STATS_AKKA_HTTP_SERVER_MAXCON int нет 1024 Максимальное число одновременных входящих HTTP-соединений
MARKER_STATS_INTERNALCMD_ALLOW bool нет false Можно ли сервису отправлять внутрисистемные команды
MARKER_STATS_HEALTH_TIMEOUT duration string нет 5 seconds Максимальное время ожидания ответа health check
MARKER_STATS_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD duration string нет 10 minutes Время кэширования данных по командам из CommandDiscovery
MARKER_STATS_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD duration string нет 30 seconds Время кэширования данных по сервисам из ServiceDiscovery
MARKER_STATS_DB_HOST string да Хост БД
MARKER_STATS_DB_PORT int да Порт БД
MARKER_STATS_DB_NAME string да Имя базы в БД
MARKER_STATS_DB_URL jdbc url string нет JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы.
MARKER_STATS_DB_USER string да Пользователь БД
MARKER_STATS_DB_PASSWORD string да Пароль пользователя БД
MARKER_STATS_AUTHZFORCE_ADDR string нет "http://localhost:8080/authzforce-ce" Адрес AuthZforce server
MARKER_STATS_AUTHZFORCE_DOMAIN string нет "" Доступный DomainID в AuthZforce server
MARKER_STATS_LOG_LEVEL string нет INFO Общий уровень логирования в сервисе
MARKER_STATS_LOG_LEVEL_AKKA string нет INFO Уровень логирования для akka
MARKER_STATS_LOG_LEVEL_LIQUIBASE string нет INFO Уровень логирования для liquibase (миграции)
MARKER_STATS_LOG_LEVEL_APPLICATION string нет DEBUG Уровень логирования для application
MARKER_STATS_LOG_LEVEL_SLICK_STATEMENT string нет DEBUG Уровень логирования запросов, отправляемых slick в БД
MARKER_STATS_LOG_LEVEL_SLICK_BENCHMARK string нет OFF Уровень логирование бенчмарков выполнения запросов slick
MARKER_STATS_LOG_LEVEL_KAFKA_PRODUCER string нет WARN Уровень логирования конфига kafka-producer
MARKER_STATS_LOG_LEVEL_KAFKA_CONSUMER string нет WARN Уровень логирования конфига kafka-consumer
MARKER_STATS_LOG_LEVEL_AKKAHTTPSENDER string нет TRACE Уровень логирования для отправки команд через HTTP. На уровне INFO логируется трассировка, если она включена
MARKER_STATS_LOG_LEVEL_KAFKASENDER string нет TRACE Уровень логирования для отправки команд через Kafka. На уровне INFO логируется трассировка, если она включена
MARKER_STATS_LOG_LEVEL_COMMANDSTATUSCLI string нет TRACE Уровень логирования для проверки состояний команд в сервисе статусов
MARKER_STATS_LOG_LEVEL_KAFKACOMMANDSCONSUMER string нет INFO Уровень логирования для получения команд через Kafka
MARKER_STATS_LOG_LEVEL_SYNCHRONIZATION string нет INFO Уровень логирования при синхронизации read-модели
MARKER_STATS_LOG_LEVEL_AKKA_EVENTS_CONSUMER string нет INFO Уровень логирования для обработки событий из всех сервисов
MARKER_STATS_LOG_LEVEL_TEAM_ROUTES string нет TRACE Уровень логирования для роутов /team
MARKER_STATS_VERDI_CLIENT_PARALLELISM int нет 32 Максимальное количество параллельных запросов в verdi в batch операциях
MARKER_STATS_VERDI_CLIENT_DEFAULT_PAGE_SIZE int нет 250 Размер страницы, получаемой из модели данных при синхронизации

Список команд сервиса marker-stats

В качестве Input-а для команд, сервис всегда ожидает CommandRequest (как и любой другой сервис, принимающий команды), так что в описании команды указано лишь описание поля payload для CommandRequest.

В сервисе реализованны следующие команды: - Запустить синхронизацию - Запустить синхронизацию для всех сущностей с префиксом - Запустить синхронизацию отношений - Запустить синхронизацию отношений для всех сущностей с префиксом - Запустить полную синхронизацию сервиса - Получить статистику проекта для текущего пользователя - Получить статистику проекта без учета пользователя - Получить список проектов со статистикой - Получить участников проекта - Получить статистику по сущностям проекта

SyncEntityType

Запускает синхронизацию EntityType из МД с сервисом, если он упустил какие-то события. Имя для вызова markerstats_kafka_SyncEntityType. Поддерживает синхронный и асинхронный вызов. Команда возвращает результат, когда синхронизация завершена.

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

SyncAllEntityTypes

На входе префикс сущности и имя сущности, чей id используется как постфикс

{
   "prefix": "BatchTaskFor",
   "listEntity": "Project"
}

Выходных данных нет

Запускает синхронизацию всех EntityType с указанным префиксом. Необходимый список EntityType формируется через запрос списка сущностей типа listEntity Имя для вызова markerstats_kafka_SyncAllEntityType. Поддерживает синхронный и асинхронный вызов.

SyncRelation

На входе типы сущностей и поле, по которому идет связь

{
   "entityFrom": "ProjectParticipant",
   "entityTo": "Project",
   "field": "project"
}

Выходных данных нет

Запускает синхронизацию всех отношений для указанных типов данных. Имя для вызова markerstats_kafka_SyncRelations. Поддерживает синхронный и асинхронный вызов.

SyncAllRelations

На входе данные для определения синхронизируемых сущностей

{
   "prefix1": "TaskFor",
   "prefix2": "BatchTaskFor",
   "listEntity": "Project",
   "field": "parent"
}

Выходных данных нет

Запускает синхронизацию всех отношений между сущностями с указанными префиксами. Необходимый список EntityType формируется через запрос списка сущностей типа listEntity. Имя для вызова markerstats_kafka_SyncAllRelations. Поддерживает синхронный и асинхронный вызов.

SyncEverything

Входные и выходные данные отсутствуют

Запускает синхронизацию всех данных, необходимых для работы сервиса. Эту команду можно запускать без предварительной очистки БД. Имя для вызова markerstats_kafka_SyncEverything. Поддерживает синхронный и асинхронный вызов.

SyncCatalog

Запускает синхронизацию каталога из Alexandrina с сервисом, если он упустил какие-то события. Имя для вызова markerstats_kafka_SyncCatalog. Поддерживает синхронный и асинхронный вызов. Команда возвращает результат, когда синхронизация завершена.

GetProjectFields

На входе Search объект (поддерживается только пагинация)

{
   "query": "",
   "context": {},
   "paging": {
      "page": 1,
      "count": 10
   }
}

На выходе статистика по спанам проекта

{
   "items": [
      {
         "id": "db77be48-6ffb-4d8f-983a-c20411043e10",
         "title":  "Проект 1",
         "startDate": 1649146493990,
         "endDate": 1649146493990,
         "projectStatus": "db77be48-6ffb-4d8f-983a-c20411043e10",
         "labelingType": "db77be48-6ffb-4d8f-983a-c20411043e10",
         "taskCount": 10,
         "nerSettings": [
            {
               "field": "nerField1",
               "title": "Город",
               "selectionColor": "#783f13",
               "showInDocList": true,
               "nerHint": "размечай обдумывая",
               "minLabelingCount": 10,
               "attributes": [],
               "subNers": [
                  {
                     "field": "nerField1SubNer3",
                     "title": "Город",
                     "selectionColor": "#783f13",
                     "showInDocList": true,
                     "nerHint": "размечай обдумывая",
                     "minLabelingCount": 10,
                     "subNers": []
                  }
               ]
            }
         ],
        "spanCounts": [
           {
              "field": "nerField1",
              "count": 3
           }
        ]
      }
   ],
   "total": 1
}

Получение статистики по спанам проекта

Имя команды для вызова: marker_getProjectFields. Поддерживается только синхронный вызов.

GetProjectStatistics

На входе ID проекта

"db77be48-6ffb-4d8f-983a-c20411043e10"

На выходе свойства и статистика проекта

{
  "id": "db77be48-6ffb-4d8f-983a-c20411043e10",
  "title": "TestProject",
  "startDate": 1649146493990,
  "endDate": 1649146493990,
  "projectStatus": "6fae306e-9120-4b84-a79e-530a0be5617c",
  "instruction": "Делай что должно и будь что будет",
  "labelingType": "9d08b328-9882-4ea2-bbc9-c44d341e028c",
  "statistics": {
    "taskStatuses": [
      {
        "status": "18388b51-3c31-4530-a76b-24404f32ae3c",
        "count": 0
      },
      {
        "status": "66d92292-10da-48e2-81c7-6189725ed813",
        "count": 1
      },
      {
        "status": "a0305766-bb9d-499a-92a4-a34cc6333355",
        "count": 2
      },
      {
        "status": "25e5128f-7e8b-44d6-b515-d1c0c3e0bf3d",
        "count": 3
      }
    ]
  }
}

Или ошибка, если проект отсутствует

{
    "businessError": null,
    "message": "ERROR: Object not found",
    "stackTrace": null,
    "data": null
}

Получение статистики проекта по его ID

Имя команды для вызова: marker_getProjectStatistics. Поддерживается только синхронный вызов. Команда в основном сервисе доступна с именем marker_getProjectStatistics_direct.

GetFullProjectStatistics

На входе ID проекта

"db77be48-6ffb-4d8f-983a-c20411043e10"

На выходе статистика проекта

{
   "distributedUsersCount": 20,
   "newUsersCount": 20,
   "distributedTasksCount": 10,
   "newTasksCount": 10
}

Или ошибка, если проект отсутствует

{
    "businessError": null,
    "message": "ERROR: Object not found",
    "stackTrace": null,
    "data": null
}

Получение статистики проекта по его ID без учета пользователя

Имя команды для вызова: marker_getFullProjectStatistics. Поддерживается только синхронный вызов.

ListProjectStatistics

На входе параметры поиска и пагинации проектов (Search)

{
  "query": "",
  "context": {},
  "paging": {"page": 1, "count": 5}
}

На выходе свойства и статистика проектов из выборки

{
  "items": [
    {
      "id": "9bc7e8c6-f71c-4a53-abc6-222a8a431e84",
      "title": "Test Classification",
      "startDate": 1649146493990,
      "endDate": 1649146493990,
      "labelingType": "9d08b328-9882-4ea2-bbc9-c44d341e028c",
      "projectStatus": "6fae306e-9120-4b84-a79e-530a0be5617c",
      "statistics": {
        "taskStatuses": [
          {
            "status": "18388b51-3c31-4530-a76b-24404f32ae3c",
            "count": 0
          },
          {
            "status": "66d92292-10da-48e2-81c7-6189725ed813",
            "count": 1
          },
          {
            "status": "a0305766-bb9d-499a-92a4-a34cc6333355",
            "count": 2
          },
          {
            "status": "25e5128f-7e8b-44d6-b515-d1c0c3e0bf3d",
            "count": 3
          }
        ]
      }
    }
  ],
  "total": 1
}

Получение статистики проектов

Имя команды для вызова: marker_listProjectStatistics. Поддерживается только синхронный вызов. Команда в основном сервисе доступна с именем marker_listProjectStatistics_direct.

ListProjectUsers

На входе ID проекта

{
  "projectId": "db77be48-6ffb-4d8f-983a-c20411043e10",
  "roleId": "45ca52f3-d346-41ce-9ebf-904b40eddd76",
  "search": {
    "query": "",
    "context": {},
    "sorting": null,
    "paging": {
      "page": 1,
      "count": 5
    }
  }
}

На выходе страница с пользователями проекта

{
  "total": 300,
  "items": [
    {
      "userId": "f0ed4aa8-2090-4e48-82e5-62a2ef5623cf",
      "roleId": "45ca52f3-d346-41ce-9ebf-904b40eddd76",
      "taskStatuses": [
        {
          "status": "18388b51-3c31-4530-a76b-24404f32ae3c",
          "count": 0
        },
        {
          "status": "66d92292-10da-48e2-81c7-6189725ed813",
          "count": 1
        },
        {
          "status": "a0305766-bb9d-499a-92a4-a34cc6333355",
          "count": 2
        },
        {
          "status": "25e5128f-7e8b-44d6-b515-d1c0c3e0bf3d",
          "count": 3
        }
      ]
    }
  ]
}

Возвращает список пользователей в проекте. На данный момент Search объект поддерживает только Paging

Имя команды для вызова: marker_listProjectUsers. Поддерживается только синхронный вызов. Команда в основном сервисе доступна с именем marker_listProjectUsers_direct.

ListEntityStats

На входе ID проекта

"09e65817-e136-4f7c-913b-cb04f4edbef1"

На выходе статистика по сущностям

[
   {
      "entityCode": "nerField1",
      "documentCount": 28
   },
   {
      "entityCode": "nerField10",
      "documentCount": 5
   }
]

Возвращает статистику по сущностям указанного проекта.

Имя команды для вызова: marker_listEntityStats. Поддерживается только синхронный вызов.

GetBatchTaskAdmin

На входе Id задачи

"09e65817-e136-4f7c-913b-cb04f4edbef1"

На выходе полная информация о задаче

{
   "id": "09e65817-e136-4f7c-913b-cb04f4edbef1",
   "projectId": "68dc922b-5588-4654-8796-78b0ef5ae197",
   "marker": "b963a6c6-b63d-4bff-b810-80dd3762b56d",
   "expert": "92201b05-9311-4b0b-ad05-d1030e41c1e4",
   "title": "№1",
   "status": "36bb2406-ee88-4d05-8730-b9cf521eaad6",
   "created": 1666957524,
   "modified": 1666957524,
   "markerTasksStats": {
      "taskStatuses": [
         {
            "status": "18388b51-3c31-4530-a76b-24404f32ae3c",
            "count": 0
         },
         {
            "status": "66d92292-10da-48e2-81c7-6189725ed813",
            "count": 1
         },
         {
            "status": "a0305766-bb9d-499a-92a4-a34cc6333355",
            "count": 2
         },
         {
            "status": "25e5128f-7e8b-44d6-b515-d1c0c3e0bf3d",
            "count": 3
         }
      ]
   },
   "expertTasksStats": {
      "taskStatuses": [
         {
            "status": "18388b51-3c31-4530-a76b-24404f32ae3c",
            "count": 0
         },
         {
            "status": "66d92292-10da-48e2-81c7-6189725ed813",
            "count": 1
         },
         {
            "status": "a0305766-bb9d-499a-92a4-a34cc6333355",
            "count": 2
         },
         {
            "status": "25e5128f-7e8b-44d6-b515-d1c0c3e0bf3d",
            "count": 3
         }
      ]
   }
}

Возвращает информацию по заданию для админки.

Имя команды для вызова: marker_getBatchTaskAdmin. Поддерживается только синхронный вызов.

ListBatchTasksAdmin

На входе Id проекта и Search объект

{
   "projectId": "5c04e027-e819-4f75-9652-8d1a6f76668e",
   "search": {
      "query": "",
      "context": {},
      "sorting": null,
      "paging": {"page": 1, "count": 1}
   }
}

На выходе страница с задачами

[
   {
      "id": "d4a3423b-cf43-4f59-9f93-01fbb07e7ac5",
      "created": 1666957679,
      "modified": 1666957679,
      "status": "36bb2406-ee88-4d05-8730-b9cf521eaad6",
      "docCount": 6,
      "userInfo": {
         "id": "b963a6c6-b63d-4bff-b810-80dd3762b56d",
         "email": "emailname@mail.io",
         "info": {
            "firstName": "John",
            "lastName": "Week",
            "middleName": "Jovonovich"
         }
      }
   }
]

Возвращает информацию в проекте по страницам.

Имя команды для вызова: marker_listBatchTasksAdmin. Поддерживается только синхронный вызов.

Search объект поддерживает следующие параметры:

Доступные поля для фильтрации и виды фильтров по ним:

Поле Виды фильтров
id InSetQuery
marker InSetQuery
expert InSetQuery
title InSetQuery, LikeQuery
created RangeQuery
modified RangeQuery
status InSetQuery

Доступные поля для сортировки:

Поле
title
created
modified

GetBatchTask

На входе Id задачи

"340b6d6c-97a4-4eab-81ee-61e0a617736d"

На выходе информация о задаче интересная конкретному пользователю

{
   "id": "340b6d6c-97a4-4eab-81ee-61e0a617736d",
   "projectId": "ee6d40a9-9fbc-4e72-a107-6cdce3dd9ffb",
   "title": "№1",
   "status": "36bb2406-ee88-4d05-8730-b9cf521eaad6",
   "created": 1666957679,
   "modified": 1666957679,
   "tasksStats": {
      "taskStatuses": [
         {
            "status": "18388b51-3c31-4530-a76b-24404f32ae3c",
            "count": 0
         },
         {
            "status": "66d92292-10da-48e2-81c7-6189725ed813",
            "count": 1
         },
         {
            "status": "a0305766-bb9d-499a-92a4-a34cc6333355",
            "count": 2
         },
         {
            "status": "25e5128f-7e8b-44d6-b515-d1c0c3e0bf3d",
            "count": 3
         }
      ]
   }
}

Возвращает информацию о задаче для ЛК.

Имя команды для вызова: marker_getBatchTask. Поддерживается только синхронный вызов.

Для выполнения команды пользователь должен быть авторизован. Если задание существует, но пользователь в нем не участвует, команда вернет 404.

ListBatchTasks

На входе Id проекта

"ee6d40a9-9fbc-4e72-a107-6cdce3dd9ffb"

На выходе список с информацией о задачах конкретного пользователя в указанном проекте

[
   {
      "id": "340b6d6c-97a4-4eab-81ee-61e0a617736d",
      "projectId": "ee6d40a9-9fbc-4e72-a107-6cdce3dd9ffb",
      "title": "№1",
      "status": "36bb2406-ee88-4d05-8730-b9cf521eaad6",
      "created": 1666957679,
      "modified": 1666957679,
      "tasksStats": {
         "taskStatuses": [
            {
               "status": "18388b51-3c31-4530-a76b-24404f32ae3c",
               "count": 0
            },
            {
               "status": "66d92292-10da-48e2-81c7-6189725ed813",
               "count": 1
            },
            {
               "status": "a0305766-bb9d-499a-92a4-a34cc6333355",
               "count": 2
            },
            {
               "status": "25e5128f-7e8b-44d6-b515-d1c0c3e0bf3d",
               "count": 3
            }
         ]
      }
   }
]

Возвращает все задания пользователя.

Имя команды для вызова: marker_listBatchTasks. Поддерживает только синхронный вызов.

Для выполнения команды пользователь должен быть авторизован.

ListProjectSpans (В разработке)

На входе Id проекта

"2af4d2ef-8315-46ce-bda8-8028d51b25f7"

На выходе информация о количестве спанов

{
   "total": 300,
   "items": [
      {
         "id": "9bc7e8c6-f71c-4a53-abc6-222a8a431e84",
         "title": "Test Classification",
         "startDate": 1649146493990,
         "endDate": 1649146493990,
         "labelingType": "9d08b328-9882-4ea2-bbc9-c44d341e028c",
         "projectStatus": "6fae306e-9120-4b84-a79e-530a0be5617c",
         "documentsTotal": 100,
         "spanCounts": [
            {
               "field": "nerField1",
               "count": 10
            },
            {
               "field": "nerField1SubNer3",
               "count": 15
            }
         ],
         "nerSettings": [
            {
               "field": "nerField1",
               "title": "Город",
               "selectionColor": "#783f13",
               "showInDocList": true,
               "nerHint": "размечай обдумывая",
               "minLabelingCount": 10,
               "attributes": [],
               "subNers": [
                  {
                     "field": "nerField1SubNer3",
                     "title": "Город",
                     "selectionColor": "#783f13",
                     "showInDocList": true,
                     "nerHint": "размечай обдумывая",
                     "minLabelingCount": 10,
                     "subNers": []
                  }
               ]
            }
         ]
      }
   ]
}

Возвращает количество спанов для каждого поля выделения сущностей в проекте.

Объекты сервиса статистики разметки

SyncAllRequest

Поле Тип Обязательное Описание
prefix string да Префикс EntityType, для которых будет запущена синхронизация
listEntity string да Будет запрошен список сущностей с этим EntityType. Id из этого списка будут использованы как постфикс для синхронизируемых EntityType

SyncRelationRequest

Поле Тип Обязательное Описание
entityFrom string да Тип первой сущности отношения
entityTo string да Тип второй сущности отношения
field string да Имя поля, по которому идет отношение

SyncAllRelationsRequest

Поле Тип Обязательное Описание
prefix1 string да Префикс типов первых сущностей отношения
prefix2 string да Префикс типов вторых сущностей отношения
listEntity string да Тип сущности, id которых будут использованы как постфикс
field string да Имя поля, по которому идут отношения

ProjectWithSpanStats

Поле Тип Обязательное Описание
id uuid string да ID проекта
title string да Наименование проекта
startDate timestamp нет Дата и время начала проекта
endDate timestamp нет Дата и время окончания проекта
labelingType uuid string да ID вида разметки (из справочника)
projectStatus uuid string да ID статуса проекта (из справочника)
documentsTotal number да Суммарное количество документов в проекте
nerSettings object[] нет Настройки выделения сущностей
spanCounts object[] нет Массив с информацией о количестве спанов для поля

FullProjectStatistics

Поле Тип Обязательное Описание
distributedUsersCount number да Кол-во распределенных пользователей
newUsersCount number да Кол-во нераспределенных пользователей
distributedTasksCount number да Кол-во распределенных документов
newTasksCount number да Кол-во нераспределенных документов

SpanStatItem

Поле Тип Описание
field string Id поля выделения сущностей
count number Количество спанов

EntityStatsItem

Поле Тип Обязательное Описание
entityCode string да Код сущности
documentCount number да Количество документов с этой сущностью

BatchTask

Поле Тип Описание
id uuid string Строковый код типа поля
projectId uuid string Название типа поля для вывода в UI
title string Название задания
status uuid string Статус задания
created timestamp Дата и время создания задания
modified timestamp Дата и время последнего изменения задания
tasksStats object Агрегированная статистика по подзаданиям для запросившего пользователя

BatchTaskAdmin

Поле Тип Описание
id uuid string Строковый код типа поля
projectId uuid string Название типа поля для вывода в UI
marker uuid string Тип поля в БД
expert uuid string Произвольные настройки, применяемые для данного типа поля
title string Название задания
status uuid string Статус задания
created timestamp Дата и время создания задания
modified timestamp Дата и время последнего изменения задания
markerTasksStats object Агрегированная статистика по подзаданиям для разметчика
expertTasksStats object Агрегированная статистика по подзаданиям для эксперта

BatchTaskAdminListItem

Поле Тип Описание
id uuid string Строковый код типа поля
title string Название задания
status uuid string Статус задания
created timestamp Дата и время создания задания
modified timestamp Дата и время последнего изменения задания
docCount number Количество документов
userInfo object Информация о разметчике назначенном на задание

User (mon)

Структура описывающая сущность "пользователь"

Поле Описание
id Идентификатор пользователя
email Уникальный email пользователя
info Опциональная информация о пользователе UserInfo

UserInfo (mon)

Поле Описание
firstName Имя пользователя (необязательное поле)
lastName Фамилия пользователя (необязательное поле)
middleName Отчество пользователя (необязательное поле)

ListBatchTaskAdminRequestDTO

Поле Тип Обязательное Описание
projectId uuid string да ID проекта
search Search да Фильтры, сортировка, пагинация

ProjectFields

Поле Тип Обязательное Описание
id uuid string да ID проекта
title string да Название проекта
startDate timestamp нет Дата и время начала проекта
endDate timestamp нет Дата и время окончания проекта
projectStatus uuid string да ID статуса проекта (из справочника)
labelingType uuid string да ID вида разметки (из справочника)
taskCount number да Количество документов в проекте
nerSettings object[] да Настройки выделения сущностей
spanCounts object[] да Информация по количеству спанов

FieldCount

Поле Тип Обязательное Описание
field string да Название спана
count number да Количество