Финансы — счета, оплаты, касса
Раздел «Финансы» — это всё про деньги сервиса: список счетов клиентам, текущая касса за день, просроченные долги и инструменты оплаты (наличные, карта, перевод, подарочный сертификат, онлайн-ссылка). Отсюда же управляются налоговые ставки, абонементы и подарочные карты.
Как открыть
В нижней навигации нажмите «Ещё» — там пункт Финансы. Маршрут /finance. Карточка отдельного счёта открывается по /invoice/:id — из списка, из наряда или по ссылке-оплате.
Что на экране
Список счетов (главный экран «Финансы»)
Экран делится на зоны сверху вниз:
- Заголовок и кнопки панели — название «Финансы» и четыре иконки справа (шаблон, абонементы, подарочные, налоги).
- Красный баннер «Просрочено» — появляется только если есть просроченные долги. Число счетов, открытая сумма, максимальная задержка в днях. Нажмите, чтобы увидеть только должников.
- Зелёная карточка «Касса сегодня» — появляется только если за день были платежи. Общая сумма + разбивка по способам (наличные, карта, перевод, онлайн). Нажмите, чтобы увидеть каждый платёж.
- Строка поиска — поиск по клиенту, госномеру, номеру счёта.
- Полоска статусов — горизонтальные чипы: «Все», «Черновик», «Выставлен», «Отправлен», «Оплачен», «Просрочен», «Аннулирован».
- Список счетов — карточки с номером, клиентом, госномером, датой и суммой. Счёт с кредит-нотой выделен красным бордером и значком «⇄ Кредит-нота».
Скин «Aurora» (премиум-вид): тот же экран с другим оформлением — четыре KPI-карточки вверху («Касса сегодня», «Дебиторка», «Просрочено», «Способы оплаты»), таблица счетов с колонками (№, Клиент, Сумма, Дата, Статус), правый сайдбар — столбчатый график «Старение задолженности» (бакеты 0–30/31–60/61–90/90+ дн) и список «Платежи» за день. Логика и данные те же самые.
Карточка счёта (детальный экран /invoice/:id)
Зоны сверху вниз:
- Заголовок — номер счёта и до четырёх иконок справа (отображаются условно: «Оплатить онлайн» — только при наличии долга и права
finance:create; «Предварительный счёт» — только если сметы включены в политике; «Отправить в портал» — только при правеfinance:update). - Блок клиента и авто — имя, телефон, марка/модель, госномер.
- Позиции счёта — группы «Работы» и «Запчасти» с подытогами.
- Итоговый блок — разбивка по категориям (Работы/Запчасти с налогом, если НДС), строка скидки (если есть), строка субподряда/прочего (если есть), «Сумма без налога» + «Налог» (только у плательщиков НДС), «Итого», «Предоплата» (если был аванс), «Оплачено», «К доплате» или «К возврату» (если переплата). При переплате также появляется жёлтый баннер-подсказка о возврате.
- Кнопки оплаты — появляются, пока есть долг.
- История платежей — список внесённых оплат с методом и статусом.
- Кредит-ноты — блок возвратов/корректировок.
- Кнопка «Открыть наряд» — если счёт связан с нарядом.
Черновик счёта всегда равен наряду. Пока счёт в статусе «Черновик», он не «застывает»: при повторном нажатии «Создать счёт» в наряде и при выставлении черновик автоматически пересчитывается по текущему составу наряда (работы, запчасти, субподряд, скидки). Так исправление наряда после создания черновика не теряется. Как только счёт выставлен (Выставлен / Отправлен / Оплачен) — это неизменяемый снимок на момент выставления, и правки наряда его больше не меняют.
Каждая кнопка и действие
Главный экран «Финансы» (/finance)
| Элемент | Где | Что делает | Кому доступно |
|---|---|---|---|
Иконка «Конструктор счетов» (иконка receipt_long_outlined) | AppBar, справа | Открывает экран «Конструктор счетов» — настройка внешнего вида PDF: логотип, реквизиты, подпись, шаблон, язык печати | Все |
Иконка «Сервис-планы» (значок workspace_premium_outlined) | AppBar, справа | Переход на экран «Сервис-планы» (/service-plans) | Все |
Иконка «Подарочные сертификаты» (card_giftcard) | AppBar, справа | Переход на экран «Подарочные сертификаты» (/gift-cards) | Все |
Иконка «Налоговые ставки» (percent_outlined) | AppBar, справа | Переход на экран «Налоговые ставки» | Все |
| Красный баннер «Просрочено счетов: N · €...» | Под AppBar | Нажмите — список переключается в режим только просроченных счетов | Все с доступом к «Финансы» |
| Зелёная карточка «Касса сегодня · N» | Под баннером | Нажмите — открывается sheet с платежами за день; каждый платёж нажимаем → счёт | Все с доступом |
| Строка поиска (иконка лупы) | Под кассой | Ввод текста → поиск по клиенту, госномеру, номеру счёта (с задержкой 350 мс) | Все |
| Крестик «×» в строке поиска | Строка поиска, справа | Очищает поле поиска и сбрасывает результат | Все |
| Чип «Все» | Полоска статусов | Показывает все счета (без фильтра по статусу) | Все |
| Чип «Черновик» | Полоска статусов | Фильтр: только черновики | Все |
| Чип «Выставлен» | Полоска статусов | Фильтр: только выставленные | Все |
| Чип «Отправлен» | Полоска статусов | Фильтр: только отправленные клиенту | Все |
| Чип «Оплачен» | Полоска статусов | Фильтр: только полностью оплаченные | Все |
| Чип «Просрочен» | Полоска статусов | Фильтр: только просроченные | Все |
| Чип «Аннулирован» | Полоска статусов | Фильтр: аннулированные (void) | Все |
| Чип-фильтр «Только: Неоплаченные ×» | Под полоской статусов | Активный баннер-фильтр; крестик «×» снимает фильтр | Все |
| Чип-фильтр «Только: Просрочено ×» | Режим просроченных | Активный фильтр просрочки; крестик «×» возвращает к общему списку | Все |
| Карточка счёта в списке | Список | Нажмите → открывается экран счёта (/invoice/:id) | Все |
| Кнопка «Показать ещё» | Конец списка | Загружает следующую порцию счетов | Все |
| Потянуть список вниз | Список | Обновляет данные с сервера | Все |
| Строка платежа в sheet «Касса сегодня» | Bottom sheet «Касса сегодня» | Нажмите → переход в счёт этого платежа (если привязан) | Все |
Экран счёта (/invoice/:id)
| Элемент | Где | Что делает | Кому доступно |
|---|---|---|---|
Иконка «Оплатить онлайн» (link_outlined) | AppBar, справа | Создаёт ссылку онлайн-оплаты остатка (Montonio); открывает диалог «Оплатить онлайн» со ссылкой и кнопкой «Копировать ссылку» | finance:create, только если есть долг |
Иконка «Предварительный счёт» (request_quote_outlined) | AppBar, справа | Формирует PDF предварительного счёта-сметы; на мобиле — системный диалог печати, в браузере — скачивание | Все (если сметы включены в политике) |
Иконка «Отправить в портал клиента» (cloud_upload_outlined) | AppBar, справа | Генерирует PDF и загружает в портал клиента; если наряд завершён — выставляет счёт (issued) и архивирует наряд; если нет — отправляет смету | finance:update |
Иконка «Печать» (print_outlined) | AppBar, справа | Формирует PDF счёта и открывает системный диалог печати (на мобиле) или скачивает файл (в браузере) | Все |
Кнопка «Повторить» (TextButton) | Центр экрана при ошибке | Повторяет загрузку данных счёта | Все |
Кнопка «Записать оплату» (с иконкой add_card_outlined) | Тело, под итогом | Открывает sheet записи оплаты; там: поле суммы (подставлен остаток), три чипа способа (Наличные / Карта / Перевод), кнопка «Сохранить» | Все (пока есть долг) |
Кнопка «Оплатить подарочной картой» (контурная, иконка card_giftcard_outlined) | Тело, под «Записать оплату» | Открывает диалог ввода кода подарочной карты; при верном коде — списывает сумму с карты | Все (пока есть долг) |
Кнопка «Кредит-нота» (TextButton с иконкой add) | Раздел «Кредит-ноты», заголовок | Открывает диалог выпуска кредит-ноты: сумма, причина, опционально — выбор другого плательщика | Все |
| Кнопка «Открыть наряд» (контурная, внизу) | Конец тела | Переходит на экран ремонтного наряда, связанного со счётом | Все |
| Строка платежа в истории | Раздел «Оплаты» | Только информационная (иконка, метод, статус, сумма); кнопок нет | — |
Экран «Подарочные сертификаты» (/gift-cards)
| Элемент | Где | Что делает | Кому доступно |
|---|---|---|---|
| Иконка поиска (лупа) | AppBar, справа | Открывает диалог «Проверить по коду»: поле кода + кнопка «Проверить» | Все |
| FAB «Выпустить» (с иконкой карты) | Нижний правый угол | Открывает sheet выпуска сертификата | finance:create |
| Потянуть список вниз | Список | Обновляет список сертификатов | Все |
Иконка аннулировать (Icons.block) на карточке | Карточка активного сертификата | Открывает диалог подтверждения аннулирования | Все, только у активных карт |
| Кнопка «Повторить» | Центр при ошибке | Повторяет загрузку списка | Все |
Экран «Сервис-планы» (/service-plans)
| Элемент | Где | Что делает | Кому доступно |
|---|---|---|---|
FAB «План» (с иконкой add) | Нижний правый угол | Открывает sheet создания плана | finance:create |
| Потянуть список вниз | Список | Обновляет список планов | Все |
| Иконка «Архивировать» на карточке | Активный план, справа | Открывает диалог подтверждения архивирования | finance:update |
| Кнопка «Повторить» | Центр при ошибке | Повторяет загрузку списка | Все |
Экран «Налоговые ставки»
| Элемент | Где | Что делает | Кому доступно |
|---|---|---|---|
FAB «Новая ставка» (с иконкой add) | Нижний правый угол | Открывает диалог создания ставки НДС | finance:create |
| Потянуть список вниз | Список | Обновляет список ставок | Все |
Меню «⋮» (more_vert) на карточке ставки | Карточка, справа | Разворачивает пункты: «Изменить» / «Сделать по умолчанию» (только не-дефолтным) / «Удалить» | finance:create |
| Пункт «Изменить» | Меню «⋮» | Открывает диалог правки ставки | finance:create |
| Пункт «Сделать по умолчанию» (только для не-дефолтных) | Меню «⋮» | Делает эту ставку дефолтной (с остальных флаг снимается) | finance:create |
| Пункт «Удалить» | Меню «⋮» | Открывает диалог подтверждения удаления | finance:create |
Диалоги и подэкраны
Sheet «Касса сегодня» (платежи за день)
Открывается нажатием на зелёную карточку «Касса сегодня» на главном экране «Финансы». Тянется снизу, занимает 60–90% высоты экрана.
Содержимое:
- Заголовок «Касса сегодня».
- Список платежей: иконка способа, номер счёта и имя клиента, способ оплаты, сумма.
- Нажатие на строку платежа → переход в карточку счёта (sheet закрывается).
Пустое состояние: показывает «нет счетов» (появляется только когда платежи уже были, но список пуст).
Sheet «Записать оплату»
Открывается кнопкой «Записать оплату» на экране счёта. Тянется снизу.
Поля:
- Сумма оплаты (€) — числовое поле, подставлен остаток по счёту. Можно уменьшить (частичная оплата). Принимает запятую и точку как разделитель.
- Способ оплаты — три чипа (
ChoiceChip): Наличные / Карта / Перевод. По умолчанию «Наличные». Нажмите нужный.
Кнопки:
- Сохранить (FilledButton) — записывает платёж, обновляет остаток по счёту и «Кассу сегодня»; snackbar «Оплата записана».
Что не пустит: сумма ноль или не является числом — кнопка не вызовет ошибку, но ничего не запишет (парсинг на стороне кнопки).
Диалог «Оплатить онлайн» (ссылка для клиента)
Открывается иконкой link_outlined в AppBar счёта. Доступен только при наличии долга и праве finance:create.
Содержимое:
- Заголовок «Оплатить онлайн».
- Подсказка «Ссылка для оплаты — отправьте клиенту:».
- Ссылка для клиента — выделяемый текст (SelectableText).
Кнопки:
- Готово — закрывает диалог без действий.
- Копировать ссылку (основная, FilledButton) — копирует ссылку в буфер обмена, показывает «Ссылка скопирована», закрывает диалог.
Диалог «Кредит-нота» (выпуск кредит-ноты)
Открывается кнопкой «Кредит-нота» (TextButton с иконкой add) в шапке раздела «Кредит-ноты» на экране счёта.
Поля:
- Сумма возврата (€) — числовое поле. Обязательное.
- Причина — текстовое поле. Обязательное.
- Переоформить на · необязательно — поле выбора клиента. Если выбран, появляется жёлтая подсказка: «Исходный счёт будет сторнирован (реверс НДС). Новому плательщику выставьте отдельный счёт».
Кнопки:
- Отмена — закрывает без сохранения.
- Кредит-нота (основная, FilledButton) — создаёт кредит-ноту. Если сумма пуста или причина пуста — показывает «Поле обязательно».
Sheet «Выпустить подарочный сертификат»
Открывается FAB «Выпустить» (FAB.extended с иконкой add_card) на экране /gift-cards. Тянется снизу.
Форма (первый шаг):
Поля:
- Сумма (€) — числовое поле, обязательное. Если пустое или ноль — показывает ошибку «Поле обязательно» при попытке сохранить.
- Код · необязательно — можно ввести свой код (автокапитализация). Под полем подсказка «Оставьте пустым — сгенерируется автоматически». Если оставить пустым — система сгенерирует код сама.
Кнопки:
- Выпустить (основная, FilledButton) — создаёт сертификат; пока идёт запрос — показывает индикатор загрузки.
Результат (второй шаг, после создания):
- Иконка
check_circleи надпись «Сертификат выпущен». - Код карты крупным моноширинным шрифтом + сумма (SelectableText).
- Копировать (контурная, OutlinedButton) — копирует код в буфер; snackbar «Код скопирован».
- Готово (основная, FilledButton) — закрывает sheet, обновляет список.
Диалог «Проверить по коду» (поиск сертификата)
Открывается иконкой search в AppBar экрана /gift-cards. Заголовок диалога — «Проверить по коду».
Поля:
- Код — текстовое поле, автофокус.
Кнопки:
- Отмена — закрывает.
- Проверить (основная) — ищет карту по коду; результат показывается как snackbar: «КОД: €остаток · статус» или «Сертификат не найден».
Диалог «Аннулировать сертификат?»
Открывается иконкой Icons.block на карточке активного сертификата.
Содержимое: заголовок «Аннулировать сертификат?» + текст «Баланс обнулится, сертификат нельзя будет использовать. Удалить его нельзя (нужен для учёта) — только аннулировать.»
Кнопки:
- Отмена — закрывает без действий.
- Аннулировать (красная FilledButton) — аннулирует карту, обновляет список.
Sheet «Создать сервис-план»
Открывается FAB «План» на экране /service-plans. Тянется снизу.
Поля:
- Название плана — текстовое, обязательное (иконка
workspace_premium_outlined). Пустое → «Поле обязательно». - Цена (€) — числовое, обязательное. Ноль → «Поле обязательно».
- Период оплаты — выпадающий список (
DropdownButtonFormField): мес / квартал / год. - Работы (%) — числовое, необязательное.
- Запчасти (%) — числовое, необязательное.
Кнопки:
- Создать (основная, FilledButton) — создаёт план, закрывает sheet.
Диалог «Архивировать план?»
Открывается иконкой archive_outlined на карточке активного плана.
Содержимое: заголовок «Архивировать план?», затем название плана жирным + текст «План перестанет предлагаться клиентам, но история и активные подписки сохранятся.»
Кнопки:
- Отмена.
- В архив (основная, FilledButton) — переводит план в архив; в списке он становится полупрозрачным (opacity 0.5).
Диалог «Новая ставка» / «Изменить» (налоговая ставка)
Открывается FAB «Новая ставка» или пунктом «Изменить» в меню «⋮».
Поля:
- Название (напр. НДС 22%) — текстовое.
- Процент (%) — числовое.
- Сделать ставкой по умолчанию — свитч. Если включить — эта ставка будет автоматически проставляться в новые счета.
Кнопки:
- Отмена.
- Сохранить (основная, FilledButton) — сохраняет ставку.
Диалог «Удалить» (налоговая ставка)
Открывается пунктом «Удалить» в меню «⋮».
Содержимое: заголовок «Удалить» + «Название ставки · процент%».
Кнопки:
- Отмена.
- Удалить (основная, FilledButton) — удаляет ставку.
Что если…
Красного баннера и зелёной карточки не видно
Это нормально: баннер «Просрочено» прячется, когда нет ни одного просроченного счёта; «Касса сегодня» прячется, когда за сегодня ещё не было платежей. К вечеру первой смены они появятся.
Список счетов пустой
После поиска или выбора статуса видите: «По фильтру счетов нет» (активен фильтр) или «Счетов пока нет» (нет ни одного в системе). Сбросьте фильтр нажатием на «×» рядом с чипом или выберите «Все».
Кнопки «Записать оплату» и «Оплатить подарочной картой» не показываются
Счёт полностью оплачен (остаток = 0) или даже есть переплата. Вместо кнопок вы видите строку «К возврату».
PDF с надписью «DEMO» посередине
Вы используете PRO-шаблон счёта на бесплатном тарифе. Чтобы убрать водяной знак, перейдите на тариф PRO. На простом (Classic) шаблоне водяного знака нет.
Иконка «Оплатить онлайн» не появляется в AppBar счёта
Либо у вас нет права finance:create, либо остаток по счёту уже равен нулю.
Подарочная карта не принимается
Код введён неверно, карта уже полностью использована или аннулирована. Проверьте код через иконку лупы на экране сертификатов.
Вопрос-ответ
В: Как быстро найти должников? О: Откройте «Финансы» → нажмите красный баннер «Просрочено» вверху. Увидите список с именами, суммами и днями задержки. Нажмите на любого → сразу на его счёт.
В: Как принять оплату наличными? О: Откройте нужный счёт → нажмите «Записать оплату» → проверьте сумму (подставлен весь остаток, можно уменьшить для частичной оплаты) → выберите чип «Наличные» → «Сохранить». Платёж сразу попадёт в «Кассу сегодня».
В: Клиент хочет оплатить онлайн картой, не через терминал — как ему отправить ссылку? О: Откройте счёт → нажмите иконку «Оплатить онлайн» (link_outlined) в правом верхнем углу → нажмите «Копировать ссылку» → отправьте клиенту ссылку любым способом (мессенджер, СМС). По ссылке он оплатит сам.
В: Как отправить счёт клиенту в его личный кабинет, чтобы он мог скачать PDF? О: Откройте счёт → нажмите иконку облака со стрелкой вверху. Если работы по наряду закончены — клиент получит настоящий счёт и наряд уйдёт в архив. Если работы ещё идут — клиент получит предварительный счёт (смету).
В: Клиент хочет вернуть деньги — что нажать? О: Откройте счёт → прокрутите вниз до раздела «Кредит-ноты» → нажмите кнопку «Кредит-нота» (с иконкой +) → укажите сумму возврата и причину → «Кредит-нота». На счёте появится запись о кредит-ноте, а сам счёт получит красный бордер.
В: Выпустил подарочный сертификат, код не записал — где посмотреть? О: В списке сертификатов (/gift-cards) код каждой карты виден в строке. Нажмите на строку — откроется копирование. Карта хранится, пока не аннулирована или не использована.
В: Создал счёт, потом дописал в наряд работу — в счёте её нет. Что делать? О: Пока счёт в статусе «Черновик» — просто нажмите «Создать счёт» в наряде ещё раз или выставьте счёт: черновик пересчитается по текущему наряду сам. Если счёт уже выставлен (Выставлен / Отправлен / Оплачен) — это снимок на момент выставления, он не меняется; оформите разницу отдельным документом (кредит-нотой или новым счётом).