ADR-0006 · Приём при недоступной проверке подписи#
Статус: принят · 2026-09-22
Метод: D-06 v2.0 · шаблон ADR v1.2
Участники: руководитель ИТ ЦУУ, аналитик, юрист
Учебная запись: часть прогона U-02, система вымышлена. Форма и рассуждение настоящие.
Контекст#
Вход — 00-context.md. Ответы на семь вопросов раздела 1.
| Вопрос | Ответ | Пометка |
|---|---|---|
| Функция и зависимость, способная отказать отдельно | Приём подачи; проверка квалифицированной подписи и метки времени во внешнем сервисе | [требования] |
| Что обещано пользователю сейчас | Квитанция — юридический факт. По ADR-0001 вердикт расщеплён: немедленная часть выдаётся сразу | [требования] |
| Какой инвариант держит функция и закрывается ли он где-то ещё | «Принято = подписано уполномоченным лицом». Закрывается отложенной проверкой — но только если она успевает до 23:59 двадцатого числа | [требования] |
| Какие суррогаты существуют | Локальный список отзыва на дату и кэш сертификатов тех же 4 200 лиц: состав плательщиков от квартала к кварталу почти не меняется | [прогноз] |
| Класс важности относительно соседних | Приём — высший. Расчёт и витрина режутся раньше и без обсуждения | [требования] |
| Как система узнаёт об отказе и совпадает ли это с тем, что видит потребитель | Сервис сообщает о себе сам. Серый отказ — отвечает и отвергает действительные подписи — так не виден | [прогноз] |
| Что станет с нагрузкой на зависимость при деградации | Вырастет: отложенные проверки накопятся и пойдут разом при восстановлении | [расчёт] |
Одно применение, не несколько. Остальные зависимости приёма отказать отдельно не могут: справочники лежат в памяти процесса (ADR-0003), реестр актов в приёме не участвует — сверка асинхронна (ADR-0005).
Дисквалификаторы#
| Дисквалификатор | Сработал | Что из этого следует |
|---|---|---|
| Деградация нарушает инвариант | Да — для формулировки «принято» | Квитанция, говорящая «принято» без проверенной подписи, нарушает инвариант. Отвергнут не режим, а формулировка: в деградации выдаётся «получено, подпись проверяется» |
| Путь деградации не исполняется регулярно | Да | Окно — двадцать дней в году; путь, срабатывающий раз в год, не работает, когда понадобится. Работа до: доля подач идёт отложенным путём всегда, в том числе при исправном сервисе |
| Суррогат добывается через отказавшую зависимость | Да | Отложенные проверки идут в тот же сервис. Работа до: разбор очереди ограничен по скорости, а не «разом при восстановлении» |
| Система не умеет заметить отказ | Да | Сигнал от сервиса о себе серый отказ не ловит. Работа до: собственная метрика — доля отклонённых подписей за скользящий час против базовой линии |
| У режима нет выхода | Да | Назначены условие снятия (очередь разобрана, доля отклонений вернулась к базовой) и владелец — дежурный |
| Режим случается регулярно, и это известно замером | Не смог сработать | Замера нет: системы нет. См. замечание 9 |
Четыре из шести добавили работу, а не отвергли вариант. Документ обещает это только для двух последних; здесь так вышло у четырёх.
Рассмотренные варианты#
| Ось | Что записывать | Нулевой: проверять синхронно, падать | Принять с отложенной проверкой | Принять по локальному списку отзыва |
|---|---|---|---|---|
| Сохранность инварианта | Держится ли «принято = подписано» | Держится | Держится, если проверка успевает до конца окна [требования] |
Не держится: список отзыва устаревает, отозванный сертификат пройдёт [требования] |
| Что видит пользователь и понимает ли | Формулировка ответа | Отказ в приёме в последние часы окна = чужой штраф | «Получено, подпись проверяется, вердикт до конца окна» — понятно и проверяемо | «Принято» — понятно и неверно |
| Нагрузка на отказавшую зависимость | Растёт или падает | Падает: не ходим | Растёт при восстановлении — ограничивается по скорости [расчёт] |
Падает: не ходим вовсе |
| Стоимость построения | Что строить | Ничего | Очередь, метрика, вторая квитанция, ограничитель скорости [расчёт] |
Загрузка и обновление списка отзыва |
| Стоимость владения | Чем платим постоянно | Ничего | Доля подач всегда идёт этим путём — иначе путь мёртв [орг] |
Список надо обновлять, иначе он врёт молча |
Решение#
Принять с отложенной проверкой подписи. В режиме деградации:
- Документ сохраняется целиком, как пришёл; выдаётся квитанция первого рода: «получено, подпись проверяется, вердикт будет вынесен до конца окна».
- Проверка ставится в очередь; очередь разбирается с ограничением скорости, а не разом.
- Проверка успела — выдаётся квитанция второго рода, «принято». Не успела до 23:59 двадцатого числа — документ считается принятым, а спор о подписи переносится в разбор: цена нашего отказа не перекладывается на обязанное лицо.
- Путь исполняется постоянно: 2 % подач идут отложенным путём даже при исправном сервисе
[орг]. - Обнаружение — собственная метрика: доля отклонённых подписей за скользящий час против базовой линии.
- Выход из режима: очередь разобрана и доля отклонений вернулась к базовой. Владелец — дежурный.
Обоснование#
Инвариант закрывается не этой функцией — в этом весь ответ. Подпись можно проверить позже, документ сохранён целиком и не меняется. Это ровно условие, при котором деградация возможна по третьему вопросу документа.
Локальный список отзыва отвергнут дисквалификатором, а не сравнением. Он нарушает инвариант молча: отозванный сертификат пройдёт проверку, и узнаем мы об этом из спора через год.
Пункт 3 — решение юридическое, а не техническое, и записано здесь сознательно. Если проверка не успела, выбор такой: отвергнуть документ (штраф лицу за наш отказ) или принять (риск, что подпись окажется недействительной). Выбран второй: цена нашей недоступности не должна конвертироваться в чужой штраф — тот же довод, что в ADR-0001.
Последствия#
Что придётся построить: очередь отложенных проверок с ограничением скорости; вторую квитанцию; метрику доли отклонений с базовой линией; процесс разбора для случая «принято, подпись оказалась недействительной».
Что становится дороже. Квитанций теперь три рода на одну подачу: получено, принято, встречный вердикт (ADR-0005). Каждая — юридически значимый документ со своим смыслом, и все три обязаны попасть в охват обещания из ADR-0001, иначе первый же спор будет о том, какая из них что означала.
Отрицательное последствие, принятое сознательно. Два процента подач всегда идут медленным путём — плата за то, чтобы путь работал в апреле. Соблазн отключить эту долю «на время окна» велик и его надо назвать заранее: отключить её — значит вернуться к пути, который срабатывает раз в год.
Условия пересмотра#
- Режим включался чаще, чем ожидалось — тогда это не деградация, а нормальный режим, и описывать его надо как норму в требованиях.
- Проверка подписи перестала требовать внешнего сервиса.
- Срок окна изменён так, что отложенная проверка перестаёт в него укладываться.
- Доля подач, идущих отложенным путём, была снижена ниже 2 % — путь перестал исполняться.
Связанные ADR#
Уточняет ADR-0001: родов квитанции три, и все три входят в охват обещания. Зависит от ADR-0003 и ADR-0005.
Замечание 9 · Шестой дисквалификатор не смог сработать, и не по своей вине#
D-06 v2.0 добавил дисквалификатор: режим, случающийся регулярно и известный замером, — не деградация, а норма. Он сработать не смог: замера нет, системы нет.
При этом нужное знание существует — просто не у нас. Доступность удостоверяющего центра измерена: он публикует отчётность об инцидентах и обязательства по доступности. Это замер, и он относится к той самой зависимости, о которой идёт речь. Сказать по нему, регулярен ли режим, можно; сказать это в терминах словаря пометок — нельзя.
Это третье появление одного и того же пробела в одном прогоне. На входе он был в оценках (00-context.md), на этапе D-01 — в ячейке профиля нагрузки, здесь — в дисквалификаторе. Предсказание Г4 говорило о ячейке матрицы; оказалось, что пробел мешает и дисквалификатору сработать, то есть стоит дороже, чем предсказано.
Замечание 10 · Четыре дисквалификатора из шести добавили работу вместо отказа#
Документ обещает такое поведение двум последним дисквалификаторам: «обычно не отвергают вариант, а добавляют работу». Здесь так повели себя четыре из шести, включая первый — он отверг не режим, а формулировку квитанции.
Похоже, свойство принадлежит не позиции в списке, а роду дисквалификатора: те, что описывают дефект исполнения (путь не исполняется, суррогат идёт через отказавшего, отказ не виден, формулировка врёт), лечатся работой; те, что описывают несовместимость предмета (деградация нарушает инвариант по существу, режим на самом деле норма), отвергают. Первый дисквалификатор попадает в обе группы в зависимости от того, чем именно нарушен инвариант — существом режима или словами ответа.