Как мы везли мыло со Шри-Ланки, потеряли на фрахте и перенесли производство в Россию

История одного бруска: от личной проблемы до Честного знака и ФФД 1.2.

У меня проблемная кожа. Не «иногда высыпает», а много лет подряд.

Мыло, которое мне подошло, я нашёл случайно — привёз со Шри-Ланки. Оно просто работало, и это было настолько нехарактерно для моего опыта с уходовой косметикой, что мы с женой решили попробовать привезти партию и продавать здесь.

Вот с него все и началось
Вот с него все и началось

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

Первая партия: товар не менялся, менялась картинка

Сначала я сделал карточку товара сам. Фото на телефон, текст своими руками. Продажи пошли, но вялые — 10 в месяц.

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

Потом добавил в карточку видео, сгенерированное нейросетью. Оставшийся товар ушёл за неделю.

Сто брусков — не та выборка, по которой можно делать выводы о рынке. Но одна вещь следует железно: товар не менялся вообще ни разу, менялась только его подача. Всё, что произошло между «вялыми продажами» и «распродано за неделю», — это картинка.

Очень отрезвляющий опыт для человека, который девять лет делал продукты и привык думать, что решает функциональность.

Вторая партия и Ормуз

После такого результата решение было очевидным: заказываем 1000 штук.

И здесь в историю вмешалась геополитика. Пока партия готовилась, случился кризис вокруг Ормузского пролива, и стоимость морской логистики пошла вверх по всему миру.

Оговорка, которую я сделаю сам, потому что её мне обязательно напишут в комментариях: маршрут из Шри-Ланки в Россию через Ормузский пролив не идёт. Прямой связи нет.

Связь косвенная. Блокировка одного из ключевых коридоров даёт эффект домино: суда уходят на альтернативные маршруты, рейсы удлиняются, доступного тоннажа становится меньше, а страховые надбавки за военные риски закладываются во фрахт на смежных направлениях. По оценкам за август 2026 года, конфликт поднял ставки в среднем на полторы тысячи долларов за двадцатифутовый контейнер и на три тысячи за сорокафутовый. Контейнерные ставки из Азии на восточное побережье США выросли более чем вдвое за год.

Мой маршрут в этом списке не главный пострадавший. Но когда дорожает всё сразу, дешёвых вариантов не остаётся ни у кого.

Итог для меня в одной цифре: себестоимость одного куска мыла с доставкой стала 900 рублей.

Девятьсот рублей за брусок мыла — это не бизнес. Это цена, при которой ты либо ставишь ценник, за который никто не купит, либо работаешь в минус.

Никакого третьего варианта арифметика не предлагала.

Решение: переносим производство сюда

Мы решили перенести производство в Россию.

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

Дальше мы разделились. Жена взяла на себя перенос бренда и адаптацию продукта под российский рынок — рецептура в рамках нашего техрегламента, состав, упаковка, всё, что связано с тем, чтобы продукт остался тем же самым, но стал легальным здесь. Я взял на себя сайт и техническую часть.

Про техническую часть дальше, потому что именно она оказалась самой недооценённой.

Почему свой сайт, а не только маркетплейс

Три причины, и ни одна не про «хочу свой сайтик».

Комиссия площадки берётся с цены, а не с прибыли. В низкомаржинальном физическом товаре это принципиально другая математика, чем кажется на старте.

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

Вы не управляете витриной. Карточка живёт по правилам площадки и завтра может уехать вниз без объяснений.

Свой сайт всё это решает. Взамен он приносит обязанности, которые площадка раньше несла за вас.

Стек

Next.js на фронте и бэке, Т-Касса как эквайринг, облачная касса Эвотор для фискализации.

Логика простая: минимум подвижных частей и минимум интеграций, которые придётся чинить в одиночку. Облачная ККТ вместо физической — потому что физическая касса это железка, которая должна где-то стоять и обслуживаться. Облачная снимает этот класс проблем целиком.

