МАТЕРИАЛЫ ПРОЕКТА · 20.09.2026
Книги INUM: фрагменты, цены и ЮKassa
Версия 0.1.0 · 20 сентября 2026. Владелец поручил использовать ЮKassa и самостоятельно предложить цены. Полный текст продаётся отдельно от подписки на ИИ.
Каталог и ценовая гипотеза
| SKU | Издание | Объём исходного PDF | Полный PDF + EPUB |
|---|---|---|---|
| inum | ИНУМ — концепция системы решений | 579 страниц | 790 ₽ |
| materik | Материк. Полное издание — история решений и последствий | 2149 страниц | 1490 ₽ |
| bundle | Оба полных издания | Две книги | 1990 ₽ |
Комплект экономит 290 ₽ относительно суммы отдельных изданий. Это стартовая ценовая гипотеза прямой продажи, а не измеренная рыночная медиана. Цена не привязана автоматически к валютному курсу.
Международные ориентиры, проверенные 20.09.2026:
- Amazon KDP: диапазон для опции роялти 70% на Amazon.com с 07.07.2026 — $2.99–$12.99. Это условие платформы, а не статистика средней цены.
- Verso, Planet on Fire: электронное издание $9.99 на момент проверки. Это один сопоставимый пример общественно-политической нон-фикшн книги, не достаточная выборка для утверждений обо всём рынке.
Предложение учитывает умеренную цену входа, значительно больший объём полного «Материка» и выгоду комплекта. Для будущей англоязычной редакции можно проверить отдельную гипотезу $9.99 / $19.99 / $24.99; это не действующие валютные цены, не курс конвертации и не обещание английского перевода.
Бесплатный доступ
Оба фрагмента — ровно первые 30 физических страниц PDF, включая обложку, с исходной вёрсткой. Файлы: /books/inum-preview.pdf и /books/materik-preview.pdf. Аннотации-ссылки исключены при извлечении, вложений нет. Полные PDF и EPUB физически исключены из новой статической сборки. Оригиналы остаются в авторском рабочем каталоге вне сайта.
Полные книги не прячутся CSS или JavaScript. Их нельзя выдавать из статического каталога после оплаты: необходим серверный контроль права доступа. Ранее скачанные экземпляры отозвать невозможно; старые приватные версии и история исходников этим выпуском не переписываются.
Что реализовано
- Двуязычная витрина, выбор издания/комплекта, цены, два бесплатных фрагмента. Оплата на витрине явно неактивна.
- Каталог цен на сервере Elixir. Клиент передаёт SKU, email для чека и UUID request_key; сумма берётся с сервера.
- Заказ привязан к организации и пользователю. Изоляция PostgreSQL RLS и фильтр автора. Состав заказа и хэш email фиксируются; повтор с другим составом или email отклоняется.
- Один idempotence key на заказ, при неопределённом ответе повтор использует тот же ключ. Через 23 часа повтор создания неразрешённого заказа блокируется.
- Req обращается только к
https://api.yookassa.ru/v3, без автоматических перенаправлений. Секреты берутся только из серверного окружения. - Проверка оплаты читает объект платежа из API ЮKassa и сверяет ID, магазин, заказ, сумму, RUB и тестовый режим. Возврат с return_url сам по себе права не даёт.
- Тестовый успешный платёж получает
test_succeededи не открывает полную книгу. Для выдачи нужен реальныйsucceeded,paid=trueи совпадение всех полей. - Перед скачиванием сервер вновь проверяет провайдера; любой зафиксированный возврат закрывает выдачу. Устаревший успешный ответ не отменяет зафиксированный возврат. Это консервативная политика полного ограничения доступа при частичном возврате; отдельная модель частичных возвратов пока не реализована.
- Путь к файлу берётся из серверного allowlist по книге и формату, а не из пользовательского пути. Кэширование выдачи запрещено.
API: публичный GET /api/v1/books; с Bearer-сессией — POST /api/v1/book-orders, GET /api/v1/book-orders/:id, POST /api/v1/book-orders/:id/refresh, GET /api/v1/book-orders/:id/files/:book/:format.
Документация: процесс платежа ЮKassa, проверка уведомлений. Текущий этап использует явную серверную сверку API. Webhook-обработчик, фоновая сверка и автоматическое письмо покупателю пока не подключены.
Что необходимо для реального запуска
- Магазин ЮKassa, shop ID, секретный ключ через хранилище секретов; не через чат и не через исходный код.
- Подтверждённые параметры чека, НДС и предмета расчёта для конкретного продавца. Они не выбраны произвольно.
- HTTPS-сервер платформы, авторизованный кабинет покупателя, условия продажи/возврата и данные продавца.
- Частное хранилище полного текста, настройка надёжной выдачи и резервирования, тест покупки/отмены/возврата в тестовом магазине.
- Отдельное включение продаж
INUM_BOOK_SALES_ENABLED=true. Для live-создания платежа код дополнительно требует наличие всех четырёх файлов. Текущая публичная витрина не подключена к API и не принимает оплату.
Переменные: INUM_YOOKASSA_SHOP_ID, INUM_YOOKASSA_SECRET, INUM_YOOKASSA_MODE=test|live, INUM_YOOKASSA_RETURN_URL, INUM_YOOKASSA_VAT_CODE, INUM_YOOKASSA_PAYMENT_SUBJECT, INUM_PRIVATE_BOOK_DIRECTORY. В частном каталоге: inum.pdf, inum.epub, materik.pdf, materik.epub. Его нельзя размещать в публичных статических путях.
Границы проверки
Проверки адаптера используют подставной провайдер без настоящих платежей. Прохождение этих тестов не означает приёмку настоящего магазина ЮKassa, выпуска чеков или международного эквайринга. Активация требует серверных реквизитов и отдельного интеграционного прогона.