Ключевая гарантия

«Завершено» — не доказательство. Доказательство — VERIFIED.

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

Самое важное правило

status: completed ≠ выполнено

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

Два поля — два вопроса

Завершил ли агент обработку?

status

Произошёл ли внешний эффект?

operations[].status

Пять состояний операции

Любой побочный эффект агента — SMS, платёж, запись в реестр — приводит ровно к одному из них.

VERIFIED

Подтверждено в источнике. Единственное настоящее «выполнено».

Продолжайте.

ACKNOWLEDGED

Коннектор принял запрос. Только транспорт — не результат.

Ждите подтверждения.

UNKNOWN

Результат действительно неизвестен.

Никогда не повторяйте. Ждите сверки.

MANUAL_REVIEW

Операция требует решения человека.

Разберите в консоли.

FAILED

Однозначный сбой. Ничего не произошло.

Повтор безопасен.

Ошибка и её исправление

Неверно — самая частая ошибка
if n.status == "completed":
    send_receipt()   # ⛔ платежа могло и не быть
Верно
if n.verified:
    send_receipt()               # ✅ подтверждено в источнике
elif n.unknown:
    hold_for_reconciliation()    # ⚠ здесь повтор недопустим

Почему это предотвращает дубликаты

Молча проглоченный UNKNOWN — именно тот источник, откуда берутся дублирующие эффекты. Если код принимает неопределённость за сбой и повторяет запрос, клиент платит дважды. Davirix делает неопределённое состояние явным и по умолчанию неповторяемым, поэтому безопасный путь совпадает с путём по умолчанию.

Верификация — то, что придаёт смысл журналу аудита

Журнал, фиксирующий намерение, ничего не доказывает. Поскольку каждая операция несёт состояние, подтверждённое источником, журнал Davirix фиксирует то, что действительно произошло, — именно эту версию запрашивают регуляторы и риск-комитеты.

Прочитайте правило в документации

Полная спецификация, включая поведение сверки и ключи идемпотентности, — в документации.