
Перед пилотом у заказчика
Система для магазина электроники в Японии. Заказы приходят в рабочую Telegram-группу от продавцов из Индонезии и Мьянмы: альбом фото и подпись в свободной форме. Бот, Mini App и веб-панель превращают это в строку для печати этикеток ゆうプリR, а всё сомнительное показывают человеку.
- заказов без ошибок в полях на эталоне из 41 реального заказа
- 93%
- за распознавание заказа основной моделью
- $0,0033
- на заказ у основной модели
- 5,2с
- автотестов: ядро, распознавание, сервер, интерфейс
- 220
Обычный день магазина
25–30
заказов в день, в пик около 60. Сотрудник руками переносил индекс, адрес, имя, телефон, сумму и товар в ゆうプリR. Данные заказчика.
- Два вида этикеток: оплачено и наложенный платёж
- Пометку ntb нельзя пускать на этикетку
- Переводы проверяли глазами по фото чека

61%
адрес только на фото: оборот карты резидента, скриншот, вырезка карты
56%
нет японского телефона, а этикетка должна уйти и без него
45мин
примерно столько уходило на партию из 30 заказов руками. Цель системы меньше 3 минут, замерить её предстоит на пилоте
Чат остаётся рабочим местом
Продавцы не меняют привычку и не учат новый интерфейс. Бот читает то, что и так приходит в группу, а Mini App открывается кнопкой Orders прямо из Telegram.



Демо: разметка собрана в HTML в стиле Telegram, это не снимок мессенджера. Тексты карточек дословно из кода бота, фото и данные вымышленные.
Как заказ становится этикеткой
Попробуйте спорный заказ: печать ждёт решения человека. Данные вымышленные.
Сообщение в группе
- Реакция на сообщении показывает статус: 👀 читаю, 👍 готов, 🤔 нужна проверка
- Альбом склеен после 2,5 секунды тишины
- Фото уменьшены до 1600 px, модели подсказаны строки базы индексов
Две модели, колонки файла A–G
Итог
Жду заказ
Модели разошлись в индексе. В базе Japan Post для этого адреса подходит только один. Какой ставим?
Модель извлекает.
Код решает
Модели ошибаются в форматах и правилах, код нет. Поэтому нейросеть заполняет поля, а всё проверяемое проверяется обычными функциями.
2модели
Нейросети читают
- Подпись и фото: карту резидента, чек, скриншот адреса
- Работают параллельно и независимо
- Поля заполняют, решений не принимают
96тестов ядра
Код решает
- Индекс сверяется с адресом по базе Japan Post
- Строка оплаты, арифметика разбивки, дубли за 7 дней
- Даты, слоты, телефон, тип этикетки H и I
6из 41 к человеку
Человек смотрит спорное
- Модели разошлись или проверка не прошла
- Подтверждает до печати, правит прямо в чате или в приложении
- Каждое действие остаётся в журнале
Модель выбрали сравнением на настоящих заказах
Доля заказов, где верны все критичные поля. Лидеров разделяют 1–3 заказа, поэтому честнее смотреть на порядок величин, чем на десятые доли.
Прогон моделей
- Эталон
- 41 реальный заказ
- Адрес только на фото
- 25 заказов
- Цена всего сравнения
- $0,72
- Пара моделей совпала
- 35 из 41
- Ушло к человеку
- 6
- Проверено на живых
- 6 заказов
- Совпало с эталоном
- 5
- Бот сам пометил жёлтым
- 1
Форма взята с вывески
Единственный источник бренда: вектор настенной вывески магазина. Метр шириной, чёрный и красный, контражур 5500K на стену. Пути логотипа не перерисованы, их режет скрипт прямо из этого вектора.


Красный значит «нужен человек»
Логотипный #FF0100 бывает на знаке, на цифрах вывески и на блокирующих замечаниях. Запрещён как фон, свечение, градиент и кнопка. На этой странице то же правило.
Скос из букв логотипа
Один угол 45°, верхний правый. Только у главного: одна кнопка на экран, вывеска, активный пункт меню. Ниже 40 пикселей скос читается как зазубрина, поэтому там его нет.
Tektur для чисел, Onest для текста
Квадратный шрифт логотипа держит номера заказов и суммы. Знак процента у Tektur читается плохо, поэтому цифра и единица набраны разными шрифтами.
Один стиль иллюстраций
Толстый штрих 3,5, плоские чёрный и красный, скос на углах. Такие споты стоят во всех пустых состояниях, рядом с ними тонких иконок нет.

Одно приложение в Telegram и в браузере
14 экранов, светлая и тёмная тема, четыре ширины. Mini App и панель делят один код, поэтому фронтенд вышел вдвое меньше. На снимках работает настоящий интерфейс на выдуманных данных.






Две темы. Двигайте границу. Тёмная на ступень светлее чёрного: иначе вывеска «Нужна проверка» перестала бы читаться отдельным предметом. В Telegram тема берётся у клиента, контраст AA в обеих проверяет тест.
Телефон это отдельный сценарий, а не компьютер в столбик
Порядок экрана идёт от задачи сотрудника, главное действие внизу под большим пальцем. Сжатие кнопки за 90 мс, данные и код экрана грузятся уже на касании, движение только на transform и opacity.
- Сегодня

