Отмена события

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