Отмена события
POST /ca/{ogrn}/accreditation/event/cancel
{
"accreditationID": "CA_1027700067328_ACCR_1",
"canceledAt": "2025-08-12T19:03:11Z",
"accreditationReason": "Протокол Правительственной комиссии от 20.12.2021 № 12",
"accreditationReasonLink": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"
}
OK
{
"id": "CA_1027739113049_ACCR_6",
"version": 6,
"subjectOGRN": "1027739113049",
"updatedAt": "",
"accreditationDate": "2023-11-01T12:00:00Z",
"accreditationValidUntil": "2024-10-31T12:00:00Z",
"accreditationReason": "отмена Протокол Правительственной комиссии от 20.12.2021 № 12",
"accreditationReasonLink": "отмена 6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b",
"status": "3",
"isCanceled": true,
"cancelHash": "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b",
"canceledAt": "2026-06-11T03:26:44Z",
"createdAtCC": "2026-06-11T02:45:27Z",
"updatedAtCC": "2026-06-11T03:03:07Z"
}
Логика обработки запроса:
gherkin
Функционал: Управление реестром событий с отменой по accreditationID
Как пользователь системы
Я хочу отменять события для конкретного accreditationID
Чтобы управлять актуальностью записей в реестре
Сценарий: Успешная отмена последнего активного события для конкретного accreditationID
Допустим в реестре есть события для accreditationID = "CA_1027739113049_ACCR_1"
И последнее событие для этого accreditationID имеет:
| version | status | isCanceled |
| 5 | 2 | False |
И запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b50" для accreditationID = "CA_1027739113049_ACCR_1" ранее не обрабатывался
Когда пользователь применяет функцию отмены для accreditationID = "CA_1027739113049_ACCR_1" с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b50"
Тогда система проверяет, выполнялся ли запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b50" для accreditationID = "CA_1027739113049_ACCR_1"
И так как запрос ранее не выполнялся, система продолжает обработку
И система находит все события с accreditationID = "CA_1027739113049_ACCR_1"
И получает последнее событие с максимальным version
И проверяет, что status не равен 1
И проверяет, что isCanceled = False
Тогда система выставляет флаг isCanceled = True для этого события
И событие с version = 5 становится отменённым
И система регистрирует запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b50" как обработанный
Сценарий: Отмена последнего события, если предыдущее уже отменено
Допустим в реестре есть события для accreditationID = "CA_1027739113049_ACCR_2"
И события имеют следующие параметры:
| version | status | isCanceled |
| 3 | 3 | False |
| 4 | 4 | True |
| 5 | 2 | False |
И запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b51" для accreditationID = "CA_1027739113049_ACCR_2" ранее не обрабатывался
Когда пользователь применяет функцию отмены для accreditationID = "CA_1027739113049_ACCR_2" с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b51"
Тогда система проверяет, выполнялся ли запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b51" для accreditationID = "CA_1027739113049_ACCR_2"
И так как запрос ранее не выполнялся, система продолжает обработку
И система находит все события с accreditationID = "CA_1027739113049_ACCR_2"
И получает последнее событие с максимальным version = 5
И проверяет status = 2 (не равен 1)
И проверяет isCanceled = False
Тогда система выставляет флаг isCanceled = True для события с version = 5
И событие с version = 5 становится отменённым
И система регистрирует запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b51" как обработанный
Сценарий: Пропуск уже отменённого события и отмена предыдущего
Допустим в реестре есть события для accreditationID = "CA_1027739113049_ACCR_3"
И события имеют следующие параметры:
| version | status | isCanceled |
| 2 | 3 | False |
| 3 | 4 | True |
| 4 | 3 | False |
| 5 | 4 | True |
И запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b52" для accreditationID = "CA_1027739113049_ACCR_3" ранее не обрабатывался
Когда пользователь применяет функцию отмены для accreditationID = "CA_1027739113049_ACCR_3" с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b52"
Тогда система проверяет, выполнялся ли запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b52" для accreditationID = "CA_1027739113049_ACCR_3"
И так как запрос ранее не выполнялся, система продолжает обработку
И система находит все события с accreditationID = "CA_1027739113049_ACCR_3"
И получает последнее событие с максимальным version = 5
И проверяет, что isCanceled = True у события version = 5
Тогда система пропускает событие version = 5
И переходит к предыдущему событию с version = 4
И проверяет status = 3 (не равен 1)
И проверяет isCanceled = False
Тогда система выставляет флаг isCanceled = True для события с version = 4
И событие с version = 4 становится отменённым
И система регистрирует запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b52" как обработанный
Сценарий: Отмена невозможна, если все события уже отменены или имеют статус 1
Допустим в реестре есть события для accreditationID = "CA_1027739113049_ACCR_4"
И события имеют следующие параметры:
| version | status | isCanceled |
| 1 | 1 | False |
| 2 | 3 | True |
| 3 | 4 | True |
И запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b53" для accreditationID = "CA_1027739113049_ACCR_4" ранее не обрабатывался
Когда пользователь применяет функцию отмены для accreditationID = "CA_1027739113049_ACCR_4" с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b53"
Тогда система проверяет, выполнялся ли запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b53" для accreditationID = "CA_1027739113049_ACCR_4"
И так как запрос ранее не выполнялся, система продолжает обработку
И система находит все события с accreditationID = "CA_1027739113049_ACCR_4"
И начинает проверку с последнего события version = 3
И проверяет, что isCanceled = True у события version = 3
Тогда система пропускает событие version = 3
И переходит к предыдущему событию с version = 2
И проверяет, что isCanceled = True у события version = 2
Тогда система пропускает событие version = 2
И переходит к предыдущему событию с version = 1
И проверяет status = 1 (равен 1)
Тогда функция отмены не выполняется
И система возвращает ошибку "ERR-0401 Невозможно отменить указанное событие"
И запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b53" НЕ регистрируется как обработанный
Сценарий: Отмена события с пропуском цепочки отменённых событий
Допустим в реестре есть события для accreditationID = "CA_1027739113049_ACCR_5"
И события имеют следующие параметры:
| version | status | isCanceled |
| 1 | 1 | False |
| 2 | 3 | True |
| 3 | 4 | True |
| 4 | 3 | True |
| 5 | 5 | False |
И запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b54" для accreditationID = "CA_1027739113049_ACCR_5" ранее не обрабатывался
Когда пользователь применяет функцию отмены для accreditationID = "CA_1027739113049_ACCR_5" с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b54"
Тогда система проверяет, выполнялся ли запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b54" для accreditationID = "CA_1027739113049_ACCR_5"
И так как запрос ранее не выполнялся, система продолжает обработку
И система находит все события с accreditationID = "CA_1027739113049_ACCR_5"
И получает последнее событие с максимальным version = 5
И проверяет isCanceled = False
И проверяет status = 5 (не равен 1)
Тогда система выставляет флаг isCanceled = True для события с version = 5
И событие с version = 5 становится отменённым
И система регистрирует запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b54" как обработанный
Сценарий: Ошибка при повторном запросе с тем же cancelHash
Допустим в реестре есть события для accreditationID = "CA_1027739113049_ACCR_6"
И запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b55" для accreditationID = "CA_1027739113049_ACCR_6" уже обрабатывался ранее
Когда пользователь применяет функцию отмены для accreditationID = "CA_1027739113049_ACCR_6" с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b55"
Тогда система проверяет, выполнялся ли запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b55" для accreditationID = "CA_1027739113049_ACCR_6"
И система обнаруживает, что запрос уже обрабатывался
Тогда система НЕ выполняет отмену события
И система возвращает ошибку "ERR-0402 Запрос на отмену события уже обрабатывался"
И состояние событий в реестре остаётся без изменений
Сценарий: Обработка отсутствия событий для accreditationID
Допустим в реестре нет событий с accreditationID = "CA_1027739113049_ACCR_999"
И запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b56" для accreditationID = "CA_1027739113049_ACCR_999" ранее не обрабатывался
Когда пользователь применяет функцию отмены для accreditationID = "CA_1027739113049_ACCR_999" с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b56"
Тогда система проверяет, выполнялся ли запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b53" для accreditationID = "CA_1027739113049_ACCR_999"
И так как запрос ранее не выполнялся, система продолжает обработку
И система ищет события с accreditationID = "CA_1027739113049_ACCR_999"
И не находит ни одного события
Тогда функция отмены не выполняется
И система возвращает ошибку "ERR-0303 Отсутствуют данные об аккредитации с указанным идентификатором"
И запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b56" НЕ регистрируется как обработанный
Сценарий: Проверка что cancelHash уникален для каждого запроса
Допустим в реестре есть события для accreditationID = "CA_1027739113049_ACCR_8"
И запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b57" для accreditationID = "CA_1027739113049_ACCR_8" ранее не обрабатывался
Когда пользователь применяет функцию отмены для accreditationID = "CA_1027739113049_ACCR_8" с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b57"
Тогда система проверяет, выполнялся ли запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b57" для accreditationID = "CA_1027739113049_ACCR_8"
И так как запрос ранее не выполнялся, система продолжает обработку
И система успешно выполняет отмену последнего активного события
И система регистрирует запрос с cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b57" как обработанный
И при повторном запросе с тем же cancelHash = "1b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b57" система возвращает ошибку "ERR-0402 Запрос на отмену события уже обрабатывался"
Таблица 13. Обязательные/необязательные поля запроса
Название поля | Обязательное/необязательное поле |
accreditationID | Обязательное поле |
canceledAt | Обязательное поле |
accreditationReason | Необязательное поле |
accreditationReasonLink | Необязательное поле |
Таблица 14. Коды ошибок
Код ошибки | Расшифровка ошибки |
ERR-0010 | пустой запрос |
ERR-0101 | Информация об УЦ отсутствует в реестре |
ERR-0303 | Отсутствуют данные об аккредитации с указанным идентификатором |
ERR-0304 | Отсутствует параметр accreditationID |
ERR-0401 | Невозможно отменить указанное событие |
ERR-0402 | Запрос на отмену события уже обрабатывался |
ERR-0403 | Отсутствует параметр canceledAt |
ERR-0404 | Неверный формат canceledAt |