Клиенты
IT АУТСОРС · v1.23
Всего не оплачено 0 ₽
Обращение
В работе
Не оплачено
Оплачено
Работы
ИТОГО 0 ₽
Заметки
Удалить?
Это действие нельзя отменить.
Настройки
Интерфейс
Показывать множитель
Бейдж ×N в карточке клиента
Прайс-лист

Текстовый файл: одна работа на строку, название и цена разделены табуляцией.

Счёт — шапка и подвал
Скрытые клиенты

Снятые клиенты не отображаются в списках и не участвуют в подсчётах.

Справка
Установка на телефон

Открой HTML-файл в Chrome, нажми меню (⋮) → «Добавить на главный экран». Приложение появится как иконка и будет открываться без адресной строки. Интернет для работы не нужен.

Шапка

⬆ Импорт — загрузить ранее сохранённый JSON-файл резервной копии. Текущие данные будут заменены.

⬇ Экспорт — сохранить все данные в JSON-файл на устройство. Делай периодически: данные хранятся в памяти браузера и пропадут при очистке кэша.

? — эта справка.

Вкладка Прайс

Справочник всех видов работ с ценой за единицу. Отсюда выбираются позиции при создании обращения и при заполнении причины вызова.

Строка поиска фильтрует список по названию работы — курсор не сбрасывается при вводе. Кнопка + добавляет новую работу. ✏️ редактирует, 🗑️ удаляет.

Вкладка Клиенты

Свёрнутая карточка показывает название, множитель ×1.5, телефон первого контакта и адрес. Тап раскрывает карточку.

Кнопки управления в правом нижнем углу:

+ — добавить нового клиента.
— свернуть или развернуть все карточки разом. Если все раскрыты — сворачивает, иначе разворачивает. Учитывает текущий фильтр и поиск.

Фильтры под строкой поиска:

Все — полный список.
🟡 В работе — только клиенты с незавершёнными обращениями.
🔴 Неопл. — только клиенты с неоплаченными обращениями. У свёрнутых карточек отображается сумма долга и количество обращений. Над нижним меню — общая сумма по всем видимым клиентам. Кнопки ⇅ и + поднимаются над этой полосой.
✅ Сделано — только клиенты с оплаченными обращениями.
При выборе фильтра карточки раскрываются автоматически и показывают только подходящие записи. На кнопках отображается количество таких обращений.

Поиск работает по названию организации, адресу, именам, должностям и телефонам контактных лиц.

Настройки

Открываются кнопкой ⚙️ в нижнем меню. Настройки хранятся отдельно от базы данных и не затрагиваются при импорте/экспорте.

Показывать множитель — управляет видимостью бейджа ×1.5 в шапке карточки клиента. Удобно отключить, если множитель у всех клиентов одинаковый.

Шапка счёта — текст, который появляется перед счётом при отправке: реквизиты, имя специалиста, телефон и т.п.

Подвал счёта — текст после итоговой суммы: реквизиты для оплаты, подпись, пожелания.

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

Счёт клиенту

Кнопка «📄 Счёт» появляется в раскрытой карточке клиента только при активном фильтре 🔴 Неопл. — когда есть что выставлять.

Открывается модальное окно со списком всех неоплаченных обращений. Каждая работа показана с количеством и суммой — галочкой можно исключить любую позицию из счёта. Итог пересчитывается в реальном времени.

Выезды сгруппированы по дате и причине. Шапка и подвал добавляются из настроек. Формат текста:

Счёт · Название клиента ━━━━━━━━━━━━━━━━━━━━━━━━ 21-04-2025 · Замена блока питания Блок питания ATX — 1 шт — 2 500 ₽ Работа по замене — 1 шт — 800 ₽ ━━━━━━━━━━━━━━━━━━━━━━━━ Итого: 3 300 ₽

📤 Поделиться — открывает системный диалог выбора приложения. Текст вставляется в новое сообщение или письмо — ничего не отправляется автоматически.
📋 Скопировать — копирует текст в буфер обмена. Если буфер недоступен (небезопасный контекст) — показывается текстовое поле для ручного копирования.

