О продукте
Ниже — актуальные тексты из docs/product.md и docs/platform-roadmap-agent-todo.md. Обновление страницы подтягивает файлы с диска (в dev — сразу после сохранения markdown).
Относительные ссылки на другие .md внутри документов открываются как обычные URL и могут не совпадать с маршрутами приложения — смотри соответствующие файлы в каталоге docs/.
Продукт и принципы
Продукт: AI Business Copilot (PNL_PLATFORM)
Единая точка возврата: видение, принципы, границы MVP, фазы, карта кода, два контура данных, бэклог-шаблон.
- Техпроцесс: dev-flow.md
- Правила репозитория / референс UI: ../AGENTS.md
- Мотивация / юнит-экономика (owner-friendly): motivation-operating-memo.md · motivation-development-plan.md · демо UI:
/motivation-demo - P&L cockpit (свод B + время C, календарный FY): pnl-cockpit-ui-spec.md · прототип ряда месяцев:
/pnl-cockpit - Штатка + оргструктура + P&L (roles/use-cases): prd/staffing-org-pnl.md
1. Видение продукта
Веб-приложение — симулятор бизнес-модели и управленческих сценариев для CEO / собственника сервисной IT-компании со смешанной моделью (внедрение CRM, кастомная разработка, сопровождение, лицензии, продукты, внутренняя инфраструктура). Это не ERP, не замена бухучёта и не клон Excel.
Пользователь должен:
- моделировать структуру компании (юниты, роли, уровни);
- видеть, как текут деньги: откуда выручка, где прямые/косвенные расходы, маржа, налоги, премиальный фонд, результат собственника;
- менять параметры и мгновенно видеть пересчёт;
- сравнивать сценарии (база vs A vs B);
- в перспективе использовать продукт как operating layer для решений (после стабилизации детерминированного ядра).
UX-цель: ощущение executive simulation workspace / decision cockpit, а не бухгалтерской панели или generic admin.
Для кого в первую очередь: CEO / собственник гибридной сервисной IT-компании; при расширении — CFO / топ-менеджмент (явно не целимся в полевой HRM/CRM в MVP).
Источник бизнес-логики: реальные таблицы и формулы владельца — логику извлекаем в доменную модель и движок приложения; таблицы в перспективе — источник сырых данных после маппинга, а не исполнитель формул.
2. Контекст бизнеса (домен)
- Несколько уровней экономики: собственник → CEO → топ → руководители юнитов → команды.
- Несколько юнитов/направлений (Enterprise, SMB, разработка, продукты, поддержка, инфраструктура и т.д.).
- Разные типы выручки с разной маржинальностью, внутренние передачи, бонусы, распределение прибыли, воронка продаж, зависимость от headcount и утилизации.
2.1. Собственник и CEO; модель vs фактический P&L
- Собственник и CEO — разные роли в модели и в мотивации. У CEO — своя система мотивации и KPI (наёмный/операционный лидер компании). Логика вознаграждения собственника (дивиденды, доля прибыли, long-term и т.д.) не смешивается с «зарплатой CEO» без явного продуктового решения.
- Текущий главный фокус продукта: сценарная управленческая модель (plan / what-if), которая бьётся на всех уровнях (юниты, роли, трансферты, компенсации, агрегат компании), масштабируется без поломки инвариантов и остаётся администрируемой и честной по стимулам.
- Фактический P&L (опора на реальные данные, закрытие периода, сверка) планируется как отдельный раздел приложения: отдельный контур смысла от экрана симуляции, чтобы не смешивать decision-support и учётный/фактический срез. Связь между контурами — общие определения метрик и перенос логики там, где это осознанно.
3. Принципы разработки
- Сначала детерминированная логика — явные формулы и допущения; AI не внутри финансового ядра.
- Domain-driven — сущности бизнеса первичны; не проектировать UI вокруг колонок Excel.
- Разделение слоёв: доменные типы → calculation engine → состояние сценария → импорт/персистенция → UI. Нет бизнес-формул внутри React-компонентов.
- Визуальная ясность важнее бухгалтерской полноты на ранних этапах.
- Scenario-first — ценность только если параметры меняются и результат пересчитывается сразу.
- Маленькие итерации — MVP, затем наращивание; не строить платформу «на вырост» без доказанного ядра.
- AI (фаза позже) — объяснения, инсайты, подсказки сценариев поверх стабильных чисел из движка. В репозитории уже есть ранний прототип объяснений для контура Workspace+Sheets (
[src/app/api/ai/explain/route.ts](../src/app/api/ai/explain/route.ts)) — это не финансовое ядро.
4. Границы MVP (что входит / что нет)
В MVP фокус на четырёх возможностях:
- Описание бизнес-модели (юниты, роли, headcount, потоки выручки, расходы, допущения, бонусные правила — в объёме, достаточном для пересчёта).
- Сценарное моделирование (изменение параметров → мгновенный результат).
- Визуальная карта бизнеса (интерактивный граф).
- Дашборд KPI и сравнение сценариев.
Сознательно не делаем в ранних версиях: полноценный ERP/HRM/CRM/payroll, копирование всех формул Excel 1:1, микросервисы, тяжёлый multi-tenant, ML-прогнозирование, AI внутри расчёта P&L.
5. Критерии успеха MVP
MVP считается успешным, если можно:
- описать компанию как систему (структура + экономика);
- увидеть движение денег и ключевые KPI;
- смоделировать структурные и параметрические изменения;
- сравнить сценарии;
- находить рычаги и утечки маржи (через числа и визуализацию, без «магии» модели);
- использовать это как опору для решений CEO.
6. Архитектура: два контура (важно)
В репозитории временно сосуществуют два контура с разной гранулярностью домена. Это не баг документа — технический долг, который нужно помнить при разработке.
| Контур | Назначение | Движок | Персистенция / данные |
|---|---|---|---|
| CEO Simulator (клиент) | Управленческий симулятор: юниты, агрегированная экономика, base/A/B | [calculateScenario](../src/features/ceo-simulator/engine/calculateScenario.ts) | Сейчас: Zustand + mock ([useScenarioStore](../src/features/ceo-simulator/store/useScenarioStore.ts), [baseData](../src/features/ceo-simulator/mock/baseData.ts)); панель XLSX в UI — без обязательной связи с единой БД-моделью симулятора |
| Workspace + Sheets | Импорт из Google Sheets, сотрудники, правила компенсаций, сценарии «до/после» по месяцу | [calculateMvpMetrics](../src/server/calculations/calculateMvpMetrics.ts), [runScenario](../src/server/scenario/runScenario.ts) | Prisma: Workspace, Employee, Scenario, … |
В Prisma уже описаны таблицы **CeoCompany, CeoBusinessUnit, …** ([prisma/schema.prisma](../prisma/schema.prisma)) как задел под персистентность целевой доменной модели — CEO Simulator на них пока не завязан.
Целевое правило (стратегия данных): источник истины для симуляции — нормализованная модель внутри приложения и движок; таблицы — только вход после маппинга.
Направление унификации (без обязательства срока): один целевой DomainModel (как в [domain/types.ts](../src/features/ceo-simulator/domain/types.ts)) + адаптеры: mock, xlsx, импорт из Workspace/Google. Два движка — сливать только осознанно, после явного решения.
flowchart TB
subgraph ceo_client [CEO_Simulator_Client]
Zustand[useScenarioStore]
Mock[mock_baseData]
Engine1[calculateScenario]
UI[Dashboard_Map_Charts]
Zustand --> Engine1
Mock --> Zustand
Engine1 --> UI
end
subgraph workspace_server [Workspace_Sheets_Flow]
PrismaWS[Prisma_Workspace_models]
Engine2[calculateMvpMetrics_runScenario]
Sheets[Google_Sheets_sync]
PrismaWS --> Engine2
Sheets --> PrismaWS
end
subgraph prisma_ceo [Prisma_Ceo_tables]
CeoTables[CeoCompany_CeoBusinessUnit]
end
prisma_ceo -.->|not_wired_to_client_yet| ceo_client
workspace_server -->|different_granularity| ceo_client
7. Модули продукта и статус в репо
| Модуль | Описание | Статус |
|---|---|---|
| 1. Доменная модель | Company, BusinessUnit, Role, EmployeeGroup, RevenueStream, CostItem, BonusRule, FunnelModel, Assumption, Scenario, результаты | Типы есть — [domain/types.ts](../src/features/ceo-simulator/domain/types.ts). Prisma-зеркало: Ceo*. |
| 2. Движок расчётов | Выручка, прямые/косвенные, валовая/операционная прибыль, налоги, чистая, премии, собственник | Реализовано для CEO path — [calculateScenario.ts](../src/features/ceo-simulator/engine/calculateScenario.ts). Частично: расчёт опирается на агрегаты юнита (avgRevenuePerUnit, payrollFund, hourCost, indirectCost), а не на полную сумму RevenueStream/CostItem/EmployeeGroup. FunnelModel в сценарии ещё не задаёт выручку в движке. Отдельно: движок Workspace — [calculateMvpMetrics.ts](../src/server/calculations/calculateMvpMetrics.ts). |
| 3. Редактор сценариев | Слайдеры/поля для параметров what-if | Есть — [scenario-editor/page.tsx](../src/app/ceo-simulator/scenario-editor/page.tsx), [ScenarioControls.tsx](../src/features/ceo-simulator/components/ScenarioControls.tsx) |
| 4. Dashboard | Крупные KPI | Есть — [ceo-simulator/page.tsx](../src/app/ceo-simulator/page.tsx), [KpiCard](../src/features/ceo-simulator/components/KpiCard.tsx) |
| 5. Карта бизнеса | Граф орг/экономических узлов | Есть (базовый граф) — [BusinessMap.tsx](../src/features/ceo-simulator/components/BusinessMap.tsx) (React Flow) |
| 6. Денежные потоки | Визуализация потоков | Есть (упрощённо) — [MoneyFlowChart.tsx](../src/features/ceo-simulator/components/MoneyFlowChart.tsx) |
| 7. Сравнение сценариев | Base / A / B, отклонения | Есть — [scenario-compare/page.tsx](../src/app/ceo-simulator/scenario-compare/page.tsx), [ScenarioCompareTable.tsx](../src/features/ceo-simulator/components/ScenarioCompareTable.tsx) |
| 8. Мотивация / трансферты | Порог собственника, юнит P&L, dev как внутренний подрядчик, sales deferred, variable comp vs чистая прибыль | Демо: [calculateMotivationDemo.ts](../src/features/motivation-demo/engine/calculateMotivationDemo.ts), страница [motivation-demo/page.tsx](../src/app/motivation-demo/page.tsx) — см. motivation-development-plan.md |
| Импорт | xlsx → домен | Частично: UI [XlsxImportPanel.tsx](../src/features/ceo-simulator/components/XlsxImportPanel.tsx); полный маппинг в DomainModel — по бэклогу |
| Google Sheets | Живые таблицы | Есть для Workspace-контура — интеграции и sync; не = полная нормализация в CEO DomainModel |
| AI-слой | Объяснения, инсайты | Прототип на числах Workspace-сценария; не смешивать с ядром CEO Simulator до унификации |
8. Стратегия данных (этапы)
| Этап | Содержание | Состояние в репо |
|---|---|---|
| 1 | Mock / JSON / domain objects, расчёты в приложении | В работе: mock + движок + UI CEO Simulator |
| 2 | Импорт xlsx, маппинг в домен, snapshot | Частично (панель импорта); доработать контракт маппинга |
| 3 | Google Sheets, sync | Уже есть для Workspace; нужно связать с целевой доменной моделью симулятора, если это выбранный путь |
| 4 | Регулярный sync, история версий | Не реализовано как продуктовая фича |
9. Фазы разработки (продуктовый roadmap)
Актуальный сквозной роадмап, текущий фокус владельца и задачи для агентов: platform-roadmap-agent-todo.md — при необходимости опережает таблицу ниже (например, приоритет мотивации юнитов vs симулятор).
| Фаза | Цель | Текущее состояние (оценка) |
|---|---|---|
| 1 — Core Simulator | Домен, движок, dashboard, scenario editor, business graph, compare | ~70–80% каркаса на моках; не хватает полноты движка (воронка → выручка, декомпозиция по RevenueStream/cost), персистенции Ceo* |
| 2 — Import layer | xlsx → домен, UI маппинга, snapshot | Ранний этап |
| 3 — Google integration | Подключение таблиц к нормализованной модели симулятора | Есть отдельный поток Workspace; требуется стратегия слияния |
| 4 — Advanced modeling | Трансферные цены, capacity, воронка↔выручка, plan vs fact, шаблоны сценариев | В основном бэклог |
| 5 — AI layer | Объяснения, поиск утечек маржи, идеи сценариев — поверх стабильного ядра | Прототип объяснений для другого контура |
10. Стек
| Компонент | Целевой (бриф) | Факт в репозитории |
|---|---|---|
| Framework | Next.js App Router | Next.js 16, App Router |
| Язык | TypeScript | TypeScript |
| БД | PostgreSQL + Prisma | PostgreSQL + Prisma |
| Клиентский state | Zustand | Zustand |
| UI | shadcn/ui | Tailwind + собственные компоненты; shadcn не подключён — возможное будущее выравнивание |
| Граф | React Flow | React Flow |
| Графики | Recharts | Recharts |
11. Контур Workspace + главная (кратко)
Для полноты карты продукта:
- Workspace изолирует данные: сотрудники, компенсации, выручка по месяцу, utilization, сценарии с изменениями
removeEmployee|changeCompensationRule|changeAvgSellingRate. - Пользовательский путь: Интеграции → Источники данных → Сценарии → опционально AI chat с опорой на метрики этого контура.
- Подробности схемы БД:
[prisma/schema.prisma](../prisma/schema.prisma).
12. Бэклог (шаблон)
Формат: идея → зачем → критерий готовности → приоритет P0–P3.
| ID | Задача | Зачем | Готово когда | Приоритет | Статус |
|---|---|---|---|---|---|
| B-001 | Связать FunnelModel с выручкой в calculateScenario | Реалистичный what-if по воронке | Формула и тесты задокументированы | P1 | idea |
| B-002 | Использовать RevenueStream/CostItem в движке или явно убрать из MVP-модели | Нет «мёртвых» полей в домене | Одно из двух сделано консистентно | P1 | idea |
| B-003 | Персистенция CEO Simulator в Ceo* + загрузка в store | Не терять сценарии | CRUD + загрузка в UI | P2 | idea |
| B-004 | Адаптер Workspace/Sheets → DomainModel | Один источник истины для симуляции | Маппинг и тесты на фикстурах | P2 | idea |
Идеи без приоритета (inbox): добавлять сюда свободным списком.
13. ADR-lite (решения и допущения)
| Дата | Решение / допущение | Комментарий |
|---|---|---|
| 2026-04-10 | Собственник ≠ CEO; модель отдельно от факта | В продукте и мотивации — разные роли; фокус на сценарной модели; фактический P&L — отдельный раздел позже (см. §2.1, strategic-product-context.mdc). |
| — | Два движка временно допустимы | CEO Simulator vs Workspace; унификация через адаптеры к одному DomainModel |
| — | CEO v1 движок на агрегатах юнита | Быстрый MVP; детализация по потокам выручки/статьям — следующий шаг |
| — | Таблицы не исполняют формулы в проде | Расчёт только в коде приложения после нормализации |
14. Стратегия (бизнес) — заполняет владелец
| Вопрос | Ответ |
|---|---|
| Главная ставка сейчас | Целостная сценарная модель (P&L + орг + мотивация по ролям), согласованная на всех уровнях и устойчивая к масштабированию. См. platform-roadmap-agent-todo.md §0. |
| Сознательно не делаем | Смешивать собственника и CEO в одной компенсационной логике; смешивать симуляцию и фактический P&L в одном экране без явного разделения продуктовых контуров — факт выносится в отдельный раздел позже. |
| Метрики успеха продукта | Модель воспроизводима: те же входы → те же выходы; правила мотивации по ролям объяснимы и не ломают агрегированный P&L; сценарии сравнимы (base / A / B). |
| Риски | Расхождение стимулов и экономики; манипулируемые аллокации; двойной учёт; раздвоение логики «план» vs «факт» в коде без общих определений метрик. |
Документ обновляй по мере решений; для правок по смыслу можно дать агенту текст «что изменить в разделе N».
Роадмап разработки
Роадмап платформы и TODO для агентов
Назначение: единая точка ориентира для разработки и для AI-агентов: что строим, в каком порядке (с возможностью перестановки), что не ломать, какие интеграции планируются.
Связанные документы: домен симулятора, два контура данных, модульная карта — product.md. Стратегический бриф агента — .cursor/rules/strategic-product-context.mdc.
0. Правило про приоритеты
Приоритеты не зафиксированы навсегда. Владелец может явно сказать «сейчас горит X» — тогда P0 временно = X, даже если ниже в таблице записано иначе. Агенты обязаны перечитать этот файл и последние сообщения в чате перед крупными изменениями.
Текущий акцент владельца (обновлено): прежде всего целостная сценарная модель — P&L, оргструктура и мотивация по ролям (включая отдельно спроектированного CEO с KPI) должны сходиться по уровням, оставаться выгодными и понятными участникам и не ломаться при масштабировании. Система мотивации юнитов и компании остаётся частью этого же контура.
Собственник и CEO: в модели и в мотивации это разные роли; логику собственника не подменять компенсацией CEO.
Фактический P&L: планируется отдельный раздел продукта (операционные/учётные данные, факт периода). Текущий фокус UI и движка — модель / plan / what-if, без обязательства держать «факт» на том же экране.
1. Северная звезда
Платформа — управленческая ОС + decision-support, не витрина BI: финансы, юниты, мотивация, сценарии, данные из таблиц и внешних систем, AI поверх явных данных и правил (не внутри детерминированного расчётного ядра без отдельного решения).
2. Потоки работ (гибкие приоритеты)
Ниже — логика очередности по умолчанию; фактический P0 см. §0 и чат с владельцем.
| Поток | Смысл | Тип задач |
|---|---|---|
| A — Мотивация юнитов / компании | Единая система стимулов по юнитам: база для расчёта, администрирование, защита downside собственника, манипулируемость метрик | Продукт + домен + схема данных + UI/сценарии; выжимки обсуждений фиксировать в продуктовых заметках / ADR |
| B — Управленческие таблицы + AI-чат | Ранний доступ к Google Sheets (и др. источникам), каталог источников, контекст для ответов в чате | Код: data sources, sync/enrich, лимиты контекста, явные ссылки на ячейки/срезы где возможно |
| C — Каналы | Telegram-бот как второй клиент к тем же возможностям (или уведомления) | Webhook, привязка пользователя, те же политики данных |
| D — Инфра | VPS, удалённая разработка, прод-окружение | Docker/Node, Postgres, proxy, секреты, бэкапы — чеклист операций |
| E — Asana | Проекты, инбокс, делегирование | Продукт: обычно Asana API + OAuth/PAT; MCP — удобно агентам в Cursor, не замена серверной интеграции в приложении |
| F — amoCRM | Воронки, сделки, контроль пайплайна | OAuth/sync, сущности в БД или on-demand для чата |
| G — Много таблиц / аналитика | Несколько источников, единый каталог, частота обновления, владелец данных | Расширение каталога источников, без смешивания смыслов в одном «мусорном» промпте |
3. TODO для агентов (код и поведение)
- Мотивация (A): перед кодом — явные сущности, метрики, периоды (месяц/квартал/год), кто администрирует, edge cases; сверка с
BonusRuleи Workspace-контуром в product.md; не втаскивать AI в формулу бонуса без отдельного решения. - Данные + чат (B): не отдавать в модель неограниченный объём таблиц; опираться на уже существующие API источников данных и AI-маршруты в репозитории; не логировать секреты.
- Интеграции (E, F): сначала контракт I/O (что тянем, как часто, где храним), потом реализация; не дублировать старые и новые обходы к одному API.
- Общее: не ломать работающий функционал без явной просьбы; не перезаписывать
.envбез согласования; новые технологии — только после краткого согласования с владельцем, если это не микроправка.
4. TODO операционный (не только код)
- Зафиксировать, где хранятся секреты (локально / VPS / CI).
- Решить: один VPS на dev+prod или разделение.
- Для Telegram: токен бота, whitelist пользователей или привязка аккаунта.
- Для Asana/amocrm: приложения OAuth, redirect URL, права доступа минимально достаточные.
5. Входящие материалы от владельца
Слот: выжимки переписок (например, с GPT) по мотивации юнитов — переносить в этот репозиторий осмысленно: либо отдельный файл docs/notes/motivation-units.md (когда появится текст), либо секция в product.md §14 / ADR-lite, по указанию владельца.
Зафиксировано: заметка владельца по контуру CEO 3.0 / PNL Rocket — notes/ceo-3-motivation-memo.md; каноническая выжимка для агентов — секция PNL Rocket / CEO 3.0 в .cursor/rules/strategic-product-context.mdc.
6. История смены фокуса (кратко)
| Дата | Фокус владельца |
|---|---|
| 2026-04-10 | P0: целостная сценарная модель (сходимость уровней, масштабирование); собственник ≠ CEO; фактический P&L — отдельный раздел позже; в контекст добавлен блок PNL Rocket / CEO 3.0 + notes/ceo-3-motivation-memo.md |
| 2026-04-06 | P0: система мотивации юнитов компании; остальное — по §2 с возможностью перестановки |
Обновляй таблицу при явной смене приоритета.
7. Backlog владельца: P&L Cockpit / мотивация / модель (2026-04-07)
Сырой список идей для следующих итераций — не приоритизирован внутри секции, порядок уточнять в чате.
UI / вёрстка таблицы
- Поправить отступы.
- Разделить таблицу на логические блоки (визуальные секции).
- Убрать лишнюю верхнюю строчку.
- Сворачивание строк/блоков — как в предыдущей версии (восстановить поведение).
Git / репозиторий
- «Закатить» изменения: подключить Git (хотя бы локально — коммиты, ветки), дальше при необходимости remote.
Показатели и домен
- Разобраться с всеми показателями, которые сейчас на странице: проверить, что ничего не потеряно и всё учтено.
- Явно понять: как считается прибыль («как вещество» — формула, слои, что агрегируется).
- Развести: где месячные бонусы, где квартальные (периоды, правила, отображение).
- Правильно назвать показатели (терминология CEO / управучёт).
- Оценить ещё один уровень вложенности в иерархии строк (если нужен по смыслу).
Модель и параметры
- Добавить больше параметров в модель (драйверы, ставки, периоды — уточнить список при работе).
- Сделать так, чтобы модель сохранялась (не только в памяти сессии).
- Варианты персистентности: пресеты, именованные сохранённые модели, история версий — выбрать MVP и схему данных.
- Сценарий A/B или переключение моделей: «модель 1 / модель 2» для сравнения и тестов гипотез.
Качество расчётов и доверие
- Проверить все формулы (юнит-тесты + ручная сверка на эталонных цифрах).
- Добавить раздел «Проверка расчётов» / сверка данных: раскладка по шагам, промежуточные суммы, связь вход → выход (для аудита CEO).
Дизайн
- Докрутить дизайн в целом (согласованность с остальной платформой / референсом).
PNL Rocket / CEO 3.0 (данные, налоги, внедрение)
- Эталон одного юнита: перенос из Google Sheet (пример юнита, отчёт по юниту, мотивация CEO, руководитель разработки, отдел разработки, свод «юниты и компания») + сверка шагов с симулятором.
- Сравнение сценариев: явный режим A/B (две сохранённые модели или пресеты) для ответа «что выгоднее».
- Налоги в модели: НДС, УСН/режим, налог на прибыль — отдельные допущения и строки; не смешивать с управленческой маржой без подписи.
- Соцстрах / взносы: слой «до распределения фонда» vs слой «при выплате»; разные формы (ТК / ИП / самозанятый) — ветки или коэффициенты с явным допущением.
- Штатное расписание: версии по месяцам, история изменений слотов/окладов/индексаций; привязка к P&L и мотивации без задвоений.
- Единый источник правды по ФОТ и премиям: одна цепочка расчёта → ведомость / превью для бухгалтерии (мес / квартал / год).
- План vs факт (позже): подгрузка факта и отклонения от сценария — отдельный контур UI/данных, не ломая сценарную модель.
- Точки безубыточности / окупаемости: часы × ставка или альтернативный драйвер, если от delivery уходят от часов; план отгрузки как вход.
- Накопленный итог, эффективность: выручка на ФТЕ (мес/год), прочие cumulative-метрики по запросу владельца.
- Формула по клику: раскрытие расчёта показателя (цепочка входов) для доверия CEO.
- Рутина: проверка начислений на соответствие правилам мотивации (валидатор поверх тех же данных).
- Лицензии / всплески прибыли: правила нормализации или потолка премии месяца, чтобы квартал/год не ломались от одного месяца.
- Performance Review (backlog): цели, периоды, коэффициенты к премии на базе P&L и оргструктуры.
- Интеграции данных: Excel / Google Sheets как источник факта; история изменений ячеек (где уже есть — расширять осмысленно).