техническая страница
Условия, сроки, шаги и обратные действия — в одной исполняемой спецификации, проверяемой до выпуска.
Здесь — модель исполнения, рабочие места, сроки и версии, проверка до выпуска, откат, запись, место ИИ, граница интеграции, гарантии и безопасность. Страница отвечает на вопрос «как это устроено и что требует от ваших систем». На вопрос «зачем это нужно» отвечает главная.
Автомат — простой учебный пример: четыре шага и одна кнопка. Если даже здесь ответ на «почему» приходится искать, в процессе с десятками шагов это уже расследование.
Оплатила латте 170 рублей, автомат налил чёрный кофе без молока. Я его не пью. Прошу вернуть деньги и объяснить, почему так вышло. Это уже не первый раз.
Смотрим, что записал автомат. Записано всё.
Всё это задано одним описанием. Поэтому проверка до выпуска видит не только ошибки внутри таблицы, но и несогласованность на стыках правил, шагов, сроков и откатов.
Конструкторская
Здесь описывают правила, условия, контракты данных и шаги, отлаживают процесс, проверяют его до выпуска и собирают версию. Набор проверочных случаев прогоняется сразу на двух версиях: видно, какие случаи дали другой результат, в какой таблице и с какими значениями. Ни один прогон здесь не выполняется «понарошку»: он идёт тем же путём, что и настоящая работа. У описания есть история правок: к любой точке можно вернуться, а любые две редакции — сравнить деловым языком.
Диспетчерская
Рабочее место владельца процесса и аудитора: то же описание тем же способом, но без права его менять. Здесь читают процесс целиком, загружают выпущенную версию и переключают действующую, открывают запись любой операции на её версии и могут спросить правила, что бы они решили на данных этого случая.
Операторская
Управление доступом: люди входят через поставщика удостоверений по стандарту OpenID Connect — встроенного или вашего корпоративного, и учётных записей людей ВЕРДИКТ не хранит. Доступ выдаётся по группе, по домену почты, конкретному человеку или по почте того, кто ещё ни разу не входил. Роли — четыре базовые, свои объявляются конфигурацией. Интеграция получает собственную личность, а не чужой пароль: сервисный аккаунт с меткой, сроком действия и доступом.
Автор и аудитор смотрят на одно и то же описание — разница только в праве его менять.
Срок — поле процесса, а не пункт регламента.
Когда срок наступает, правила процесса определяют, что делать: напомнить, эскалировать или отменить. Само действие выполняет ваша сторона, как и любое другое поручение.
Для каждого шага задан предел попыток, для каждой цели — срок.
Остановка операции — не догадка, а исчерпанный предел, и в записи он назван.
Повторная попытка — с растущим интервалом.
Внешнюю систему, которая отвечает через раз, процесс не нагружает повторами подряд: он ждёт дольше и обращается снова.
Пока процесс ждёт, он принимает команды извне.
«Клиент доплатил», «партия отгружена» — объявленные в процессе команды. Они принимаются во время ожидания и сразу меняют состояние.
Пределы внутри процесса
Открыть кадр целикомВсё это — части описания процесса, а не напоминания в задачах и не мониторинг по факту просрочки.
Таблица условий: что можно налить
Открыть кадр целикомЗаменить «предложить замену» на «отказать и вернуть деньги» — это одна строка таблицы. Не заявка в очередь разработки и не выкатка прикладного кода, а новая версия процесса: проверка до выпуска, выпуск, включение.
Операции, которые уже идут, доходят до конца на той версии, на которой начались. Выпущенная версия начинает работать, только когда её включат.
Каждое сохранение остаётся в истории — с автором и временем. Любые две редакции сравниваются деловым языком: «порог суммы заказа был 10 000, стал 20 000». Если правка контракта данных ломает совместимость, так и сказано.
Порог, строку таблицы и деловые имена меняют без разработчика. Новый шаг или новое поле контракта — по-прежнему работа разработчика.
Версии одного правила
Открыть кадр целикомПрогон набора случаев показывает, что изменится. Остальные проверки разбирают само описание — это десятки видов находок в правилах, шагах, сроках и на стыках между ними, и случаи для них не нужны.
Запись отмены: откат целиком
Открыть кадр целикомУ каждого обратного действия своё деловое имя. Удержать, списать частично, снять удержание, вернуть — четыре разных обязательства перед клиентом, и в записи они названы четырьмя разными словами.
Одинаковые записи вида «фиксируем оплату» не позволяют установить, что именно произошло.
Результат обратного действия проверяется правилами, а не берётся на веру.
Откат может и не дойти до конца — тогда он заканчивается одним из четырёх объявленных исходов, например «исчерпаны попытки» или «требуется человек». Какой именно — видно в записи.
Операция может закончиться раньше своего отката: решение принято, а возвраты и снятия удержаний идут дальше, каждый в свой срок.
«А сейчас правило отработает так же?»
Спорный случай можно проверить заново. С экрана операции открывается песочница, уже заполненная её данными, и считает по правилам той версии, на которой операция шла. Автор процесса может и запустить случай заново на тех же данных — из Конструкторской.
Одна операция от старта до исхода
Открыть кадр целикомАудит — не журнал сообщений, а доказательство решения. По записи восстанавливается ход дела: какой шаг выполнился, какое поручение ушло наружу, какой срок был взведён и какое поле состояния изменилось — со старым и новым значением. Там же само решение: какие шаги были допустимы, у недопустимых — какие условия не сошлись, по правилам какой версии и каким из двенадцати окончаний всё закончилось.
Запись шага, который завершился ошибкой, несёт саму ошибку, а не пустоту. Два одинаковых прогона дают одинаковые последовательности — вплоть до идентификаторов.
«Завершена» и «достигла цели» — два разных ответа: операция может дойти до конца и не сделать того, ради чего выполнялась.
Операция, начатая на прежней сборке, доходит до конца на ней целиком, даже если новая уже принимает работу. Выкатка идущие процессы не трогает.
Если человек потребует разъяснить, как принято касающееся его решение, — по закону о персональных данных такое право у него есть, и ответить надо в тридцать дней, — ответ берётся из записи операции, а не из расследования по журналам.
Пусть замену подбирает языковая модель. Ночью она решает, что раз молока нет, а клиент постоянный, следует налить двойной эспрессо и денег не брать. Правило «не брать денег» никто не заводил: модель сформулировала его сама.
Предложить такое модель может: ни устройство системы, ни промпт этому не помешают. Но своих полномочий она не определяет — что сейчас уместно, считают правила ещё до обращения к ней.
Сама модель при этом необязательна. Выбор следующего шага — отдельная стратегия, и встроенная обходится без модели; передать выбор внешнему решателю можно, но процесс к этому не обязывает.
Запрос к модели и ответ на него
Открыть кадр целикомИИ может участвовать в выборе следующего шага, но своих полномочий не определяет. Перечень уместного считают правила до обращения к модели и передают ей как входные данные, а не как рекомендацию.
Сам шаг выполняется только при сошедшихся условиях — это единственная проверка, которую выбор не может отменить, кем бы он ни был сделан. Ответ, для которого условия не сошлись, записывается вместе с причиной отказа и не выполняется.
И обратиться к модели процесс может лишь тем вызовом, который в нём объявлен заранее. Молчание решателя ограничено объявленным сроком и кончается названным исходом, а не ожиданием без конца.
Запись держит и допустимый набор, и выбор: какие шаги правила сочли допустимыми, у каждого недопустимого — какие условия не сошлись, что выбрала стратегия и как она называется. Ответ модели приходит событием и тоже записывается.
Предсказуемой становится не модель, а граница её полномочий.
Помощника, который пишет процесс за автора, в ВЕРДИКТЕ нет. Зато весь путь автора доступен через один программный интерфейс, описание принимается только в проверенной форме, а проверка до выпуска одинаково строга к любому описанию — кто бы его ни составил.
Операцию запускает ваша система, и предметная область остаётся за ней. ВЕРДИКТ вычисляет, что делать дальше, хранит состояние процесса и отправляет поручение на ваш адрес. Адреса задаёте вы — один на всё или по одному на вид поручения, — и ВЕРДИКТ обращается только к ним. Вид поручения, которого процесс не объявил, наружу не отправляется.
Обработчик выполняет поручение сам — своими доступами и своими вызовами к вашим сервисам.
Сроки отсчитывает сам ВЕРДИКТ: чтобы процесс возобновился по сроку, вашему планировщику делать нечего. Отсчёт идёт по объявленным часам такта, поэтому повтор после сбоя выводит ту же задержку.
Срок несёт каждое поручение наружу. Поручение без срока не проходит разбор процесса: отказ называет поле и причину, а не подставляет ноль. Верхние пределы есть и у операции целиком, и у отката. Владелец установки может ограничить сроки чужих процессов сверху: превышение отклоняется при выпуске, в тексте отказа названы оба значения, а объявленный срок молча не укорачивается.
Внешний сервис отвечает вашей системе, а не ВЕРДИКТУ. Ваша система берёт из ответа то, что нужно для следующего решения, и возвращает это в заранее оговорённом виде. Где провести эту границу, решает она.
Вся граница с внешним миром
Открыть кадр целикомОтвет на одно поручение уже пришёл, второе названо незакрытым отдельной строкой.
Базовый интерфейс интеграции
Поручение приходит вашему обработчику в одной и той же форме:
Внешняя система о ВЕРДИКТЕ ничего не знает. Её вызывают её собственным интерфейсом, и отвечает она туда же, куда отвечала всегда.
Что знать автору обработчика о повторах
Одно и то же поручение может прийти к вашей системе повторно — например, если действие выполнено, а ответ потерялся. Каждая доставка несёт один и тот же ключ dedupe_key. Однократность действия во внешней системе обеспечивает ваша система: по этому ключу она не повторяет уже выполненное действие.
Предел размера одного запроса и потолок сроков чужих процессов настраивает владелец установки.
Ваша система
Карточка не отвечает ни на один. Нижняя строка — всё, что добавляет интеграция.
ВЕРДИКТ
Что на них отвечает запись
В той же записи и попутное: заявка на пополнение RPL-3204 и закрытый резерв RSV-3204.
Ни одной строки этой записи вы не программировали.
На что можно положиться в любой операции.
Про данные
Решения принимаются по тем данным, которые вы передаёте, и ВЕРДИКТ работает ровно с ними. Поле, не участвующее ни в одном правиле, передавать не нужно: не решаете по почте клиента — не передавайте её, и в записи её не будет.
Смысл ваших данных остаётся на вашей стороне — мы в него не заходим. Запись отвечает на другой вопрос: как шло дело. Какое правило сработало, какие не подошли и по какому условию, какая версия правил действовала.
Кто может открывать разбор операций, решаете вы.
Для безопасности и эксплуатации
Ставится у вас. Во время работы ВЕРДИКТ обращается наружу только туда, куда укажете вы: поручения — на ваши адреса, записи аудита — в вашу систему, описание процесса — в ваш git-репозиторий и только по явному действию.
Готовых секретов в поставке нет — они создаются при установке. Сертификат входа выпускается внутри установки, без внешних центров сертификации.
Снаружи открыт один порт; служебные интерфейсы наружу не открыты.
Доступ — по ролям: четыре базовые, свои объявляются конфигурацией. Выдавать и отзывать доступ может только владелец.
Отправка описаний процессов за пределы установки — выгрузка в репозиторий, загрузка оттуда, настройка адреса — отдельное право. Ни одна роль не получает его по наследству: его выдают явно.
Каждая выдача и отзыв доступа записываются в журнал вместе с тем, кто действовал.
Подмена описания процесса обнаруживается при каждой загрузке: контрольная сумма сверяется, и при расхождении загрузка отказывает.
Обновление без простоя: новая версия поднимается рядом, начатые операции доходят на прежней. Резервное копирование и восстановление — в инструментах оператора.
Обе презентации можно переслать внутри компании без устного сопровождения.
Продукт готов к промышленной эксплуатации. Берём ваш процесс и доводим его до работы: разбор, описание, проверка до выпуска, установка в вашем контуре и передача управления вашим людям.
hq@verdikt-app.ru