docs: define accessible review interface #25
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
## Не выпущено
|
## Не выпущено
|
||||||
|
|
||||||
|
- Уточнены доступные состояния и адаптивное поведение внутреннего интерфейса
|
||||||
|
оценки поисковой выдачи.
|
||||||
- Добавлен план внутреннего интерфейса оценки поисковой выдачи юристами.
|
- Добавлен план внутреннего интерфейса оценки поисковой выдачи юристами.
|
||||||
- Завершён Search API v1: стабильные справочники, валидный OpenAPI, безопасная
|
- Завершён Search API v1: стабильные справочники, валидный OpenAPI, безопасная
|
||||||
пагинация и проверка актуальных редакций в локальном OpenSearch.
|
пагинация и проверка актуальных редакций в локальном OpenSearch.
|
||||||
|
|||||||
@@ -54,6 +54,35 @@
|
|||||||
Правая панель предпочтительнее popup: она не блокируется браузером, сохраняет
|
Правая панель предпочтительнее popup: она не блокируется браузером, сохраняет
|
||||||
контекст выдачи и работает на одном экране с оценкой.
|
контекст выдачи и работает на одном экране с оценкой.
|
||||||
|
|
||||||
|
### Доступность оценки и документа
|
||||||
|
|
||||||
|
Оценка реализуется нативной группой `radio` внутри `fieldset` с `legend`
|
||||||
|
«Оценка результата». У каждого значения есть видимая подпись: «0 —
|
||||||
|
нерелевантен», «1 — косвенно полезен», «2 — частично полезен», «3 — прямо
|
||||||
|
отвечает». Нельзя передавать смысл оценки только цветом. Все элементы управления
|
||||||
|
доступны с клавиатуры, имеют видимый `:focus-visible`; выбранный результат
|
||||||
|
обозначается текстом и визуальным состоянием.
|
||||||
|
|
||||||
|
На узком экране список результатов занимает всю страницу. Кнопка «Открыть
|
||||||
|
документ» открывает полноэкранный нативный `<dialog>` с явной кнопкой
|
||||||
|
«Закрыть». При закрытии фокус возвращается на исходную кнопку «Открыть
|
||||||
|
документ».
|
||||||
|
|
||||||
|
### Состояния
|
||||||
|
|
||||||
|
- Во время поиска и сохранения показывается состояние загрузки; повторная
|
||||||
|
отправка на это время недоступна. Стабильная пустая область `role="status"`
|
||||||
|
в DOM объявляет начало поиска, число результатов и успешное сохранение.
|
||||||
|
- Пустая выдача сообщает: «По запросу „…“ ничего не найдено» и предлагает
|
||||||
|
«Изменить запрос».
|
||||||
|
- Ошибка поиска сообщает причину и предлагает «Повторить поиск»; текст ошибки
|
||||||
|
выводится в `role="alert"`.
|
||||||
|
- Ошибка сохранения сообщает: «Не удалось сохранить. Проверьте подключение и
|
||||||
|
повторите». Черновик остаётся в браузере, текст ошибки выводится в
|
||||||
|
`role="alert"`.
|
||||||
|
- После сохранения выводится: «Оценка сохранена · № … · дата и время» в
|
||||||
|
указанной стабильной области `role="status"`.
|
||||||
|
|
||||||
До сохранения черновик хранится в `localStorage`. После успешного сохранения
|
До сохранения черновик хранится в `localStorage`. После успешного сохранения
|
||||||
интерфейс показывает ID записи и время сохранения.
|
интерфейс показывает ID записи и время сохранения.
|
||||||
|
|
||||||
@@ -105,6 +134,9 @@ Python, данные переживают перезапуск и легко в
|
|||||||
подпись и срок, самостоятельно формирует `results_json` и отклоняет оценки
|
подпись и срок, самостоятельно формирует `results_json` и отклоняет оценки
|
||||||
для отсутствующих либо подменённых позиций и документов.
|
для отсутствующих либо подменённых позиций и документов.
|
||||||
- Нельзя передавать персональные данные или закрытые материалы в комментариях.
|
- Нельзя передавать персональные данные или закрытые материалы в комментариях.
|
||||||
|
- Кнопка «Сохранить оценку» остаётся доступной до отправки: отсутствующие
|
||||||
|
обязательные поля проверяются после нажатия, ошибка показана рядом с полем и
|
||||||
|
фокус переводится на первое некорректное поле.
|
||||||
|
|
||||||
## Анализ данных
|
## Анализ данных
|
||||||
|
|
||||||
@@ -127,7 +159,8 @@ Python, данные переживают перезапуск и легко в
|
|||||||
2. Добавить SQLite-хранилище, валидацию, сохранение и JSON-экспорт.
|
2. Добавить SQLite-хранилище, валидацию, сохранение и JSON-экспорт.
|
||||||
3. Добавить статическую внутреннюю страницу в существующий Python-сервер, без
|
3. Добавить статическую внутреннюю страницу в существующий Python-сервер, без
|
||||||
Next.js и отдельного публичного приложения.
|
Next.js и отдельного публичного приложения.
|
||||||
4. Подключить поиск, правую панель документа, черновик и сохранение.
|
4. Подключить поиск, правую панель документа, черновик, адаптивный режим и
|
||||||
|
сохранение в закреплённой панели действий на широком экране.
|
||||||
5. Добавить минимальные backend-проверки сохранения, повторного запуска,
|
5. Добавить минимальные backend-проверки сохранения, повторного запуска,
|
||||||
экспорта и недопустимых оценок.
|
экспорта и недопустимых оценок.
|
||||||
6. Провести ручный прогон на десяти русскоязычных практических запросах с
|
6. Провести ручный прогон на десяти русскоязычных практических запросах с
|
||||||
|
|||||||
Reference in New Issue
Block a user