Skip to main content
За кулисами
За кулисамиDecisionsPremium

Закон внутри нашего кода

Кнопка расторжения, которая обязана работать без входа. Форма, которая никогда не должна тебе отказывать. Почему юридические обязанности для нас архитектура, а не шаблонный текст.

Опубликовано автор AlphaCloud4 мин чтения

Когда мы сделали Premium доступным для покупки, мы думали, что юридическая часть это пара страниц текста в футере. Это было ошибкой. Некоторые обязанности вообще нельзя записать в текст, потому что они диктуют, как должна быть устроена функция.

Четыре примера, на которых это стало особенно ясно. Сразу оговоримся, чтобы было понятно, что это: описание нашей реализации, а не юридическая консультация. Правила ниже относятся к немецкому праву, в рамках которого работает AlphaCloud.

Кнопка расторжения, у которой не может быть входа

Параграф 312k Гражданского кодекса Германии требует, чтобы для договоров, заключённых онлайн, существовал напрямую доступный способ их расторгнуть. Из этого вытекают требования, которые нельзя добавить задним числом в виде формулировок:

  • Страница должна работать без входа в аккаунт
  • Она должна быть в футере каждой страницы
  • Нужны два шага: ввод, затем подтверждение однозначно подписанной кнопкой
  • Должно уйти подтверждение получения в текстовой форме

Последний пункт определяет архитектуру. Расторжение это одностороннее волеизъявление, и оно вступает в силу с момента получения. Поэтому его нужно регистрировать и подтверждать всегда, от кого бы оно ни пришло.

Форма никогда не должна тебе отказывать

Здесь очевидный подход едва не стоил нам ошибки.

Очевидный подход: принимать расторжение, только если ID сервера и адрес электронной почты совпадают с активной подпиской. Звучит разумно и неверно дважды.

Во-первых, это заблокировало бы настоящего клиента, который опечатался в адресе или указал другой. Его расторжение не было бы получено, подписка продлевается, а у него на руках доказательство того, что он пытался.

Во-вторых, и это более неприятная часть: само сообщение об ошибке было бы ответом. Кто получает в ответ «подписка не найдена», узнаёт, что этот сервер не платит. ID сервера Discord не секрет, его может прочитать любой участник. Форма превратилась бы в инструмент для прощупывания чужих серверов.

Решение разделяет две вещи, которые ощущаются как одна:

Условие
Получение волеизъявления безусловно, всегда регистрируется и подтверждается
Исполнение расторжения только если указанный адрес совпадает с адресом покупателя в наших данных

Всё остальное попадает в очередь и проверяется человеком. Это допустимо, потому что абзац 2 параграфа 312k прямо разрешает запрашивать данные для идентификации. Запрещён только вход перед этим.

По той же причине публичный ответ может называть дату окончания, только когда личность подтверждена. Иначе подтверждение снова становится оракулом.

Отказ от договора, у которого вход есть намеренно

Прямо рядом находится функция, которую мы построили наоборот: отказ от договора с пропорциональным возвратом денег спрятан за входом в аккаунт.

Это не противоречие. Параграф 312k касается расторжения, а не отказа от договора, и обязанности вообще предлагать онлайн-форму отказа нет, пока открыт неформальный путь. Разница в последствиях: расторжение действует на будущее, возврат двигает деньги сейчас, и его нельзя отыграть назад.

Три вытекающих отсюда правила, которые мы не смягчаем:

Никакой обязательной причины. Абзац 1 параграфа 355 прямо предоставляет право отказа без указания причин. Поле необязательное и должно оставаться необязательным, как бы ни хотелось сделать его обязательным ради статистики.

После 14 дней отклоняется только автоматический путь, а не само заявление. Срок продлевается до двенадцати месяцев и четырнадцати дней, если клиент не был должным образом проинформирован. Огульное «слишком поздно» поэтому могло бы оказаться неверным.

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

ЛС в Discord не долговечный носитель

Абзац 3 параграфа 312f требует подтверждения договора на долговечном носителе, и оно должно воспроизводить данное согласие.

Сначала мы отправляли личное сообщение в Discord, потому что наши клиенты и так там. Этого недостаточно. ЛС живёт на платформе, которую мы не контролируем, и его нельзя ни сохранить, ни сделать неизменяемым в том смысле, который подразумевает эта норма.

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

Без НДС, и это должно читаться одинаково везде

AlphaCloud это малое предприятие по параграфу 19 Закона Германии о НДС. Цены окончательные, НДС никогда не указывается.

Звучит как сноска, а на деле это задача согласованности во многих местах: страница цен, окно оформления заказа, условия использования, политика конфиденциальности, футер счёта и конфигурация у платёжного провайдера должны говорить одно и то же. У нас долго стояло «плюс НДС», и это было просто неверно.

И ИИ

С августа 2026 года обязанности по прозрачности европейского Закона об ИИ действуют в полном объёме. Любой, кто общается с ИИ-системой, должен иметь возможность это распознать, самое позднее при первом взаимодействии.

Самый важный для нас вывод из этой проверки: юридической страницы в футере для этого, вероятно, недостаточно. Раскрытие должно происходить там, где происходит взаимодействие, то есть в самом сообщении Discord. Поэтому наша ИИ-поддержка в тикетах сама представляется и имеет видимую кнопку, чтобы её выключить. Наша подробная оценка в разделе прозрачность ИИ.

Общая нить

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

Поэтому теперь мы читаем юридические тексты как спецификацию и проверяем и в обратную сторону: действительно ли код делает то, что сказано в наших условиях? Именно на этом вопросе мы нашли два настоящих расхождения, и о них есть отдельная статья.

Другие статьи