- Очередь проверки

- Заказ, снизу главная кнопка

- Закупка и скан серийника

- Статистика, тёмная тема

Одна кнопка и файл для ゆうプリR
Программа почты читает Excel напрямую, поэтому файл собирается по шаблону заказчика. Текстовые ячейки не дают Excel превратить слот 9-12 в дату и съесть ведущий ноль у телефона.


Двойной клик не создаст две партии: выгрузка атомарна. После выгрузки экран сам говорит, что дальше: напечатать и загрузить треки.
Строка файла
Демо-данные. Колонки J и K добавили по согласованию: номер заказа вернётся из программы почты вместе с треком.
| A代引金額 | B電話番号 | C郵便番号 | D住所 | E名前 | F商品名 | G配達時間帯 | H元払い/代引き | I損害用障額 | Jお客様側管理番号 | Kお届け希望日 |
|---|---|---|---|---|---|---|---|---|---|---|
| 193800 | 080-0000-5547 | 333-0866 | 埼玉県川口市デモ町1-2-3 | Rizky Pratama | iPhone 17 Pro ·7838 | 19-21 | 1 | пусто | SR0148 | 2026/10/27 |
- 0 перевод или оплачено
- 1 наложенный платёж до ¥300 000
- 2 от ¥300 001, плюс заявленная ценность ¥500 000
- Больше ¥2 000 000 заказ блокируется: Japan Post откажет

- 1ФайлПартия скачивается или приходит от бота в личку.
- 2ПечатьЭтикетки печатает сама ゆうプリR по фильтру заказчика.
- 3ИсторияФайл 発送履歴データ возвращается в панель или боту.
- 4ТрекНомер привязывается к заказу, заказ становится отправленным.

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


Сверка наложенного платежа
¥288,800собрал курьер
−¥417комиссия перевода ゆうちょ
−¥200гербовый сбор от ¥50 000
¥288,183ждём в выписке
API у банка нет. Сотрудник кидает CSV выписки, поступления сопоставляются с доставленными заказами. Одинаковые суммы система не угадывает, их показывает человеку.



Самое трудное
Одна дата, четыре записи
В 41 заказе нашлось и ДД/ММ, и ММ/ДД. Модель тут ненадёжна, поэтому даты разбирает код, а неоднозначное сразу уходит человеку.
- 13/1013 октября13 больше 12, значит это день
- 10/2323 октябряа здесь день стоит вторым
- 22日22 октябряближайшее будущее 22-е
- 火曜日ближайший вторниквплотную к слоту
Что ещё приходит в подписи
Форматы настоящие из эталона, значения заменены.
- ¥ 48.800¥48,800точка вместо разделителя тысяч
- 150 - 0001150-0001индекс с пробелами
- +81 90 0000 1234090-0000-1234иначе ゆうプリR выкинет плюс
- ( 19-2119-21слот в скобках
- iPhone 17 ·7838 ntbiPhone 17 ·7838пометка не попадает на этикетку
- 1500001 - 1-2-3150-0001индекс склеен с адресом
- abcd2ABCD2хвост серийника строчными
- skipпустотак пишут, когда телефона нет
Перед пилотом два критика искали, где сломается
Один смотрел интерфейс глазами владельца магазина и операторов, второй ломал бот, выгрузку и деньги. Каждая находка закрыта тестом или проверена снимком.
296снимков экрана на 4 ширинах и 2 темах
53находки: 23 в бэкенде и 30 в интерфейсе
2блокера, оба исправлены до пилота
былоОтвет на карточку из нескольких строк портил заказ: вторая строка уходила в имя на этикетке.
сталоОдна правка на строку. Ошибка в любой отменяет все.
былоПосле правки, сделавшей заказ готовым, оператор выпадал из очереди.
сталоНа месте «Подтвердить» появляется «Следующий заказ».
былоCOD засчитывался не тому заказу при пересекающихся выписках.
сталоСтроку, бывшую неоднозначной, система сама не засчитывает.
былоПри ошибке загрузки «Сегодня» показывало All clear.
сталоТеперь ошибка и кнопка «Повторить».
Документы покупателей
- Фото документов зашифрованы AES-256-GCM, каждый просмотр пишется в журнал
- Через 30 дней после доставки фото удаляются, срок настраивается
- Номер 在留カード и My Number не извлекается и не хранится
- В карточке в чате только город: полный адрес и фото есть в приложении
Честно об ограничениях
- Пилота ещё не было: денег и часов экономии здесь нет, их не мерили
- Импорт файла на компьютере заказчика пока не проверен
- Mini App внутри Telegram проверена только в браузере на моке
- Форматы файла истории и выписки ещё не сверены на реальных файлах
Что дальше
- Пилот у заказчика параллельно с ручным процессом
- Перепроверка моделей по правкам операторов
TypeScript, grammY, Hono, pg-boss, PostgreSQL, Drizzle, React 19, Tailwind, Base UI, OpenRouter, Docker
