Перейти к содержанию

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

Четыре из шести добавили работу, а не отвергли вариант. Документ обещает это только для двух последних; здесь так вышло у четырёх.

Рассмотренные варианты#

Ось Что записывать Нулевой: проверять синхронно, падать Принять с отложенной проверкой Принять по локальному списку отзыва
Сохранность инварианта Держится ли «принято = подписано» Держится Держится, если проверка успевает до конца окна [требования] Не держится: список отзыва устаревает, отозванный сертификат пройдёт [требования]
Что видит пользователь и понимает ли Формулировка ответа Отказ в приёме в последние часы окна = чужой штраф «Получено, подпись проверяется, вердикт до конца окна» — понятно и проверяемо «Принято» — понятно и неверно
Нагрузка на отказавшую зависимость Растёт или падает Падает: не ходим Растёт при восстановлении — ограничивается по скорости [расчёт] Падает: не ходим вовсе
Стоимость построения Что строить Ничего Очередь, метрика, вторая квитанция, ограничитель скорости [расчёт] Загрузка и обновление списка отзыва
Стоимость владения Чем платим постоянно Ничего Доля подач всегда идёт этим путём — иначе путь мёртв [орг] Список надо обновлять, иначе он врёт молча

Решение#

Принять с отложенной проверкой подписи. В режиме деградации:

  1. Документ сохраняется целиком, как пришёл; выдаётся квитанция первого рода: «получено, подпись проверяется, вердикт будет вынесен до конца окна».
  2. Проверка ставится в очередь; очередь разбирается с ограничением скорости, а не разом.
  3. Проверка успела — выдаётся квитанция второго рода, «принято». Не успела до 23:59 двадцатого числа — документ считается принятым, а спор о подписи переносится в разбор: цена нашего отказа не перекладывается на обязанное лицо.
  4. Путь исполняется постоянно: 2 % подач идут отложенным путём даже при исправном сервисе [орг].
  5. Обнаружение — собственная метрика: доля отклонённых подписей за скользящий час против базовой линии.
  6. Выход из режима: очередь разобрана и доля отклонений вернулась к базовой. Владелец — дежурный.

Обоснование#

Инвариант закрывается не этой функцией — в этом весь ответ. Подпись можно проверить позже, документ сохранён целиком и не меняется. Это ровно условие, при котором деградация возможна по третьему вопросу документа.

Локальный список отзыва отвергнут дисквалификатором, а не сравнением. Он нарушает инвариант молча: отозванный сертификат пройдёт проверку, и узнаем мы об этом из спора через год.

Пункт 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 · Четыре дисквалификатора из шести добавили работу вместо отказа#

Документ обещает такое поведение двум последним дисквалификаторам: «обычно не отвергают вариант, а добавляют работу». Здесь так повели себя четыре из шести, включая первый — он отверг не режим, а формулировку квитанции.

Похоже, свойство принадлежит не позиции в списке, а роду дисквалификатора: те, что описывают дефект исполнения (путь не исполняется, суррогат идёт через отказавшего, отказ не виден, формулировка врёт), лечатся работой; те, что описывают несовместимость предмета (деградация нарушает инвариант по существу, режим на самом деле норма), отвергают. Первый дисквалификатор попадает в обе группы в зависимости от того, чем именно нарушен инвариант — существом режима или словами ответа.