ADR-0001 · Обещание совместимости машинного интерфейса отчётности#
Статус: принят · 2026-09-21
Метод: D-11 v1.0 · шаблон ADR v1.2
Участники: руководитель ИТ ЦУУ, два аналитика, юрист; согласовано с профильным отделом ведомства
Учебная запись: часть прогона U-02, система вымышлена. Форма и рассуждение настоящие.
Контекст#
Вход — 00-context.md. Спецификацию надо опубликовать через десять дней, первое окно отчётности — через полгода.
Кто на той стороне — по строкам таблицы раздела 1 D-11#
| Кто | Здесь это | Когда узнаем о поломке |
|---|---|---|
| Наш код в том же выкате | Нет: серверная часть ничего у себя же не вызывает | — |
| Наш сервис со своим циклом выката | Личный кабинет у подрядчика — своя очередь релизов, две недели [допущение] |
Недели |
| Партнёр по договору | 25 вендоров учётных систем, квартальный релиз плюс внедрение у клиента | Месяцы |
| Мобильное приложение | Нет | — |
| Неизвестный потребитель | Нет и не может быть: подача подписана и привязана к лицу из реестра; анонимного доступа нет [приказ] |
— |
| То, что уже уехало наружу | Квитанция. Подписана нами, хранится у обязанного лица годами, служит доказательством исполнения обязанности | Никогда: отозвать нельзя |
Ответы на три координатных вопроса — снимок условий момента#
| Вопрос | Ответ | Пометка |
|---|---|---|
| Можем ли назвать поимённо тех, кто вызывает? | Да, и это гарантировано законом. Оператор один, обойти его нельзя, каждая подача подписана лицом из реестра. Список — факт, а не нижняя граница | [приказ] |
| Видим ли, какие именно поля и методы читаются? | Да, и даром. Интерфейс принимает документы: мы проверяем каждое поле каждой подачи, то есть видим использование по построению, ничего для этого не строя | [расчёт] |
| Какой срок предупреждения даём? | Продуктовой договорённости нет — организации полгода. Нижняя граница задана самым медленным потребителем: квартальный релиз вендора плюс внедрение у клиента ≈ 6–9 месяцев | [допущение] |
Координата знания: КЧ. Оба знания есть, и ни одно не куплено: одно дано приказом, другое — направлением интерфейса.
Дисквалификаторы#
| Требование | Что с ним | Почему |
|---|---|---|
| Дать срок предупреждения | Оставлено | Первый дисквалификатор не сработал: знание КЧ, адресата видно, исполнение объявления устанавливается |
| Длина срока — квартал | Отвергнута | Второй дисквалификатор: квартал короче цикла самого медленного потребителя. Срок растёт до цикла вендора плюс внедрение |
| Обещать схему целиком | Оставлено | Третий не сработал: сужение проверяется — мы видим, кто ещё шлёт снимаемое поле |
| Обещание в терминах схемы | Отвергнуто | Четвёртый сработал и он здесь главный: ужесточение проверки меняет смысл, не трогая схему. Тот же код ошибки, другое условие. Охват обязан быть назван словами |
| Решать формат квитанции этим документом | Отвергнуто | Пятый: квитанция уже уехала наружу. Это второй случай «вне пространства» — у неё нет срока предупреждения, совместимость только вперёд |
Что превратилось в работу до объявления политики: формат квитанции выносится в отдельное решение и в этом ADR не принимается.
Решение#
Ячейка КЧ × T — полевая ячейка: знаем и кто вызывает, и что шлёт; обещаем срок предупреждения.
Длина срока — 12 месяцев с даты объявления. Не 6 и не 9: цикл вендора плюс внедрение даёт 6–9, но отчётность квартальная, и предупреждение обязано пережить целый отчётный год, чтобы обязанное лицо встретило изменение между окнами, а не внутри окна.
Охват обещания словами — три пункта, и только они:
- Поле, однажды принятое, принимается ещё 12 месяцев после объявления о снятии. Сужение состава полей — под сроком.
- Строгость приёмки не ужесточается без того же срока. Проверка, которая сегодня пропускает документ, через год без объявления его не отвергнет. Это обещание о смысле, а не о схеме, и оно здесь главное.
- Набор кодов отказа и условия, при которых они выдаются, — под тем же сроком. Новый код отказа может появиться в любой момент; изменение условия существующего — нет.
Что в охват не входит и названо прямо: сроки вынесения вердикта (это D-10), формат квитанции (вне пространства, отдельное решение) и смысл величин, определяемый методикой расчёта сбора — см. замечание 3.
Обоснование#
Ничьей не было, и эвристика о том, кто платит, не понадобилась. D-11 говорит: ничья возникает там, где знания нет; при Ч за нас отвечает трафик. Здесь есть оба знания, и ячейка получилась не выбором, а следствием: 0 и ∞ отвергаются не вкусом, а тем, что обе координаты заполнены.
Почему не 0. Он законен и здесь неприемлем по цене: цена нашей поспешности — штраф от 250 тыс ₽ у потребителя, который не может уйти к другому оператору. Это ровно тот случай, про который эвристика говорит «цена ложится на потребителя и не видна», только тут она видна и посчитана.
Почему не ∞. Не сужать никогда — значит нести в интерфейсе всё, что мы придумаем до декабря, когда выйдет методика. При годовом сроке и годовом цикле отчётности снятие обходится в одно объявление.
Последствия#
Что придётся построить: учёт отправляемых полей по лицам и по версиям модуля вендора — иначе обещание пункта 1 нечем исполнить адресно. Стоит немного: счётчик на уже существующем разборе документа.
Что становится дороже. Годовой срок означает, что ошибка в спецификации живёт год. Опубликовав 1 октября поле, которое окажется лишним после декабрьской методики, мы снимем его не раньше октября 2027 — то есть проведём через него два окна отчётности.
Чего лишаемся. Права ужесточить проверку быстро. Если после первого окна выяснится, что недостоверную отчётность пропускает дырявая валидация, закрыть дыру немедленно мы не сможем: пункт 2 охвата связывает нас на год. Это отрицательное последствие принято сознательно — альтернатива хуже: ужесточение без предупреждения превращает наш недосмотр в чужой штраф.
Обходной путь, который придётся оставить: отказ по новому коду при сохранении старого условия — способ ловить недостоверность, не нарушая пункта 3.
Условия пересмотра#
- Появилась возможность подавать отчётность мимо оператора — координата «кто» изменилась, ячейка другая.
- Вендор объявил цикл релизов длиннее квартала — срок обязан вырасти.
- Срок объявлен, прошёл, снятия не было ни разу — обещание стало бессрочным по факту.
- Методика расчёта сбора определила величины так, что смысл принятого поля изменился, — см. замечание 3.
- Появилась доставка наружу помимо квитанции: выгрузка в ведомство, публикация реестра.
Самая дорогая будущая граница#
Состав и смысл полей документа отчётности. Опубликованный 1 октября состав будет читать 25 вендоров и 4 200 организаций; после публикации любое сужение стоит года. Дешевле всего сейчас — не класть в спецификацию ничего, чего не требует закон, и оставить расширение на необязательных полях.
Связанные ADR#
Зависимые: решение о границах (ADR-0004 по D-05) — разрез создаёт контракт, и обещание по нему придётся давать в тот же день. Формат квитанции — отдельное решение, в этом прогоне не принимается.
Замечание 1 · На гринфилде знание не покупается, а закладывается#
D-11 содержит таблицу «уйти из ячейки можно, только купив знание»: переход из — в К там назван архитектурным изменением, а не настройкой, потому что требует точки, через которую обязан идти весь трафик.
Здесь ни одного перехода не потребовалось: К дан приказом, Ч — направлением интерфейса. Таблица цен предполагает существующий интерфейс, у которого знание уже упущено. На гринфилде та же покупка стоит одного решения в день, когда интерфейса ещё нет, — и документ об этом не говорит.
Замечание 2 · У интерфейса-приёмника координата Ч определена не в ту сторону#
D-11 определяет Ч как «видим, какие именно поля и методы читаются». Интерфейс здесь принимает, а не отдаёт: значимо то, какие поля шлют, и это видно по построению — мы проверяем каждое поле каждой подачи.
Координата работает и ответ даёт верный, но её формулировка написана для интерфейса, который отдаёт данные. Документ нигде не говорит, что направление бывает обратным.
Замечание 3 · Обещание даётся раньше, чем определён его предмет#
Спецификация публикуется 1 октября; методика расчёта сбора выходит в декабре. То есть смысл величин, которые мы обязуемся принимать, будет определён третьей стороной через два месяца после того, как мы пообещали их принимать.
D-11 требует назвать охват словами и проверяет решение вопросом: «сможет ли потребитель сказать, до какого дня он вправе не трогать свой код». Здесь ответ зависит от документа, которого ещё нет. Ближайший дисквалификатор — «ломается смысл, а не схема» — про изменение смысла, а не про его отсутствие в момент обещания.
В охват пришлось внести оговорку, которой документ не предусматривает: смысл величин из охвата исключён, и это записано прямо. Обещана форма, не содержание.