Эквайринг и касса — разные вещи, и это первое, что стоит понять. Эквайринг принимает деньги. Касса формирует фискальный документ и отправляет его в ФНС через ОФД. Одно без другого нелегально. Многие сервисы продают их пакетом, отсюда иллюзия, что это одна сущность.

Сайт я написал за выходные. На то, чтобы с него можно было легально принять деньги и пробить чек, ушло 9-10 недель.

Честный знак: что и когда

Мыло и моющие средства попали в обязательную маркировку с 1 мая 2025 года — коды наносят производители и импортёры. Дальше требования расширились на оборот: с 1 июля 2026 года участники обязаны передавать сведения о движении товара через ЭДО, а о выбытии — через онлайн-кассу.

Что нужно, чтобы войти в систему:

  1. Получить УКЭП. Без неё дальше ничего не происходит.
  2. Зарегистрироваться в ГИС МТ.
  3. Завести карточки товара в Национальном каталоге. Отдельная работа: у каждого SKU свой набор атрибутов, и он проверяется.
  4. Настроить заказ и оплату кодов. Код стоит 50 копеек плюс НДС — единственное место во всей истории, где цифры приятные.
  5. Подключить ЭДО.

ФФД 1.2 и почему нельзя остаться на 1.05

Формат фискальных документов 1.2 умеет передавать код маркировки в чеке. Продаёте маркированный товар — обязаны быть на 1.2, потому что в чек должен уехать код конкретной единицы, а не просто наименование и цена.

Механика: касса кладёт код в чек, чек уходит в ОФД, ОФД передаёт сведения в ГИС МТ, код выбывает из оборота. С этого момента брусок считается проданным конечному потребителю и не может быть легально продан ещё раз.

Ломается вот здесь.

Какой именно код класть в чек

В офлайн-рознице вопроса нет: кассир сканирует DataMatrix с той пачки, которую держит в руках. Физический товар и фискальный документ связаны через сканер.

В интернет-магазине сканера нет. Покупатель нажал «Оплатить», эквайринг подтвердил, касса обязана пробить чек — и в этот чек нужно положить код той самой единицы, которая поедет покупателю. Но она лежит на складе, и никто её не сканировал.

Значит, нужен поштучный учёт кодов на своей стороне. Не «на складе 200 брусков», а «вот 200 конкретных кодов, каждый в одном из состояний: свободен, зарезервирован под заказ, выбыл». Перед формированием чека вы атомарно берёте свободный код, привязываете к заказу и только потом отдаёте в кассу.

Алгоритмически несложно. Просто совершенно не то, чем вы планировали заниматься.

Грабли, на которые я наступил: состояние «зарезервирован» обязано иметь таймаут. Иначе брошенные корзины и неудачные платежи потихоньку съедают пул кодов, и система однажды сообщает, что товара нет, хотя коробка на складе полная.

Возвраты

Покупатель вернул товар — нужен чек возврата, и код должен вернуться в оборот. То есть «выбыл» — не терминальное состояние, а обратимое. Если не заложить это сразу, переделывать придётся больно: состояние размазано по заказам, чекам и складу.

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

Что оказалось дороже всего

Не деньги. Коды стоят копейки, облачная касса — 2500-5000 рублей, эквайринг — процент со сделки.

Дорого стоит порядок операций. Оплата, фискализация, выбытие кода, отгрузка, ЭДО — пять систем, каждая со своим состоянием, и любая может отвалиться посередине. Оплата прошла, а касса не ответила. Чек пробился, а код не выбыл. Всё выбыло, а отгрузка сорвалась.

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

Что помогло: не пытаться сделать всё синхронно в одном запросе. Оплата подтверждается — заказ переходит в состояние, дальше очередь и ретраи с идемпотентностью на каждом шаге. Скучно и надёжно.

Что я вынес

Два вывода, и оба не те, за которыми я шёл.

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

Второй: порог входа в этой нише сместился. Раньше он был «уметь сделать сайт». Теперь — «уметь провести единицу товара через государственную систему прослеживаемости». Первое умеют многие, второе сильно меньше.

Это неплохой ров. Просто выкопан он не нами.