11 KiB
Техническое задание: Система учёта оборудования и материальных средств
🎯 Тип проекта
Учётная система с веб-интерфейсом для одного администратора и нескольких пользователей с доступом по ссылке.
🧱 Стек (жёстко)
- Бэкенд: Node.js (CommonJS) +
node:httpбез зависимостей - Хранение:
data.json(файл в корне проекта) - Фронтенд: Статичный
index.html+style.css+script.js(ванильный JS) - Дизайн: Дизайн-система KT AI из папки
design-system/(классы и токены) - Запуск: Команда
run(портprocess.env.PORT || 3000)
📋 Модель данных
Файл data.json содержит две сущности:
{
"items": [
{
"id": 1725700000000,
"name": "Наименование оборудования",
"type": "тип (инструмент/оргтехника/СИЗ/транспорт/склад)",
"serialNumber": "Серийный номер",
"inventoryNumber": "Инвентарный номер",
"location": "Местоположение",
"responsible": "Ответственный сотрудник",
"status": "в эксплуатации / на складе / в ремонте / списано",
"lastCheckDate": "2025-09-01",
"nextCheckDate": "2026-09-01",
"checkIntervalMonths": 12,
"note": "Комментарий",
"createdAt": "2025-01-15",
"updatedAt": "2025-09-07"
}
],
"log": [
{
"id": 1725700000000,
"timestamp": "2025-09-07T10:30:00.000Z",
"action": "создана / изменена / удалена / проверка пройдена",
"itemId": 1725700000000,
"itemName": "Наименование",
"user": "Имя пользователя (если есть авторизация)",
"changes": { "field": "старое значение → новое значение" }
}
]
}
🖥 Обязательные экраны
1. Главная — Таблица всех записей
- Отображение всех записей в виде таблицы
- Колонки: Название, Тип, Инвентарный номер, Ответственный, Местоположение, Статус, Дата следующей проверки
- Сортировка по колонкам (кликом по заголовку)
- Пагинация (по 20-50 записей на странице)
2. Поиск и фильтры
- Строка поиска по подстроке (фильтрует по всем текстовым полям)
- Фильтр по статусу (кнопки-чипсы: все / в эксплуатации / на складе / в ремонте / списано)
- Фильтр по типу оборудования
- Фильтр «Требуют проверки» — показывает записи, где
nextCheckDateближе чем 30 дней (или настраиваемый порог)
3. Форма добавления/редактирования
- Модальное окно или отдельная страница
- Поля: все обязательные из модели данных (name, type, serialNumber, inventoryNumber, location, responsible, status, lastCheckDate, nextCheckDate, checkIntervalMonths, note)
- Автоподстановка
nextCheckDateпри вводеlastCheckDate+checkIntervalMonths - Кнопки: Сохранить / Отмена
4. Счётчики сверху
- Всего записей
- По каждому статусу (в эксплуатации / на складе / в ремонте / списано)
- Требуют проверки в ближайшие 30 дней (выделено цветом)
5. Журнал изменений (log)
- Отдельная вкладка или модальное окно
- Таблица: Дата/время, Действие, Запись, Кто изменил, Что изменилось
- Фильтр по дате и действию
6. Выгрузка в Excel
- Кнопка «Выгрузить в Excel» на главной
- Генерация CSV с BOM (кириллица корректно открывается в Excel)
- Выгрузка всех записей или отфильтрованных
🔔 Алерты (уведомления о проверках)
Вариант 1 — Внутри системы (обязательно)
- Блок «Требуют внимания» на главной странице
- Красным выделены записи, где
nextCheckDate< сегодня (просрочено) - Оранжевым — где
nextCheckDateв ближайшие 30 дней - Счётчик просроченных проверок в шапке
Вариант 2 — Telegram-бот (опционально, если пользователь попросит)
- Отдельный бот на grammY (long-polling)
- Ежедневная рассылка администратору списка оборудования с приближающейся проверкой
- Команда
/check— показать список требующих проверки - Команда
/add— быстрое добавление записи через бота
🎨 Дизайн
- Использовать классы и токены из
design-system/(KT AI) - Тёмная или светлая тема — по умолчанию светлая, переключатель в шапке
- Таблица с закреплённой шапкой
- Адаптивная вёрстка (корректно на мобильных)
- Статусы цветом: в эксплуатации (зелёный), на складе (синий), в ремонте (оранжевый), списано (серый)
📂 Структура файлов
project/
├── package.json # { "name": "uchet", "private": true, "type": "commonjs", "scripts": { "start": "node server.js" } }
├── server.js # Сервер на node:http + CRUD API + раздача статики
├── index.html # Главный экран (таблица + фильтры + счётчики)
├── style.css # Стили + подключение design-system/
├── script.js # Логика фронтенда (fetch к API, рендер таблицы, фильтры)
├── data.json # Хранилище данных (не коммитить в git)
├── .gitignore # data.json, node_modules/, .vibe42-run.log, .vibe42-run.pid
└── design-system/ # Дизайн-система KT AI (из корня воркспейса)
🛠 API (server.js)
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/items |
Список всех записей |
| GET | /api/items/:id |
Одна запись по ID |
| POST | /api/items |
Создать запись |
| PUT | /api/items/:id |
Обновить запись |
| DELETE | /api/items/:id |
Удалить запись (с записью в log) |
| GET | /api/log |
Журнал изменений |
| GET | /api/stats |
Счётчики (всего, по статусам, требуют проверки) |
✅ Чек-лист сдачи
node --check server.jsиnode --check script.jsбез ошибок- Пути fetch в
script.jsсовпадают с роутами вserver.js - Все поля формы есть в модели данных и на бэкенде
- Фильтр «Требуют проверки» работает (сравнение дат)
- Удаление с подтверждением
confirm()и записью вlog - Выгрузка в CSV с BOM (
\uFEFFв начале) - Счётчики сверху обновляются при изменении данных
runзапускается без ошибок в логе- Предпросмотр показывает актуальную вёрстку
❓ Вопросы для пользователя (задать перед сборкой)
-
Какое оборудование учитываем? (инструменты, оргтехника, СИЗ, транспорт, склад — от этого зависят типы и доп. поля)
-
Нужны ли дополнительные поля? (например: стоимость, дата покупки, поставщик, гарантия, фото оборудования)
-
Кто такие «пользователи»? (просто люди с ссылкой — все могут редактировать, или нужны уровни доступа: только просмотр / только добавление / полное редактирование)
-
Алерты: только внутри системы или ещё и в Telegram? (Telegram требует токен бота от @BotFather)
-
Нужен ли экспорт в других форматах? (PDF, печать этикеток со штрих-кодами)
-
Есть ли уже список оборудования для импорта? (Excel/CSV файл — можно загрузить сразу)
🚀 Запуск
- Создать файлы по структуре выше
run— команда поднимет сервер на портуprocess.env.PORT || 3000- Ссылка из вывода
run(с?t=...) — рабочая ссылка для администратора .gitignore:data.json,node_modules/,.vibe42-run.log,.vibe42-run.pid- После первого запуска:
git add -A && git commit -m "v1" && git push origin HEAD:main
📎 Примечания
- Даты хранить в формате
YYYY-MM-DD, показывать какДД.ММ.ГГГГ checkIntervalMonths— интервал проверки в месяцах (автоподсчёт следующей даты)- При изменении
lastCheckDateилиcheckIntervalMonths— пересчитыватьnextCheckDate - Все изменения писать в
logс указанием кто и что изменил - CSV для выгрузки: разделитель
;, BOM\uFEFFдля кириллицы, кавычки для полей с запятыми