Шапку и подвал счёта (реквизиты, подпись, реквизиты оплаты) можно настроить в разделе ⚙️ Настройки.

Карточка клиента

Название — имя или название организации.

Адрес — адрес объекта.

Множитель — коэффициент наценки, применяется ко всем работам этого клиента по умолчанию. Например, 1.5 означает +50% к прайсовой цене.

Контактные лица — можно добавить любое количество. Каждый контакт: имя, должность (директор, бухгалтер, начальник отдела...), телефон. В раскрытой карточке они показываются списком: должность · имя · телефон.

Заметки — произвольный текст о клиенте.

Обращение — создание и редактирование

Кнопка «+ Добавить обращение» внутри карточки открывает полноэкранный редактор. Тап на существующее обращение открывает его для редактирования.

Статусы обращения:

В работе — янтарный фон, работа ещё не завершена.
Не оплачено — красный фон, выполнено но не оплачено.
Оплачено — без цвета, закрытая история.

Причина вызова — текстовое поле. Кнопка «📋 Из прайса» открывает список работ: тап вставляет название в поле. Если поле уже заполнено — текст добавляется через запятую. Можно вставить несколько позиций подряд и затем отредактировать вручную.

Работы и расчёт суммы

Каждая строка работы содержит три поля: Кол-во, Множитель, Итого ₽.

Автоматический режим (поле итого синее): итого = цена из прайса × кол-во × множитель. Множитель наследуется от клиента, но для каждой строки его можно изменить отдельно.

Ручной ввод: если вписать сумму прямо в поле Итого, оно становится янтарным. Множитель тоже становится янтарным со значением 0 и подписью «РУЧ. ВВОД» — сигнал, что автоматический расчёт отключён для этой строки.

Чтобы вернуться к автоматическому расчёту — вписать любое ненулевое значение в поле Множитель. Поля вернутся к синему цвету.

Общий итог внизу — сумма всех строк, с учётом ручных значений.

Резервное копирование

В браузере: данные хранятся в localStorage. При очистке кэша браузера данные пропадут. Рекомендуется периодически делать экспорт (кнопка ⬇ в шапке).

В APK-версии: данные автоматически сохраняются во внутреннюю папку приложения (файл ito_data.json) при каждом изменении и при сворачивании. Папка не видна в файловом менеджере, но данные не зависят от очистки кэша браузера и сохраняются между запусками. Дополнительно данные дублируются в localStorage.

Кнопка ⬇ Экспорт создаёт файл резервной копии с датой в имени и открывает диалог «Поделиться» — можно отправить в Telegram, на почту, сохранить в Google Drive или Downloads. Это единственный способ получить файл с данными на руки.

Кнопка ⬆ Импорт — загрузить ранее сохранённый файл. Текущие данные при импорте заменяются полностью. Сразу после импорта появляется уведомление со ссылкой «Отменить» — в течение 8 секунд можно откатить замену и вернуть предыдущее состояние базы.

Настройки

Открываются кнопкой ⚙️ в нижнем меню. Закрываются стрелкой ‹ или системной кнопкой «Назад».

Показывать множитель — включает или скрывает бейдж ×1.5 в шапке карточки клиента. Удобно отключить, если множитель у всех клиентов одинаковый.

Шапка счёта — текст, который добавляется перед названием клиента при формировании счёта. Подходит для реквизитов: имя ИП, ИНН, телефон.

Подвал счёта — текст, который добавляется после итоговой суммы. Подходит для реквизитов оплаты, подписи, благодарности.

Скрытые клиенты — список всех клиентов с галочками. Снятая галочка убирает клиента из основного списка, его обращения не учитываются в счётчиках фильтров и в полосе общей суммы. Данные клиента и его история сохраняются — можно вернуть галочку в любой момент.

Скрытие клиентов удобно для временно неактивных контрагентов или для разделения рабочих и архивных записей без удаления.
О программе

IT Аутсорс — инструмент учёта клиентов, обращений и расчёта стоимости работ для выездного IT-специалиста.

Разработано в CheshirCa Nest.
Автор: Дядька Чешир

Связь:
📧 cheshirca@gmail.com
✈️ @CheshirCa в Telegram

