Сервис разметчика
Сервис разметчика (Marker) - это система для подготовки обучающей выборки.
Marker позволяет пользователям размечать данные документов и проверять корректность разметки других пользователей,
после чего результаты разметки могут использоваться для машинного обучения.
В сервисе предусмотрены следующие команды:
- Создать проект
- Получить проект
- Получить участников проекта
- Обновить проект
- Обновить статус проекта
- Удалить проект
- Добавить файлы в проект
- Получить статистику проекта
- Получить список проектов
- Получить список проектов со статистикой
- Получить конкретный документ в проекте
- Список документов проекта
- Список заданий проекта
- Позиция задания в списке
- Назначить проект на пользователя
- Обновить разметку документа
- Сохранить окончательный вариант разметки
- Пропустить документ
- Вернуть задание в работу
- Вернуть задание в необработанные
- Вернуть задание от эксперта на доработку разметчику
- Получить список пользователей, назначенных на разметку документов
- Добавить пользователей в проект
- Удалить пользователей из проекта
- Получить проекты по пользователям
- Экспортировать разметку
- Список заданий с разметкой
- Список разметок в статусе 'Завершено'
- Распределить задания (BatchTask)
- Удалить задание (BatchTask)
- Список настроек сущностей с полем
- Список всех уникальных настроек выделения сущностей
- Список всех уникальных настроек классификации
- Получение данных задания по ID
Конфигурирование сервиса разметчика
Требования к запуску сервиса разметчика
Запуск сервиса осуществляется локально через 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. Поддерживается асинхронный и синхронный вызов.
- На входе: CreateProjectReq
- На выходе: UUID созданного проекта
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. Поддерживается только синхронный вызов.
- На входе: UUID проекта
- На выходе: Project
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. Поддерживается асинхронный и синхронный вызов.
- На входе: UpdateProjectReq
- На выходе: Boolean
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. Поддерживается асинхронный и синхронный вызов.
- На входе: UpdateProjectStatusReq
- На выходе: Boolean
DeleteProject
На входе ID проекта
"db77be48-6ffb-4d8f-983a-c20411043e10"
На выходе результат удаления
true
Или ошибка, если проект отсутствует
{
"businessError": null,
"message": "ERROR: Object not found",
"stackTrace": null,
"data": null
}
Удаление проекта по ID
Имя команды для вызова: marker_deleteProject. Поддерживается асинхронный и синхронный вызов.
- На входе: UUID удаляемого проекта
- На выходе: Boolean
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. Поддерживается асинхронный и синхронный вызов.
- На входе: AddFilesToProject
- На выходе: string[]
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. Поддерживается только синхронный вызов.
- На входе: GetDocument
- На выходе: Document
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. Поддерживается только синхронный вызов.
- На входе: ListProjectDocumentsReq
- На выходе: Страница Document
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. Поддерживается только синхронный вызов.
- На входе: ListProjectTasksReq
- На выходе: Страница Task
GetTaskPositionInProject
На входе ID проекта и задания и параметры поиска
{
"projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
"taskId": "24330347-d7e6-4ad0-b153-a299e04612d2",
"search": {
"query": "",
"context": {}
}
}
На выходе позиция задания среди всех найденных (в соответствии с поисковым запросом)
{
"position": 1,
"total": 5
}
Получение позиции задания в отфильтрованном и отсортированном списке.
Имя команды для вызова: marker_getTaskPositionInProject. Поддерживается только синхронный вызов.
- На входе: GetTaskPosition
- На выходе: PositionInList
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. Поддерживается только синхронный вызов.
- На входе: Search
- На выходе: Страница ProjectListItem
AssignProjectToUser
На входе ID проекта
"1879aa41-10d9-4ae5-89a6-aeeff005b345"
На выходе количество новых назначенных заданий
42
Назначение всех документов проекта на текущего пользователя
Имя команды для вызова: marker_assignProjectToUser. Поддерживается асинхронный и синхронный вызов.
- На входе: UUID проекта
- На выходе: number (чисто назначенных заданий)
LabelDocument
На входе ID задания на разметку документа, версия разметки и новая разметка
{
"projectId": "1879aa41-10d9-4ae5-89a6-aeeff005b345",
"taskId": "3c6a450e-bbce-442c-905e-8108ed8c5a05",
"ner": {
"nerField1": [
{
"fragment": "Fragment of text",
"start": 250,
"end": 266,
"created": 1234124321432,
"byExpert": true,
"uncertain": false,
"segments": [
{
"start": 250,
"end": 257
},
{
"start": 262,
"end": 266
}
],
"nerField1Attribute1": "Attribute value",
"nerField1Attribute3": ["Attribute value"],
"nerField1SubNer1": [
{
"fragment": "Fragment of text",
"start": 255,
"end": 260,
"created": 12341243223432
}
],
"nerField1SubNer2": []
}
],
"nerField2":[]
},
"version": 5
}
На выходе новая версия разметки
6
Обновление разметки документа
Имя команды для вызова: marker_labelDocument. Поддерживается асинхронный и синхронный вызов.
- На входе: LabelDocumentReq
- На выходе: number (новая версия разметки)
CommitTask
На входе ID проекта и задания
{
"projectId": "1879aa41-10d9-4ae5-89a6-aeeff005b345",
"taskId": "3c6a450e-bbce-442c-905e-8108ed8c5a05"
}
На выходе результат
true
Сохранение окончательного варианта разметки (перевод в статус "Завершенный")
Имя команды для вызова: marker_commitTask. Поддерживается асинхронный и синхронный вызов.
- На входе: ProjectTaskIdentity
- На выходе: Boolean
SkipTask
На входе ID проекта, ID задания и причина пропуска
{
"projectId": "1879aa41-10d9-4ae5-89a6-aeeff005b345",
"taskId": "3c6a450e-bbce-442c-905e-8108ed8c5a05",
"reason": "I'm too tired"
}
На выходе результат
true
Пропуск задания на разметку документа. Удаляет существующую разметку.
Имя команды для вызова: marker_skipTask. Поддерживается асинхронный и синхронный вызов.
- На входе: SkipTask
- На выходе: Boolean
ReturnTaskToWork
На входе ID проекта и задания
{
"projectId": "1879aa41-10d9-4ae5-89a6-aeeff005b345",
"taskId": "3c6a450e-bbce-442c-905e-8108ed8c5a05"
}
На выходе результат
true
Вернуть задание в работу.
Имя команды для вызова: marker_returnTaskToWork. Поддерживается асинхронный и синхронный вызов.
- На входе: ProjectTaskIdentity
- На выходе: Boolean
ReturnTaskToDraft
На входе ID проекта и задания
{
"projectId": "1879aa41-10d9-4ae5-89a6-aeeff005b345",
"taskId": "3c6a450e-bbce-442c-905e-8108ed8c5a05"
}
На выходе результат
true
Вернуть задание в необработанные.
Имя команды для вызова: marker_returnTaskToDraft. Поддерживается асинхронный и синхронный вызов.
- На входе: ProjectTaskIdentity
- На выходе: Boolean
ReturnTaskForLabeling
На входе ID проекта и задания эксперта
{
"projectId": "1879aa41-10d9-4ae5-89a6-aeeff005b345",
"taskId": "717ef405-b19e-45f0-8198-d0f2b896fd52"
}
На выходе результат
true
Вернуть задание от эксперта на доработку разметчику. При этом задание эксперта и связанное с ним задание разметчика переходят в состояние "Необработанный". Также при этом разметка от эксперта копируется разметчику на случай, если эксперт внес какие-нибудь изменения.
Если команда вызывается для таски разметчика, а не эксперта, команда вернет false (ничего не произошло полезного).
Команда возвращает true, когда успешно проведена вся операция по копированию и смене статусов.
Команда принимает на вход только таску эксперта в состоянии "В работе". В противном случае возвращается ошибка.
Имя команды для вызова: marker_returnTaskForLabeling. Поддерживается асинхронный и синхронный вызов.
- На входе: ProjectTaskIdentity
- На выходе: Boolean
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. Поддерживается асинхронный и синхронный вызов.
- На входе: ListDocumentAssessors
- На выходе: ListDocumentAssessorsResult
AddUsersToProject
На входе Id проекта, роли и пользователей
{
"projectId": "b2993663-8dd4-435d-b14d-a1cf18a4ddae",
"roleId": "2620a83a-361d-4b27-b37e-828c2e9e1941",
"userIds": ["4eb15e5a-f388-4e85-9b35-cc025e784249"]
}
На выходе признак успешного выполнения команды
true
Добавляет пользователeй в проект, устанавливая им роль.
Имя команды для вызова: marker_addUsersToProject. Поддерживается асинхронный и синхронный вызов.
- На входе AddUsersToProject
- На выходе true
DeleteUsersFromProject
На входе Id проекта, пользователя
{
"projectId": "b2993663-8dd4-435d-b14d-a1cf18a4ddae",
"userIds": ["4eb15e5a-f388-4e85-9b35-cc025e784249"]
}
На выходе признак успешного выполнения команды
true
Удаляет пользователя из проекта.
Имя команды для вызова: marker_deleteUsersFromProject. Поддерживается асинхронный и синхронный вызов.
- На входе DeleteUsersFromProject
- На выходе true
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. Поддерживается только синхронный вызов.
- На входе uuid string[]
- На выходе UserWithProjects[]
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. Поддерживается асинхронный и синхронный вызов.
- На входе uuid string
- На выходе ссылка на файл в формате ExportLabelingItem[]
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"
}
]
}
Возвращает документы соответствующие заданию.
- На входе ListBatchTaskDocuments
- На выходе Page[BatchTaskDocument]
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
| 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": []
}
]
}
]
}
]
}
]
}
Возвращает разметку документов из указанного проекта, содержащие указанную сущность. Если в проекте нет экспертов, команда вернет разметку разметчиков Если в проекте есть эксперты, то будет возвращена только разметка экспертов
Запрос принимает параметры сортировки, фильтров и пейджинга в параметре Search. Применяется к полям модели Task. Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров | Комментарии |
|---|---|---|
| taskId | InSetQuery, LikeQuery | По id |
| title | InSetQuery, LikeQuery | |
| userid | InSetQuery, LikeQuery | |
| batchtaskid | InSetQuery, LikeQuery | |
| documentid | InSetQuery, LikeQuery | |
| status | InSetQuery, LikeQuery | По statusId |
| data.status | InSetQuery, LikeQuery | По statusId |
Сортировка выполняется всегда по полю modified модели Labeling.
Имя команды для вызова: marker_listTaskWithFragment. Поддерживается только синхронный вызов.
- На входе ListTaskWithFragment
- На выходе Page[TaskWithFragment]
DistributeBatchTasks
На входе Id проекта и параметры распределения
{
"projectId": "f41d1d65-6530-40b8-b601-43be45d3f195",
"docsPerTask": 10
}
На выходе количество созданных BatchTask
5
Создает задания и распределяет их по разметчикам и экспертам. Имя команды для вызова: marker_distributeBatchTasks
- На входе DistributeBatchTasksDto
- На выходе Int
DeleteBatchTask
На входе Id задания
{
"projectId": "f41d1d65-6530-40b8-b601-43be45d3f195",
"batchTaskId": "6780dcac-63a0-4f2d-9b9f-e6fc8d671b23"
}
На выходе ничего
{}
Удаляет задание. Имя команды для вызова: marker_deleteBatchTask
- На входе DeleteBatchTaskDto
- На выходе Unit
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. Поддерживается только синхронный вызов.
- На входе: string
- На выходе: Setting[]
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.
Поддерживается только синхронный вызов.
- На входе Search
- На выходе Page[NerSetting]
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
| 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. Поддерживается только синхронный вызов.
- На входе Search
- На выходе Page[ClassificationSetting]
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
| 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. Поддерживается только синхронный вызов.
- На входе ProjectTaskIdentity
- На выходе Task
ImportRndLabeling
На входе идентификатор файла во временном бакете и параметры импорта
{
"fileId": "d0cd48f3-8c9e-4c47-a640-83d2d1e4871c",
"include": {
"fields": [
"UnilateralChange"
],
"docIds": [
"24793790-787e-4865-94b0-8eeb5b37db37"
]
},
"exclude": {}
}
Предполагаемый формат файла:
{"docId": "356be847-b5c5-459a-9315-5cb2596a7e31", "start": 32128, "end": 32575, "entityType": "UnilateralChange", "text": "коротки хитрый текст"}
{"docId": "b326453e-128c-4ae3-a50b-3f8510b7b6a5", "start": 32129, "end": 32577, "entityType": "UnilateralChange", "text": "хитрый странный очень текст побольше"}
{"docId": "b326453e-128c-4ae3-a50b-3f8510b7b6a5", "start": 32578, "end": 32983, "entityType": "UnilateralChange", "text": "еще один очень хитрый текст"}
На выходе количество измененных версий разметки (Labeling)
9
Загружает в систему разметку в формате RnD.
Имя команды для вызова: marker_importRndLabeling. Поддерживается синхронный и асинхронный вызов.
- На входе ImportLabeling
- На выходе: Int
RemoveRndLabeling
На входе параметры для удаления
{
"include": {
"fields": [
"ArbitrationClause"
]
},
"exclude": {
"docIds": [
"24793790-787e-4865-94b0-8eeb5b37db37"
]
}
}
На выходе количество измененных версий разметки (Labeling)
3620
Удаляет из системы разметку, загруженную в формате RnD.
Имя команды для вызова: marker_removeRndLabeling. Поддерживается синхронный и асинхронный вызов.
- На входе ImportLabeling
- На выходе: Int
Объекты сервиса разметчика
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 | Map[string, List[NerLabelingItem]] | нет | Новое выделение сущностей |
| classification | object | нет | Новая классификация |
| version | number | да | Версия разметки |
NerLabelingItem
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| fragment | string | да | Текст фрагмента |
| start | number | да | Координаты начала фрагмента |
| end | number | да | Координаты оконачания фрагмента |
| created | TimeStamp | да | Время создания спана |
| byExpert | boolean | нет | Спан создан экспертом |
| uncertain | boolean | нет | Уверен ли пользователь в спане |
| segments | List[{start: number, end: number}] | нет | Сегменты спана |
| userId | uuid string | нет | Id пользователя, кто создал спан |
| ??? | List[NerLabelingItem] | нет | Подсущности спана |
| ???Attribute | String \ | List[String] | нет |
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 проекта |
ImportLabeling
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| fileId | string | нет | ID файла JSON Lines из временного хранилища (для импорта) |
| include | ImportItems | нет | Объекты, которые будут включены в импорт/удаление |
| exclude | ImportItems | нет | Объекты, которые будут исключены из импорта/удаления |
ImportItems
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| fields | string[] | нет | Список кодов полей |
| docIds | 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.
Поддерживает синхронный и асинхронный вызов. Команда возвращает результат, когда синхронизация завершена.
Синхронизацию заданий на разметку запускать можно, только если сервис не получал событий по заданиям для этого проекта до этого
- Input: String
- Output: Unit
SyncAllEntityTypes
На входе префикс сущности и имя сущности, чей id используется как постфикс
{
"prefix": "BatchTaskFor",
"listEntity": "Project"
}
Выходных данных нет
Запускает синхронизацию всех EntityType с указанным префиксом.
Необходимый список EntityType формируется через запрос списка сущностей типа listEntity
Имя для вызова markerstats_kafka_SyncAllEntityType.
Поддерживает синхронный и асинхронный вызов.
- Input: SyncAllRequest
- Output: Unit
SyncRelation
На входе типы сущностей и поле, по которому идет связь
{
"entityFrom": "ProjectParticipant",
"entityTo": "Project",
"field": "project"
}
Выходных данных нет
Запускает синхронизацию всех отношений для указанных типов данных.
Имя для вызова markerstats_kafka_SyncRelations.
Поддерживает синхронный и асинхронный вызов.
- Input: SyncRelationRequest
- Output: Unit
SyncAllRelations
На входе данные для определения синхронизируемых сущностей
{
"prefix1": "TaskFor",
"prefix2": "BatchTaskFor",
"listEntity": "Project",
"field": "parent"
}
Выходных данных нет
Запускает синхронизацию всех отношений между сущностями с указанными префиксами.
Необходимый список EntityType формируется через запрос списка сущностей типа listEntity.
Имя для вызова markerstats_kafka_SyncAllRelations.
Поддерживает синхронный и асинхронный вызов.
- Input: SyncAllRelationsRequest
- Output: Unit
SyncEverything
Входные и выходные данные отсутствуют
Запускает синхронизацию всех данных, необходимых для работы сервиса.
Эту команду можно запускать без предварительной очистки БД.
Имя для вызова markerstats_kafka_SyncEverything.
Поддерживает синхронный и асинхронный вызов.
- Input: Unit
- Output: Unit
SyncCatalog
Запускает синхронизацию каталога из Alexandrina с сервисом, если он упустил какие-то события. Имя для вызова markerstats_kafka_SyncCatalog.
Поддерживает синхронный и асинхронный вызов. Команда возвращает результат, когда синхронизация завершена.
- Input: String
- Output: Unit
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. Поддерживается только синхронный вызов.
- На входе: Search
- На выходе: Page[ProjectFields]
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.
- На входе: UUID проекта
- На выходе: ProjectStatistics
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. Поддерживается только синхронный вызов.
- На входе: UUID проекта
- На выходе: FullProjectStatistics
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.
- На входе: Search
- На выходе: Страница ProjectStatistics
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.
- На входе ListProjectUsers
- На выходе Page[ProjectUser]
ListEntityStats
На входе ID проекта
"09e65817-e136-4f7c-913b-cb04f4edbef1"
На выходе статистика по сущностям
[
{
"entityCode": "nerField1",
"documentCount": 28
},
{
"entityCode": "nerField10",
"documentCount": 5
}
]
Возвращает статистику по сущностям указанного проекта.
Имя команды для вызова: marker_listEntityStats.
Поддерживается только синхронный вызов.
- На входе: UUID
- На выходе: EntityStatsItem[]
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. Поддерживается только синхронный вызов.
- На входе uuid string -- Id задачи
- На выходе BatchTaskAdmin
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. Поддерживается только синхронный вызов.
- На входе ListBatchTaskAdminRequestDTO
- На выходе Page[BatchTaskAdminListItem]
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. Поддерживается только синхронный вызов.
- На входе uuid string -- Id задачи
- На выходе BatchTask
Для выполнения команды пользователь должен быть авторизован. Если задание существует,
но пользователь в нем не участвует, команда вернет 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. Поддерживает только синхронный вызов.
- На входе uuid string -- Id проекта
- На выходе List[BatchTask]
Для выполнения команды пользователь должен быть авторизован.
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": []
}
]
}
]
}
]
}
Возвращает количество спанов для каждого поля выделения сущностей в проекте.
- На входе uuid string (Id проекта)
- На выходе PageProjectWithSpanStats
Объекты сервиса статистики разметки
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 пользователя | |
| 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 | да | Количество |