diff --git a/prd.md b/prd.md new file mode 100644 index 0000000..2dbd058 --- /dev/null +++ b/prd.md @@ -0,0 +1,77 @@ +# PRD — «График отпусков» + +Продуктовый документ (Product Requirements Document). Описывает, зачем нужен проект, что он делает и как устроен. + +--- + +## 1. Цель проекта + +Автоматизировать учёт отпусков сотрудников по приказам (PDF). Раньше приходилось открывать каждый приказ вручную и выписывать данные; теперь приказы складываются в папку, а система сама извлекает ФИО, период отпуска, тип и показывает сводный график. + +**Кому нужно:** HR-отдел / отдел кадров, который ведёт график отпусков по приказам. + +## 2. Что делает система (функциональность) + +- **Читает приказы на отпуск** из папки `orders/` (файлы PDF). +- **Извлекает данные автоматически**: ФИО, должность, отдел, дата начала и конца отпуска, количество дней, номер и дата приказа, тип отпуска (ежегодный / социальный / экологический). +- **Сохраняет данные** в файл `vacations.json` — переживают перезапуск. +- **Показывает сводку в браузере**: + - статистика сверху (всего сотрудников, в отпуске сейчас, планируется, приказов обработано); + - таблица всех отпусков с поиском по ФИО/должности/отделу и фильтром по типу отпуска; + - карточки сотрудников с полным списком их отпусков. + +## 3. Как устроено (технически) + +| Часть | Что это | +|---|---| +| `server.js` | Сервер на Node.js (стандартный `node:http`), разбирает PDF и отдаёт данные через API | +| `orders/` | Папка, куда кладутся приказы на отпуск (PDF) | +| `vacations.json` | Файл-хранилище распознанных данных | +| `index.html` | Интерфейс (статистика, поиск, фильтры, таблица, карточки сотрудников) | +| `package.json` | Конфигурация запуска (`node server.js`) | + +### Данные об одном отпуске (запись в `vacations.json`) + +- `fullName` — ФИО сотрудника +- `position` — должность +- `department` — отдел (например, «Служба активации сетевых сервисов») +- `startDate` / `endDate` — начало и конец отпуска (ДД.ММ.ГГГГ) +- `days` — количество календарных дней +- `orderNumber` / `orderDate` — номер и дата приказа +- `type` — тип отпуска: «Ежегодный оплачиваемый», «Социальный», «Экологический» +- `fileName` — имя исходного PDF-файла + +## 4. Основные сценарии + +1. **Сотрудник выходит в отпуск по приказу.** HR кладёт приказ (PDF) в папку `orders/` и нажимает в интерфейсе «обновить» → система разбирает приказ и добавляет запись в график. +2. **Проверить, кто в отпуске сейчас.** Открывается страница — наверху счётчик «В отпуске сейчас». +3. **Найти отпуск конкретного человека.** Ввод в поиск ФИО → таблица и карточки фильтруются. +4. **Посмотреть все отпуска одного типа** (например, социальные) — фильтр-кнопки над таблицей. + +## 5. API сервера + +| Метод | Путь | Что делает | +|---|---|---| +| GET | `/api/vacations` | Возвращает список всех отпусков (JSON) | +| GET | `/api/refresh` | Заново сканирует папку `orders/`, перечитывает PDF, сохраняет в `vacations.json` и возвращает обновлённый список | + +## 6. Известные ограничения (текущая версия) + +- Приказ должен быть PDF **с текстовым слоем** — отсканированные без распознавания PDF распознаются не полностью. +- Распознавание полей (должность, отдел, номер приказа) срабатывает для типовых формулировок приказов; при другой форме текста часть полей может остаться пустой (ФИО, даты и тип обычно заполняются всегда). +- Автозагрузки новых приказов пока нет — после добавления PDF нужно нажать обновление. +- Нет выгрузки в Excel (планируется как доработка). + +## 7. Планы на развитие (backlog) + +- Кнопка «Выгрузить в Excel / CSV» для переноса графика в отчётность. +- Улучшенное распознавание должностей, отделов и номеров приказов. +- Поддержка отсканированных PDF (OCR). +- Автоматическое отслеживание новых файлов в папке. +- Редактирование записи вручную (если приказ распознался неточно). + +## 8. Запуск + +- Проект запускается командой `run` (сервер поднимается на порту `3000`). +- Интерфейс — обычная веб-страница в браузере; данные из API. +- После ~20 минут простоя сервер засыпает — повторный `run` снова поднимает всё с сохранёнными данными.