История версий

v1.23 — текстовая выгрузка и импорт прайса в настройках; отмена создания и удаление обращений.

v1.22 — полоса «Всего не оплачено» скрывается при переключении на вкладку Прайс.

v1.21 — «выезд» переименован в «обращение»; вкладка «⚙️ Настройки» в нижнем меню: шапка и подвал счёта, переключатель множителя в карточках, скрытие клиентов из списков и подсчётов.

v1.20 — валидация базы при загрузке из хранилища; recovery-кнопка «Сбросить» при ошибке рендера; резервная копия и откат после импорта (8 сек); защита localStorage от QuotaExceededError; ошибки Share переведены на toast.

v1.19 — аудит надёжности: toast-уведомление при сбое записи в файл на Android; углублённая валидация импорта (contacts[], works[], Number.isFinite, формат даты, проверка cid); защита render() от падения данных; fallback для буфера обмена в небезопасном контексте.

v1.18 — кнопка ⇅ слева от «+» сворачивает и разворачивает все карточки клиентов разом; при фильтре «Не оплачено» поднимается над полосой итого вместе с «+».

v1.17 — кнопка «+» поднимается над полосой общей суммы при фильтре «Не оплачено».

v1.16 — при фильтре «Не оплачено»: у свёрнутых карточек — выноска с суммой долга и количеством выездов; над нижним меню — общая сумма по всем видимым клиентам.

v1.15 — счёт по клиенту: кнопка «📄 Счёт» появляется в карточке при фильтре «Не оплачено». Модальное окно с чекбоксами по каждой работе, предпросмотром текста и кнопками «Поделиться» / «Скопировать».

v1.14 — системная кнопка «Назад» на Android закрывает открытые экраны и модальные окна в правильном порядке; если всё закрыто — выходит из приложения.

v1.13 — бейдж множителя перенесён со строки названия на строку метаданных — длинные названия организаций больше не обрезают его.

v1.12 — панель фильтров стала горизонтально скроллируемой — кнопки со счётчиками больше не уезжают за экран.

v1.11 — при активном фильтре карточки сворачиваются и разворачиваются стрелкой как обычно; под выездами организации выводится итоговая сумма (при наличии двух и более записей).

v1.10 — выпадающий список работ в выезде и список «Из прайса» сортируются по алфавиту.

v1.9 — закрыты оставшиеся замечания аудита: сортировка клиентов и прайса защищена через safeStr; validateDb углублена до проверки типов вложенных полей; confirm-ok переведён на async/await.

v1.8 — аудит и исправления: удалён мёртвый элемент статуса в форме выезда; все сохранения переведены на await; ужесточена валидация импорта; рендер защищён от битых данных; унифицированы названия статусов; исправлена иконка пустого фильтра «В работе»; убран лишний вызов requestPermissions; исправлено описание цвета статуса в справке.

v1.7 — исправлена ошибка экспорта и записи базы в APK: Directory и Encoding теперь передаются строками ('DATA', 'CACHE', 'utf8') вместо enum-значений которые недоступны через window.Capacitor.Plugins.

v1.6 — хранилище данных в APK переключено на внутреннюю папку приложения (Directory.Data) — запись работает без разрешений на всех версиях Android.

v1.5 — экспорт в APK переделан: открывает системный диалог «Поделиться» — можно отправить файл в Telegram, на почту, сохранить в облако или в Downloads.

v1.4 — клиенты и прайс сортируются по алфавиту; при активном фильтре клиенты упорядочены по дате последней подходящей записи (свежие сверху).

v1.3 — статус «В работе» перекрашен в жёлтый, чтобы не конфликтовать с зелёным у «Сделано».

v1.2 — фильтр «Сделано» в списке клиентов.

v1.1 — поиск по прайсу.

v1.0 — первый релиз. Прайс, клиенты с множителем и контактными лицами, выезды со статусами и расчётом суммы, фильтры, поиск, ручной ввод итого, тема оформления, встроенная справка, поддержка Capacitor (автосохранение в файл на устройстве).

© CheshirCa Nest · Дядька Чешир · v1.23