Files
psu-schedule/PRODUCT.md
2026-10-16 22:08:45 +03:00

101 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Product
<!-- impeccable:product-schema 1 -->
## Platform
web
## Users
Основная аудитория — студенты всех факультетов Полоцкого государственного университета. Пользователь подтвердил этот охват при инициализации контекста 15 октября 2026 года.
Первый проверенный сценарий — ФЭФ, группа 23-БА. Это начальная группа для проверки качества, а не ограничение аудитории продукта.
## Product Purpose
Сделать университетское расписание из Word удобным для просмотра со смартфона. Студент выбирает свою группу и читает занятия по дням, без необходимости разбирать большую таблицу Word на маленьком экране.
Успешный основной сценарий: найти расписание своей группы, понять время, предмет, преподавателя, аудиторию и условия проведения занятия; при необходимости сверить запись с исходным документом.
## Positioning
Независимый PWA-клиент для существующих расписаний ПГУ. Механизм продукта — преобразование таблиц Word из университетского источника в структурированное расписание с сохранением исходных условий и доступа к оригиналу.
Университет остаётся источником данных. Официальный статус приложения и партнёрство с университетом не подтверждены; такие заявления добавлять нельзя.
## Operating Context
- Университет публикует документы в публичном [каталоге Nextcloud](https://nextcloud.psu.by/index.php/s/no5zKbMrns6j5jQ?dir=/2026-2027). Сервер сам выбирает папку текущего учебного года (с 1 сентября) и находит таблицу недель и звонков по смыслу имени; состояние источников видно в `/api/health`.
- Каталог организован по факультету, форме обучения, разделу и курсу. Один Word-файл может содержать несколько групп, общие занятия и подгруппы.
- Основной пользовательский язык текущего приложения — русский. Календарные подписи используют часовой пояс Europe/Minsk.
- Существуют два входа: выбор документа университета и импорт собственного Word с предпросмотром перед сохранением.
- Открытое расписание можно сохранить в браузере и просматривать при недоступной сети. Обновление из университетского источника требует подключения.
- Помимо основного расписания пользователь может искать предмет, преподавателя или аудиторию, переключать дни и открывать полную исходную запись.
## Capabilities and Constraints
### Реализованный MVP
- Просмотр по дням и на неделю, поиск и ссылка на оригинал Word.
- Выбор группы — отдельный экран: поиск по номеру группы во всём каталоге, недавние группы, просмотр каталога по факультету, курсу и форме. Студент думает группами, а не файлами: имена документов в выборе не показываются. Первый запуск не открывает чужую группу.
- Календарь учебных недель: переключатель недель с датами, режим «По неделям» (только занятия выбранной недели) и режим «Все строки Word» для сверки. Занятия других недель доступны в свёрнутом блоке, у карточек — статус по датам, в деталях — сетка недель семестра.
- Номера пар и текущая пара по университетскому расписанию звонков.
- Список изменений для группы при перепубликации документа (сравнение с копией на устройстве).
- Выбор своей подгруппы и скрытие отдельных занятий; хранятся только в браузере.
- Ссылка и QR-код на расписание группы для распространения внутри группы; личные настройки по ссылке не передаются.
- Поиск по университету: занятия преподавателя или аудитории на дату и свободные аудитории на пару, по всем документам каталога, с явной оговоркой «по расписаниям из Word» и числом учтённых документов. Только онлайн.
- Раздел сессии: экзамены, зачёты и консультации группы с обратным отсчётом. Реальные документы экзаменационной сессии ещё не публиковались; распознавание проверено на образцах.
- Разбор `.docx`, включая объединённые ячейки, общие занятия, отдельные колонки и альтернативные строки. Старые `.doc` требуют серверной конвертации через LibreOffice; максимальный размер импорта — 10 МБ.
- Сохранение последних 12 расписаний и выбранной группы в текущем браузере. Очистка данных браузера удаляет сохранённые расписания.
- PWA с офлайн-кэшем интерфейса, иконок и локальных шрифтов. Установка на телефон требует подходящего браузера и HTTPS; разработка возможна на localhost.
- При недоступности источника сохранённые данные обозначаются явно. Кэширование не означает, что расписание проверено на актуальность.
- В текущем MVP нет учётных записей, платежей и аналитики. Загруженные пользователем Word-файлы не сохраняются на сервере; извлечённое расписание сохраняется в браузере. Сервер кэширует данные университетского каталога.
### Точность и границы интерпретации
- Год документа каталога берётся из папки («2026–2027»), а не из шапки Word: в части файлов шапка осталась от прошлого года (26-КБ, 25-КБ — «2025/2026»).
- Даты занятий рассчитываются по университетской таблице «Расписание белых и зеленых недель» из корня того же каталога (файл от 26 августа 2026 года): неделя 1 — 01.09–06.09.2026 (начинается со вторника), нечётные недели белые, чётные зелёные, 18 недель до 03.01.2027. Звонки берутся из «Расписание звонков.docx» там же.
- Пометка недель в белой или зелёной строке относится только к неделям этого цвета («1-13н» в белой строке — недели 1, 3, …, 13). Проверка 16 октября 2026 года: все 53 пометки в цветных строках распознанных документов согласуются с этим правилом.
- Нераспознанная пометка (например, опечатка «6-12-16н») не скрывает занятие: оно показывается с предупреждением «сверьте с Word». Исходная пометка всегда видна в деталях.
- Таблица недель делится на семестры; расписание использует только недели своего семестра (по тексту Word, датам сессии или текущей дате). Вне своего семестра или без опубликованной таблицы приложение не угадывает даты и показывает все строки Word.
- Сохранённое расписание сверяется с каталогом при запуске: перепубликованный файл обновляется тихо, новый документ группы (следующий семестр или год) только предлагается, пропавший документ обозначается явно.
- Условия вроде `7,9,11н.`, конкретные даты, примечания, подгруппы и особое время занятия должны оставаться доступными. Неизвестное окончание занятия не выдумывается.
- В общем файле студенту показываются занятия выбранной группы и общие занятия; дисциплины соседней группы не должны попадать в его расписание.
- Универсальность парсера для произвольных Word-документов не доказана. Нераспознанная структура должна давать понятную ошибку, а сложная запись — сохранять исходный текст для сверки.
- PDF, Excel и сканы пока не импортируются. Фоновое обновление при закрытом приложении не реализовано.
## Evidence on Hand
- `README.md` — текущие возможности, запуск и ограничения реализации.
- `server/source.js`, `server/parser.js` — фактический источник и правила извлечения данных.
- `test/fixtures/` — реальные Word-документы нескольких факультетов и метаданные источников; основной образец — `fef-23-ba.docx`.
- `test/parser.test.js` — проверки разделения групп, общих занятий, условий, времени и распознавания таблиц.
- `VALIDATION.md` — протокол первого этапа от 15 октября 2026 года: девять прошедших тестов, сборка, браузерные проверки и сохранённое расписание при остановленном сервере. В том снимке каталога было 113 Word-документов, для 23-БА распознано 33 записи. Это результаты того этапа, а не обещание неизменных данных источника.
- `artifacts/mobile-390.jpg`, `artifacts/desktop-1440.jpg`, `artifacts/offline-390.jpg` — снимки существующего интерфейса и состояния без сервера.
- Публикация на HTTPS-хостинг, установка на физический телефон и Docker-сборка в указанном протоколе не подтверждены.
## Product Principles
1. Главная задача — быстро прочитать расписание своей группы на смартфоне.
2. Достоверность важнее догадки: сохранять условия, примечания и возможность сверки с Word.
3. Разделять данные групп корректно, сохраняя общие занятия.
4. Делать сохранённое расписание доступным при сбое связи и ясно сообщать о непроверенной актуальности.
5. Развивать общий клиент для всех факультетов; изменения парсинга проверять на реальных документах, включая исходный сценарий 23-БА.
## Accessibility & Inclusion
Исходная потребность пользователя — удобное и понятное чтение на мобильном устройстве. При дальнейшей работе сохранять читаемый текст, доступные действия на узком экране и текстовые условия занятий: одного цвета строки недостаточно для объяснения расписания.
Отдельный обязательный уровень соответствия WCAG пользователем пока не установлен.
## Brand Commitments
Пользователь закрепил Material 3 Expressive для PWA: крупный читаемый текст и функциональные подписи без декоративных слоганов. Главный экран содержит расписание; импорт, установка и сведения об источнике доступны через меню.
## Open Decisions
- Таблица недель весеннего семестра и папка следующего учебного года ещё не опубликованы; автоматика рассчитана на тот же формат таблиц. Если университет его изменит, сервер сообщит «таблица не распознана», а приложение покажет строки Word до правки парсера.
- Хостинг, публичный адрес и порядок регулярной публикации не выбраны. Локальная сборка не означает опубликованный сервис.
- Другие языки, роли кроме студентов, уведомления и интеграции с календарями не утверждены как обязательные функции.