# 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` снова поднимает всё с сохранёнными данными.