06 AI и автоматизация
B2B медтех · AI 2025 — н.в. Архитектор и разработчик системы

Marketing Expense Tracker: русский ввод → английский отчёт в HQ

Корпоративная система учёта маркетинговых бюджетов с LLM-генерацией полей отчёта, квартальной блокировкой и автоматическими Excel-выгрузками под требования головного офиса Samsung в Корее.

mediace-budget.ru ↗

Коротко

  • Задача — отчётность по маркетинговым бюджетам в HQ Samsung в Корее. Ручное заполнение на английском, ошибки, итерации согласований.
  • Подход — русский ввод на стороне менеджера, английский отчёт на выходе. LLM-агент генерирует структурированные поля события одним кликом.
  • Инфраструктура — Next.js 16 (App Router + Server Actions), PostgreSQL 17 с аудит-триггерами, квартальная блокировка, роли manager/admin.
  • Стабильность — 127 автотестов, Docker-деплой, Let's Encrypt, CBR RF для курса, Auth.js v5 с JWT-сессиями.

Цифры, которые можно сверить

Автотестов (Vitest)
127
AI-генерируемых полей
5 за клик
Аудит-триггеров PostgreSQL
6
Листов в Excel-отчёте
3
Роли доступа
manager / admin
Production URL
mediace-budget.ru

Что за задача

У дистрибьютора Samsung Medison в РФ есть маркетинговый бюджет и обязательство отчитываться по нему перед головным офисом в Корее. HQ получает отчётность на английском языке, в строгом формате: по каждому мероприятию — обоснование, результаты, обратная связь, лиды на продажу, план дальнейших действий.

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

Нам нужно было превратить этот процесс в учётную систему, в которой русскоязычный менеджер вводит кейс на русском, а HQ в Корее получает готовый Excel-отчёт на английском. Без перевода руками и без потерь в формулировках.

Менеджер вводит кейс на русском — система автоматически собирает отчёт на английском под требования HQ в Корее. Это сильно сокращает время подготовки и количество итераций правок.

Что это за продукт

Производственная система mediace-budget.ru. Работает на сервере дистрибьютора с отдельным Docker-стеком, Nginx, Let’s Encrypt, SSL.

Основная сущность — расход (Expense). У расхода есть категория (general / event / webinar), регион (субъект РФ или «National»), сумма в рублях, курс CBR РФ на дату расхода, автоматически посчитанная сумма в USD. К расходу можно прицепить вложенные под-расходы (аренда зала, кейтеринг, гонорары спикеров) — это отдельные Expense-записи с FK на родителя.

Для событий и вебинаров расход дополняется 5 текстовыми полями, которые и попадают в отчёт HQ:

  1. Background Information — обоснование, зачем проводили мероприятие.
  2. Results — что получили.
  3. Overall Feedbacks — обратная связь от участников.
  4. Sales Leads — прямые продажи, запросы на коммерческие предложения.
  5. Follow Up Points — список дальнейших шагов.

Каждое из этих 5 полей имеет кнопку «Generate with AI».

Как устроен AI-генератор

Модель: anthropic/claude-haiku-4.5 через OpenAI-совместимый proxy (ServerSpace GPT API).

Промпт содержит контекст компании. Не «вы маркетолог», а именно: ЗАО «Медиэйс» как дистрибьютор Samsung Medison УЗ-оборудования в РФ. Портфолио сканеров (V5–V8, HS50/HS60, Z20, HERA W10). Целевая аудитория — radiologists, OB/GYN, surgeons. Тон — от первого лица «we», сдержанный, без выдумывания фактов.

Вход: заполненные к этому моменту поля формы — название мероприятия, описание, категория, регион, дата, бюджет, число участников, sales manager, флаг «плановое / внеплановое».

Выход: строгий JSON с 5 полями (justification, results, feedbacks, salesLeads, followUp) — в одно нажатие «Generate all fields». Менеджер дальше редактирует сгенерированный текст и сохраняет.

Язык промпта и выхода — английский. Менеджер вводит русскоязычный контекст в название/описание/заметки, LLM возвращает готовые английские формулировки под требования HQ. Это тот самый мост, который убрал большую часть итераций согласований.

Архитектура под enterprise-требования

Для корпоративной системы недостаточно «красивого фронта». Нужна надёжность, следы всех действий и контроль доступа.

  1. Аутентификация и роли. Auth.js v5 с Credentials-провайдером и JWT-сессиями. Две роли: manager (учёт расходов, отчёты) и admin (всё то же + управление пользователями, категориями, кварталами, sales managers, аудит-лог).
  2. Server Actions с проверкой на каждом вызове. Все мутации идут через Next.js Server Actions. В начале каждого action — getCurrentUser() или requireAdmin(). Нет неавторизованных путей.
  3. Аудит на уровне БД. PostgreSQL-триггеры автоматически записывают все INSERT / UPDATE / DELETE по шести критичным таблицам: расходы, курсы, кварталы, категории, sales managers, типы расходов. User ID пробрасывается через set_config(‘app.current_user_id’, …) в параметризованном запросе.
  4. Квартальная блокировка. Расход можно создать только в явно открытом квартале. Админ открывает квартал → менеджеры работают → админ закрывает после отчётности. После закрытия — запись нельзя создать, изменить или удалить ни с клиента, ни с сервера.
  5. Курсы валют из CBR РФ. В форме расхода кнопка «взять курс с CBR на дату» — система обращается к cbr-xml-daily.ru, округляет до двух знаков, подставляет в поле. USD считается формулой RUB ÷ rate.

