Дашборд
Обзор бизнеса
Доход (месяц)
{{ formatMoney(dash.income) }}
Расход (месяц)
{{ formatMoney(dash.expense) }}
Прибыль
{{ formatMoney(dash.profit) }}
Задач открыто
{{ dash.openTasks }}
Просрочено
{{ dash.overdue }}
Товаров
{{ dash.products }}
Низкий остаток
{{ dash.lowStock }}
Записей в журнале
{{ dash.journalEntries }}
⚡ Быстрая запись
| Дата | Запись | ||
|---|---|---|---|
| {{ formatDate(j.created_at) }} | ✅ 🤖 ⏳ | {{ j.raw_text_preview }} |
📓 Журнал
Записывай → AI разберёт → подтверди
Enter — записать · Shift+Enter — новая строка · Ctrl+V — скриншот
| Дата | Запись | |||
|---|---|---|---|---|
| {{ formatDateTime(j.created_at) }} | ✅ 🤖 ❌ ⚠️ ⏳ | {{ j.raw_text_preview }} |
|
|
|
📓
Журнал пуст. Начните записывать операции выше.
| ||||
📦 Товары
Каталог товаров ({{ products.total || 0 }})
| SKU | Название | Штрихкод | Закупка | Продажа | Остаток | Мин. | |
|---|---|---|---|---|---|---|---|
| {{ p.sku }} | {{ p.alias || p.name }} | {{ p.barcode || '—' }} | {{ p.purchase_price ? formatMoney(p.purchase_price) : '—' }} | {{ p.sell_price ? formatMoney(p.sell_price) : '—' }} | {{ p.stock }} | {{ p.min_stock }} |
|
| Нет товаров | |||||||
💰 Финансы
Доходы, расходы, счета
{{ g.label }}
{{ acc.name }}
{{ formatMoney(acc.balance) }} {{ acc.currency }}
| Дата | Тип | Сумма | Категория | Контрагент | Счёт | Описание | |
|---|---|---|---|---|---|---|---|
| {{ tx.date }} {{ tx.date }} | Черновик Перевод {{ {income:'Доход',expense:'Расход',transfer:'Перевод'}[tx.type] }} | -{{ Math.abs(parseFloat(tx.amount)).toLocaleString('ru-RU', {minimumFractionDigits:2, maximumFractionDigits:2}) }} {{ tx.currency || 'RUB' }} +{{ Math.abs(parseFloat(tx.dest_amount || tx.amount)).toLocaleString('ru-RU', {minimumFractionDigits:2, maximumFractionDigits:2}) }} {{ tx.dest_currency || tx.currency || 'RUB' }} {{ tx.type === 'income' ? '+' : '-' }}{{ Math.abs(parseFloat(tx.amount)).toLocaleString('ru-RU', {minimumFractionDigits:2, maximumFractionDigits:2}) }} {{ tx.currency || 'RUB' }} | {{ tx.category || '—' }} | {{ tx.counterparty_name || tx.counterparty || '—' }} | {{ tx.account_name }} {{ tx._groupItems[tx._groupItems.length-1].to_account_name || tx._groupItems[tx._groupItems.length-1].account_name }} {{ tx.account_name }} {{ tx.to_account_name }} {{ tx.type === 'transfer' ? (tx.account_name + ' → ' + tx.to_account_name) : (tx.account_name || '—') }} {{ tx.account_name || '—' }} |
|
|
| Нет транзакций | |||||||
{{ p.sku }}
{{ p.alias || p.name }}
{{ p.brand }}
{{ formatMoney(p.sell_price) }}
{{ formatMoney(p.purchase_price) }}
{{ p.stock > 0 ? p.stock + ' ' + (p.unit || 'шт') : 'Нет в наличии' }}
|
SKU
|
Псевдоним
|
Код товара
|
Наименование
|
Бренд
|
Поставщик
|
Закупка
|
Продажа
|
Остаток
|
Фортуна
|
Источник
|
|||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
{{ p.sku }} | {{ p.alias || '—' }} | {{ p.product_code || '—' }} | {{ p.alias || p.name }} | {{ p.brand || '—' }} | {{ p.supplier_alias || p.supplier || '—' }} | {{ p.purchase_price ? formatMoney(p.purchase_price) : '—' }} | {{ p.sell_price ? formatMoney(p.sell_price) : '—' }} | {{ p.stock || 0 }} {{ p.unit || 'шт' }} | {{ p.stock_fortuna || 0 }} | {{ sourceLabel(p.marketplace_source) }} | ||
| Товары не найдены |
📦 Остатки
Складские остатки по товарам
| SKU | Товар | Склад | Остаток | Резерв | Мин. |
|---|---|---|---|---|---|
| {{ inv.sku }} | {{ inv.alias || inv.product_name }} | {{ inv.warehouse_name }} | {{ inv.quantity }} {{ inv.unit }} | {{ inv.reserved || 0 }} | {{ inv.min_stock }} |
| Нет данных | |||||
🔄 Движения
История складских операций
| Дата | Тип | Товар | Кол-во | Цена | Склад | Причина |
|---|---|---|---|---|---|---|
| {{ formatDateTime(m.created_at) }} | {{ movementTypeLabel(m.type) }} | {{ m.alias || m.product_name }} | {{ m.quantity > 0 ? '+' : '' }}{{ m.quantity }} | {{ m.unit_price ? formatMoney(m.unit_price) : '—' }} | {{ m.warehouse_name }} | {{ m.reason || '—' }} |
| Нет движений | ||||||
🚚 Закупки
Заказы поставщикам · {{ supplies.total || 0 }} поставок
Ожидают
{{ supplyStats.pending || 0 }}
В пути
{{ supplyStats.shipped || 0 }}
Получено
{{ supplyStats.received || 0 }}
Общая сумма (откр.)
{{ i > 0 ? ' + ' : '' }}{{ formatMoney(ot.total, ot.currency) }}
0
Столбцы
| № | Дата | Поставщик | Позиций | Сумма | Статус | Ожид. дата | Примечание | |
|---|---|---|---|---|---|---|---|---|
| {{ s.number || '#' + s.id }} | {{ formatDate(s.created_at) }} | {{ s.supplier_alias || s.supplier_name || '—' }} | {{ s.item_count || 0 }} | {{ formatMoney(s.total_amount, s.currency) }} | {{ supplyStatusLabel(s.status) }} | {{ formatDate(s.expected_date) }} | ||
| Нет поставок |
{{ supplyPageData.number || '#' + supplyPageData.id }}
{{ supplyStatusLabel(supplyPageData.status) }} {{ supplyTotalReceived() }}% получено Товары ({{ supplyPageData.items.length }})
Груз
Файлы
Примечание
| # | Наш артикул | SKU | Артикул поставщика | Наименование поставщика | Кол-во | Получено | Цена | Сумма | Доставка | Себест-ть |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ idx + 1 }} | {{ item.alias || '—' }} | {{ item.sku || '—' }} | {{ item.supplier_sku || '—' }} | {{ item.supplier_description || item.product_name || '—' }} | {{ item.quantity }} {{ item.unit || 'шт' }} | {{ item.received_quantity }} {{ item.received_quantity }}/{{ item.quantity }} — | {{ formatMoney(item.unit_price, supplyPageData.currency) }} | {{ formatMoney(item.quantity * item.unit_price, supplyPageData.currency) }} | {{ item.allocated_logistics_cost > 0 ? formatMoney(item.allocated_logistics_cost, supplyPageData.currency) : '—' }} | {{ item.total_unit_cost > 0 ? formatMoney(item.total_unit_cost, supplyPageData.currency) : '—' }} |
| Итого | {{ supplyPageData.items.reduce((s,i) => s + (i.quantity||0), 0) }} | {{ supplyPageData.items.reduce((s,i) => s + (i.received_quantity||0), 0) }} | {{ formatMoney(supplyPageData.total_amount, supplyPageData.currency) }} | {{ supplyPageData.total_cost ? formatMoney(supplyPageData.total_cost, supplyPageData.currency) : '—' }} | ||||||
Трекинг
{{ supplyPageData.tracking_number || '—' }}
Кол-во мест
{{ supplyPageData.cargo_places || '—' }}
Вес
{{ supplyPageData.cargo_weight ? supplyPageData.cargo_weight + ' кг' : '—' }}
Объём
{{ supplyPageData.cargo_volume ? supplyPageData.cargo_volume + ' м³' : '—' }}
Логистика
{{ supplyPageData.logistics_cost ? formatMoney(supplyPageData.logistics_cost, supplyPageData.logistics_currency || 'USD') : '—' }}
Детали
{{ supplyPageData.logistics_detail || '—' }}
Доставка по РФ
{{ formatMoney(supplyPageData.local_delivery_rub, 'RUB') }} ≈ {{ formatMoney(+(supplyPageData.local_delivery_rub / supplyPageData.cost_rate).toFixed(2), supplyPageData.currency) }}
Курс
{{ supplyPageData.cost_rate }} ₽/{{ supplyPageData.currency }}
Нет файлов
{{ supplyPageData.notes || 'Нет примечания' }}
🛒 Продажи
История продаж и заказов
Продаж сегодня
{{ salesStats.today_count || 0 }}
Сумма сегодня
{{ formatMoney(salesStats.today_amount || 0) }}
За месяц
{{ formatMoney(salesStats.month_amount || 0) }}
Средний чек
{{ formatMoney(salesStats.avg_check || 0) }}
| Дата | Товар | Кол-во | Цена | Сумма | Клиент | Канал |
|---|---|---|---|---|---|---|
| {{ formatDateTime(s.created_at) }} | {{ s.alias || s.product_name || '—' }} | {{ s.quantity }} | {{ formatMoney(s.unit_price) }} | {{ formatMoney(s.quantity * s.unit_price) }} | {{ s.customer || '—' }} | {{ s.channel || 'manual' }} |
| Нет продаж. Продажи создаются через расход со склада (sale) | ||||||
{{ { tasks: '✅ Все задачи', tasks_my: '📌 Мои задачи', tasks_from: '📤 От меня' }[currentRoute] }}
Планирование и контроль
Просрочено
{{ taskStats.overdue }}
На сегодня
{{ taskStats.due_today }}
| Задача | Приоритет | Статус | Исполнитель | Срок | ||
|---|---|---|---|---|---|---|
| {{ t.title }} {{ t.notes_count }} | {{ t.priority }} | {{ {todo:'⬜',in_progress:'🔄',done:'✅',cancelled:'❌'}[t.status] }} {{ t.status }} | {{ t.assignee || '—' }} | {{ t.due_date || '—' }} |
|
|
| Нет задач | ||||||
{{ col.label }}
{{ tasksByStatus[col.status]?.length || 0 }}
{{ t.title }}
Нет задач
AI Ассистент
Спроси что угодно или дай команду на запись данных
📊 Отчёты
Финансовая аналитика
Доходы
{{ formatMoney(reportData.income) }}
Расходы
{{ formatMoney(reportData.expense) }}
Прибыль
{{ formatMoney(reportData.profit) }}
Транзакций
{{ reportData.count || 0 }}
📁 Топ категорий расходов
{{ cat.category || 'Без категории' }}
{{ formatMoney(cat.total) }}
Нет данных
📈 Топ категорий доходов
{{ cat.category || 'Без категории' }}
{{ formatMoney(cat.total) }}
Нет данных
👥 CRM
Контакты и взаимодействия · {{ crmStats.total_contacts || 0 }} контактов
Контакты
{{ crmStats.total_contacts || 0 }}
Контрагенты
{{ crmStats.total_counterparties || 0 }}
Взаимодействия
{{ crmStats.total_interactions || 0 }}
Просрочено действий
{{ crmStats.overdue_actions || 0 }}
📅 Предстоящие действия
| Дата | Контакт | Действие | Из взаимодействия |
|---|---|---|---|
| {{ formatDate(u.next_action_date) }} | {{ u.contact_name || u.counterparty_name || '—' }} | {{ u.next_action }} | {{ u.subject || u.type }} |
Контакты
| Имя | Компания | Телефон | Источник | Взаимодействий | Последнее | |
|---|---|---|---|---|---|---|
| {{ [c.first_name, c.last_name].filter(Boolean).join(' ') || '—' }} | {{ c.company || '—' }} | {{ c.phone || '—' }} | {{ c.email || '—' }} | {{ c.source }} | {{ c.interaction_count || 0 }} | {{ formatDateTime(c.last_interaction) }} |
Нет контактов. Добавь первый!
Последние взаимодействия
| Дата | Тип | Контакт | Тема | Результат | Сл. действие |
|---|---|---|---|---|---|
| {{ formatDateTime(i.created_at) }} | {{ interactionTypeLabel(i.type) }} | {{ i.contact_name || i.counterparty_name || '—' }} | {{ i.subject || '—' }} | {{ i.result || '—' }} |
{{ i.next_action }} {{ formatDate(i.next_action_date) }} — |
Нет взаимодействий
🤝 Сделки
Воронка продаж · {{ deals.total || 0 }} сделок
Новые
{{ dealStats.new || 0 }}
В работе
{{ dealStats.in_progress || 0 }}
Выиграно
{{ dealStats.won || 0 }}
Сумма воронки
{{ formatMoney(dealStats.pipeline_amount || 0) }}
| Сделка | Клиент | Сумма | Этап | Ответственный | Дата | |
|---|---|---|---|---|---|---|
| {{ d.title }} | {{ d.contact_name || d.company || '—' }} | {{ formatMoney(d.amount) }} | {{ dealStageLabel(d.stage) }} | {{ d.assignee || '—' }} | {{ formatDate(d.created_at) }} |
|
| Нет сделок | ||||||
{{ currentRoute === 'suppliers' ? '🚚 Поставщики' : currentRoute === 'customers' ? '🛒 Покупатели' : '📋 Контрагенты' }}
{{ currentRoute === 'suppliers' ? 'Поставщики товаров и услуг' : currentRoute === 'customers' ? 'Покупатели и клиенты' : 'Все контрагенты' }} · {{ suppliersData.total || 0 }}
Столбцы
{{ c }}
✕ Сброс
| Название | Краткое | Тип | Синонимы | Страна | Валюта | Баланс | Телефон | Теги | Товаров | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ s.name }} | {{ s.alias || '—' }} | {{ s.type }} | {{ s.country || '—' }} | {{ s.currency || 'RUB' }} | {{ s.balance != 0 ? formatAmount(s.balance, s.currency) : '—' }} | {{ s.phone || '—' }} | {{ s.email || '—' }} | {{ tag }}— | {{ s.product_count || 0 }} |
|
Нет контрагентов
{{ supplierPageData.name }}
({{ supplierPageData.alias }}) {{ supplierPageData.type }} {{ supplierPageData.address }}
{{ supplierPageData.notes }}
{{ tag }}
Баланс
{{ supplierPageData.balance != 0 ? formatAmount(supplierPageData.balance, supplierPageData.currency) : '0 ' + (supplierPageData.currency || 'RUB') }}
мы заплатили авансом
мы должны
📦 Товары ({{ supplierPageData.products?.length || 0 }})
🚚 Заказы ({{ supplierPageData.supplies?.length || 0 }})
💰 Оплаты ({{ supplierPageData.transactions?.length || 0 }})
📦 Движения товара
📋 События ({{ allEvents.length }})
Столбцы
| Название | Артикул | Код товара | Псевдоним | Краткое название | Наим. у поставщика | Поставщик | SKU | Полное название | Бренд | Закупка | Продажа | Остаток | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
{{ p.short_name || p.alias || p.name }} | {{ p.article || '—' }} | {{ p.product_code || '—' }} | {{ p.alias || '—' }} | {{ p.short_name || '—' }} | {{ p.supplier_product_name || '—' }} | {{ p.supplier || '—' }} | {{ p.sku }} | {{ p.name }} | {{ p.brand || '—' }} | {{ p.purchase_price ? formatMoney(p.purchase_price, supplierPageData.currency) : '—' }} | {{ p.sell_price ? formatMoney(p.sell_price) : '—' }} | {{ p.stock }} |
{{ p.alias || p.name }}
{{ p.sku }}
{{ formatMoney(p.purchase_price, supplierPageData.currency) }}
{{ formatMoney(p.sell_price) }}
Ост: {{ p.stock }}
Нет товаров
| № | Дата | Сумма | Статус |
|---|---|---|---|
| {{ s.number || '#'+s.id }} | {{ formatDate(s.created_at) }} | {{ formatMoney(s.total_amount, supplierPageData.currency) }} | {{ supplyStatusLabel(s.status) }} |
Нет заказов
| Дата | Тип | Сумма | Счёт | Описание |
|---|---|---|---|---|
| {{ t.date }} | {{ {income:'Доход',expense:'Расход',transfer:'Перевод'}[t.type] }} | {{ formatAmount(t.amount, t.currency) }} | {{ t.account_name || '—' }} | {{ t.description || '—' }} |
Нет операций
Раздел в разработке
{{ evt.text }}
{{ evt.description }}
Нет событий
Добавьте заметку, напоминание или задачу
🏭 Склады
{{ warehousesList.length }} складов
{{ wh.name }}
В пути
{{ wh.address }}
{{ wh.notes }}
{{ wh.product_count || 0 }} товаров
{{ wh.total_qty || 0 }} шт
Нет складов
⚙️ Настройки
База данных
{{ JSON.stringify(systemInfo, null, 2) }}
AI (Claude)
✅ Ключ задан ({{ anthropicKey.slice(0,15) }}...)
⚠️ Ключ не задан — AI не будет работать
📥 Приёмки
Приёмка товаров от поставщиков
🚧
Раздел в разработке
💳 Оплаты поставщикам
Исходящие платежи
🚧
Раздел в разработке
📤 Отгрузки
Отгрузка товаров покупателям
🚧
Раздел в разработке
↩️ Возвраты покупателей
Возвраты от клиентов
🚧
Раздел в разработке
💰 Поступления
Входящие платежи от покупателей
🚧
Раздел в разработке
📈 Доходность
Анализ прибыльности
🚧
Раздел в разработке
📥 Дебиторка
📤 Кредиторка
{{ currentRoute === 'receivables' ? 'Нам должны' : 'Мы должны' }}
Всего дебиторка
{{ formatMoney(obligationStats.receivable?.total || 0) }}
{{ obligationStats.receivable?.count || 0 }} шт
Всего кредиторка
{{ formatMoney(obligationStats.payable?.total || 0) }}
{{ obligationStats.payable?.count || 0 }} шт
Просрочено
{{ formatMoney(obligationStats.overdue?.total || 0) }}
{{ obligationStats.overdue?.count || 0 }} шт
| Контрагент | Сумма | Оплачено | Прогресс | Срок | Статус | Описание | |
|---|---|---|---|---|---|---|---|
| {{ ob.counterparty }} | {{ formatMoney(ob.amount) }} {{ ob.currency }} | {{ formatMoney(ob.paid_amount || 0) }} {{ ob.currency }} | {{ obligationProgress(ob) }}% | {{ ob.due_date || '—' }} | {{ obligationStatusLabels[ob.status] || ob.status }} |
|
|
| Нет обязательств | |||||||
📅 Планировщик
Повторяющиеся задачи, платежи и напоминания
Просрочено
{{ overdueSchedules.length }}
На этой неделе
{{ upcomingSchedules.length }}
Всего активных
{{ schedules.items.filter(s => s.is_active).length }}
| Название | Тип | Периодичность | Следующий запуск | Статус | ||
|---|---|---|---|---|---|---|
|
{{ s.title }}
{{ s.description }}
|
{{ typeLabels[s.type] || s.type }} | {{ patternLabels[s.pattern] || s.pattern }} | {{ s.next_due_date || '—' }} | Активно Пауза |
|
|
| Нет записей в планировщике | ||||||