Excel-отчёт для HQ

Всё значение системы для бизнеса — в этой выгрузке. Excel на трёх листах, без хардкода чисел, все значения — формулы Excel (чтобы HQ мог пересортировать, отфильтровать и сверить сам):

  • Category Summary — суммы по категориям с формулами SUMIF, колонка доли, авто-фильтр, закреплённая шапка.
  • All Expenses — все расходы с сортировкой по дате. Колонка «Internal Costs» показывает вложенные под-расходы многострочно, «Total (RUB)» = основной + дочерние, USD пересчитывается формулой по курсу строки.
  • By Employee — статистика по менеджерам: средний расход (формула), список категорий.

Под-расходы в общей таблице не дублируются отдельными строками — они собираются внутри родительской. Это важно: HQ получает отчёт в той структуре, в какой он думает о расходах, а не в той, в какой БД хранит записи.

Что в системе, кроме основной формы

  • Dashboard — суммы в рублях и долларах, средневзвешенный курс, статус кварталов, топ-категории, разбивка по регионам и месяцам, топ-5 расходов, список мероприятий без заполненных результатов, недавние записи.
  • Полнотекстовый поиск по расходам — по названию, описанию, обоснованию, результатам, категории, региону, менеджеру, сумме. Поиск ограничен 200 символами, пагинация до 100 записей на страницу.
  • Файловые приложения (receipts) к расходам — JPEG / PNG / WebP / HEIC / PDF, до 10 МБ на файл, до 10 файлов на расход. Раздача через защищённый эндпоинт с проверкой авторизации.
  • Фильтры сохраняются в URL — при переходе в детали расхода и обратно фильтры таблицы не сбрасываются.
  • Адаптивная вёрстка — sidebar прячется на мобильном, таблицы скроллятся, второстепенные колонки скрываются на узких экранах.

Безопасность, которую заложили с самого начала

  • Аутентификация на каждом server action, как на read, так и на write.
  • Супер-админ не может быть разжалован, заблокирован или деактивирован (даже самим собой).
  • Удаление пользователей и категорий невозможно физически — только деактивация (на них есть FK с логов и расходов).
  • Удаление расхода каскадно удаляет все дочерние под-расходы в одной транзакции.
  • Лимиты на входы: поиск 200 символов, страница таблицы 100 записей, пароли от 8 символов.
  • Zod-валидация на входе, человеческие сообщения об ошибках.

Что показательно для бизнеса

  • AI здесь — инструмент экономии времени, а не витрина. LLM не в заголовке, а в одной кнопке на форме. Но эта кнопка снимает часы работы в неделю.
  • Русский ввод → английский отчёт. Коллизия языков в международной корпорации решена на уровне интерфейса, а не через переводчиков.
  • Excel, а не красивый дашборд. HQ в Корее хочет видеть отчёт в том формате, в каком он его согласовывал. Формулы в Excel — это, возможно, самое ценное решение в системе.
  • 127 тестов, аудит на уровне БД, Docker-деплой. Для корпоративной системы это не галочка, а обязательное условие того, что через полгода её нельзя «сломать» случайным обновлением.

Что из этого кейса можно забрать себе

  • Любая внутренняя отчётность в HQ за рубежом превращается в похожую задачу: локальный язык на входе, английский на выходе, LLM вытягивает формулировки в нужный тон.
  • Аудит через PostgreSQL-триггеры — на порядок дешевле, чем прокладывать логирование через код. И его нельзя «забыть включить».
  • Блокировки по периодам (кварталы, отчётные месяцы) — редко встречаются в штатных CRM, но закрывают реальный риск «поправили цифру прошлого квартала после сдачи отчёта».
  • Полноценный Excel с формулами — язык, на котором говорит бухгалтерия и HQ. Не стоит заменять его дашбордом.

Если у вас есть задача с отчётностью в головной офис, учётом бюджетов по правилам, которые живут в Excel-шаблоне, или переводом «я расскажу на русском» в структурированные поля на английском — напишите мне в Telegram. Разберём, подходит ли ваш процесс под похожую систему.

Как со мной связаться

Расскажите задачу —
разберём, как её решать.

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

Обычно отвечаю в течение рабочего дня. На часовых поясах от Калининграда до Владивостока проверено — пишите, когда вам удобно.