refactor project

This commit is contained in:
2026-01-12 22:42:22 +03:00
parent d32e367383
commit afd6b2c1fd
16 changed files with 806 additions and 2342 deletions

252
REQUIREMENTS.md Normal file
View File

@ -0,0 +1,252 @@
# Требования к приложению HotelTask
## Содержание
1. [Функциональные требования](#1-функциональные-требования-fr)
2. [Нефункциональные требования](#2-нефункциональные-требования-nfr)
---
## 1. Функциональные требования (FR)
### 1.1 Управление пользователями (FR-USER)
| ID | Требование | Приоритет | MVP |
|----|------------|-----------|-----|
| FR-USER-001 | Система должна обеспечивать регистрацию пользователей | High | Да |
| FR-USER-002 | Система должна обеспечивать авторизацию пользователей | High | Да |
| FR-USER-003 | Система должна поддерживать назначение ролей пользователям | High | Да |
| FR-USER-004 | Система должна позволять редактировать профиль пользователя | Medium | Да |
| FR-USER-005 | Система должна позволять деактивировать пользователей | Medium | Да |
| FR-USER-006 | Система должна поддерживать привязку пользователя к подразделению | High | Да |
### 1.2 Роли и права доступа (FR-ROLE)
| ID | Требование | Приоритет | MVP |
|----|------------|-----------|-----|
| FR-ROLE-001 | Система должна поддерживать роль "Администратор системы" с полным доступом | High | Да |
| FR-ROLE-002 | Система должна поддерживать роль "Менеджер/Супервайзер" для управления задачами | High | Да |
| FR-ROLE-003 | Система должна поддерживать роль "Линейный сотрудник" для выполнения задач | High | Да |
| FR-ROLE-004 | Система должна поддерживать API-доступ для внешних систем | High | Да |
| FR-ROLE-005 | Система должна позволять настраивать гранулярные права доступа | Medium | Нет |
### 1.3 Управление задачами (FR-TASK)
| ID | Требование | Приоритет | MVP |
|----|------------|-----------|-----|
| FR-TASK-001 | Система должна позволять создавать задачу с названием и описанием | High | Да |
| FR-TASK-002 | Система должна поддерживать типы задач (уборка, ремонт, обслуживание и т.д.) | High | Да |
| FR-TASK-003 | Система должна поддерживать приоритеты задач (низкий, средний, высокий, срочный) | High | Да |
| FR-TASK-004 | Система должна позволять указывать срок выполнения задачи | High | Да |
| FR-TASK-005 | Система должна позволять назначать ответственного сотрудника | High | Да |
| FR-TASK-006 | Система должна позволять назначать супервайзера задачи | Medium | Да |
| FR-TASK-007 | Система должна позволять редактировать задачу | High | Да |
| FR-TASK-008 | Система должна позволять удалять задачу (при наличии прав) | Medium | Да |
| FR-TASK-009 | Система должна позволять переназначать исполнителей | High | Да |
| FR-TASK-010 | Система должна поддерживать трекинг времени выполнения задачи | Medium | Нет |
| FR-TASK-011 | Система должна позволять создавать встречную задачу | Medium | Нет |
### 1.4 Статусы задач (FR-STATUS)
| ID | Требование | Приоритет | MVP |
|----|------------|-----------|-----|
| FR-STATUS-001 | Система должна поддерживать статус "Новая" | High | Да |
| FR-STATUS-002 | Система должна поддерживать статус "В работе" | High | Да |
| FR-STATUS-003 | Система должна поддерживать статус "Ожидает" | High | Да |
| FR-STATUS-004 | Система должна поддерживать статус "Выполнена" | High | Да |
| FR-STATUS-005 | Система должна поддерживать статус "Пауза" | Medium | Да |
| FR-STATUS-006 | Система должна поддерживать статус "Отменена" | Medium | Да |
| FR-STATUS-007 | Сотрудник должен иметь возможность менять статус своих задач | High | Да |
### 1.5 Уведомления (FR-NOTIFY)
| ID | Требование | Приоритет | MVP |
|----|------------|-----------|-----|
| FR-NOTIFY-001 | Система должна уведомлять сотрудника о назначении новой задачи (push) | High | Да |
| FR-NOTIFY-002 | Система должна уведомлять менеджера о завершении задачи | High | Да |
| FR-NOTIFY-003 | Система должна отправлять напоминания о приближении срока выполнения | Medium | Да |
| FR-NOTIFY-004 | Система должна поддерживать настройку типов уведомлений для пользователя | Low | Нет |
### 1.6 Комментарии и вложения (FR-ATTACH)
| ID | Требование | Приоритет | MVP |
|----|------------|-----------|-----|
| FR-ATTACH-001 | Система должна позволять добавлять комментарии к задачам | High | Да |
| FR-ATTACH-002 | Система должна позволять прикреплять фотографии к задачам | High | Да |
| FR-ATTACH-003 | Система должна позволять прикреплять файлы к задачам | Medium | Да |
| FR-ATTACH-004 | Система должна сохранять историю изменений задачи | Medium | Да |
### 1.7 Поиск и фильтрация (FR-SEARCH)
| ID | Требование | Приоритет | MVP |
|----|------------|-----------|-----|
| FR-SEARCH-001 | Система должна обеспечивать поиск задач по названию | High | Да |
| FR-SEARCH-002 | Система должна обеспечивать поиск задач по описанию | Medium | Да |
| FR-SEARCH-003 | Система должна обеспечивать фильтрацию по статусу | High | Да |
| FR-SEARCH-004 | Система должна обеспечивать фильтрацию по приоритету | High | Да |
| FR-SEARCH-005 | Система должна обеспечивать фильтрацию по сотруднику | High | Да |
| FR-SEARCH-006 | Система должна обеспечивать фильтрацию по дате выполнения | Medium | Да |
| FR-SEARCH-007 | Система должна обеспечивать фильтрацию по типу задачи | Medium | Да |
### 1.8 Отчеты и аналитика (FR-REPORT)
| ID | Требование | Приоритет | MVP |
|----|------------|-----------|-----|
| FR-REPORT-001 | Система должна предоставлять отчет по выполненным задачам за период | Medium | Нет |
| FR-REPORT-002 | Система должна предоставлять статистику по сотрудникам | Medium | Нет |
| FR-REPORT-003 | Система должна предоставлять статистику по типам задач | Medium | Нет |
| FR-REPORT-004 | Система должна предоставлять процент просроченных задач | Medium | Нет |
### 1.9 Интеграции (FR-INT)
| ID | Требование | Приоритет | MVP |
|----|------------|-----------|-----|
| FR-INT-001 | Система должна получать бронирования из PMS с информацией о гостях и номерах | High | Да |
| FR-INT-002 | Система должна получать статус номера из PMS | High | Да |
| FR-INT-003 | Система должна изменять статус номера в PMS | High | Да |
| FR-INT-004 | Система должна взаимодействовать с Консьерж Resonline | Medium | Нет |
| FR-INT-005 | Система должна поддерживать подключение произвольных адаптеров | High | Да |
| FR-INT-006 | Адаптер должен регистрировать поддерживаемые типы событий | High | Да |
### 1.10 Управление связями между системами (FR-CONN)
| ID | Требование | Приоритет | MVP |
|----|------------|-----------|-----|
| FR-CONN-001 | Система должна позволять настраивать маршрутизацию событий между адаптерами | High | Да |
| FR-CONN-002 | Система должна предоставлять интерфейс для настройки связей (событие из А -> Б, В, Г) | High | Да |
| FR-CONN-003 | Система должна хранить реестр подключенных адаптеров и их возможностей | High | Да |
### 1.11 Планировщик задач (FR-SCHED)
| ID | Требование | Приоритет | MVP |
|----|------------|-----------|-----|
| FR-SCHED-001 | Система должна поддерживать создание регулярных/периодических задач | Medium | Нет |
| FR-SCHED-002 | Система должна автоматически создавать задачи по расписанию | Medium | Нет |
### 1.12 Модуль мероприятий (FR-EVENT)
| ID | Требование | Приоритет | MVP |
|----|------------|-----------|-----|
| FR-EVENT-001 | Система должна позволять описывать мероприятие | Low | Нет |
| FR-EVENT-002 | Система должна автоматически декомпозировать мероприятие на задачи | Low | Нет |
| FR-EVENT-003 | Система должна поддерживать массовое создание связанных задач | Low | Нет |
| FR-EVENT-004 | Система должна формировать документ "функшн" на основе данных мероприятия | Low | Нет |
### 1.13 Специализированный интерфейс горничных (FR-HOUSE)
| ID | Требование | Приоритет | MVP |
|----|------------|-----------|-----|
| FR-HOUSE-001 | Система должна предоставлять интерфейс с пошаговым процессом уборки | Medium | Нет |
| FR-HOUSE-002 | Система должна требовать фото до и после уборки | Medium | Нет |
| FR-HOUSE-003 | Система должна фиксировать время начала и окончания уборки | Medium | Нет |
### 1.14 Интерфейс для гостей (FR-GUEST)
| ID | Требование | Приоритет | MVP |
|----|------------|-----------|-----|
| FR-GUEST-001 | Система должна предоставлять интерфейс для гостей (бот/веб) | Low | Нет |
| FR-GUEST-002 | Система должна предоставлять набор базовых услуг с кнопками | Low | Нет |
| FR-GUEST-003 | Система должна автоматически создавать задачи из запросов гостей | Low | Нет |
---
## 2. Нефункциональные требования (NFR)
### 2.1 Производительность (NFR-PERF)
| ID | Требование | Значение |
|----|------------|----------|
| NFR-PERF-001 | Время отклика API при стандартной нагрузке | < 500ms |
| NFR-PERF-002 | Время отклика API для критических операций | < 200ms |
| NFR-PERF-003 | Прогнозируемое количество пользователей на отель | 20-50 |
| NFR-PERF-004 | Одновременных подключений на отель | до 100 |
| NFR-PERF-005 | Пропускная способность системы | 1000 задач/час на отель |
### 2.2 Доступность (NFR-AVAIL)
| ID | Требование | Значение |
|----|------------|----------|
| NFR-AVAIL-001 | Доступность системы (SLA) | 99.5% |
| NFR-AVAIL-002 | Допустимое время простоя в месяц | < 3.6 часа |
| NFR-AVAIL-003 | RTO (Recovery Time Objective) | 1 час |
| NFR-AVAIL-004 | RPO (Recovery Point Objective) | 15 минут |
### 2.3 Масштабируемость (NFR-SCALE)
| ID | Требование | Описание |
|----|------------|----------|
| NFR-SCALE-001 | Система должна поддерживать горизонтальное масштабирование сервисов | Микросервисная архитектура |
| NFR-SCALE-002 | Система должна поддерживать добавление новых адаптеров без изменения ядра | Plugin architecture |
| NFR-SCALE-003 | Система должна поддерживать мультитенантность | Несколько отелей на одной инсталляции |
### 2.4 Безопасность (NFR-SEC)
| ID | Требование | Описание |
|----|------------|----------|
| NFR-SEC-001 | Все API-запросы должны быть аутентифицированы | JWT/OAuth2 |
| NFR-SEC-002 | Передача данных должна быть зашифрована | HTTPS/TLS 1.3 |
| NFR-SEC-003 | Пароли должны храниться в зашифрованном виде | bcrypt/argon2 |
| NFR-SEC-004 | Система должна вести журнал аудита | audit-service |
| NFR-SEC-005 | Система должна поддерживать RBAC | Ролевая модель доступа |
| NFR-SEC-006 | Система должна защищать от основных OWASP уязвимостей | SQL injection, XSS, CSRF |
### 2.5 Совместимость (NFR-COMPAT)
| ID | Требование | Описание |
|----|------------|----------|
| NFR-COMPAT-001 | Веб-интерфейс должен корректно работать в современных браузерах | Chrome, Firefox, Safari, Edge (последние 2 версии) |
| NFR-COMPAT-002 | Веб-интерфейс должен быть адаптивным | Mobile-first design |
| NFR-COMPAT-003 | Мобильное приложение должно поддерживать Android | Android 8.0+ |
| NFR-COMPAT-004 | Мобильное приложение должно поддерживать iOS | iOS 14+ |
### 2.6 Поддерживаемость (NFR-MAINT)
| ID | Требование | Описание |
|----|------------|----------|
| NFR-MAINT-001 | Код должен быть покрыт unit-тестами | > 70% coverage |
| NFR-MAINT-002 | Система должна предоставлять метрики для мониторинга | Prometheus-compatible |
| NFR-MAINT-003 | Система должна предоставлять структурированные логи | JSON format |
| NFR-MAINT-004 | Документация API должна быть в формате OpenAPI | Swagger/OpenAPI 3.0 |
| NFR-MAINT-005 | Модульная структура для возможности продажи отдельных модулей | Loosely coupled services |
### 2.7 Локализация (NFR-L10N)
| ID | Требование | Описание |
|----|------------|----------|
| NFR-L10N-001 | Интерфейс должен поддерживать русский язык | Primary |
| NFR-L10N-002 | Интерфейс должен поддерживать английский язык | Secondary |
| NFR-L10N-003 | Система должна поддерживать добавление новых языков | i18n ready |
### 2.8 Инфраструктура (NFR-INFRA)
| ID | Требование | Технология |
|----|------------|------------|
| NFR-INFRA-001 | База данных | PostgreSQL |
| NFR-INFRA-002 | Кэширование | Redis |
| NFR-INFRA-003 | Файловое хранилище | S3-compatible |
| NFR-INFRA-004 | Очередь сообщений | Apache Kafka |
| NFR-INFRA-005 | Backend-сервисы | Python |
| NFR-INFRA-006 | Web Admin Frontend | TypeScript, React |
| NFR-INFRA-007 | API Gateway | REST API, gRPC, WebSocket |
### 2.9 Надежность доставки сообщений (NFR-MSG)
| ID | Требование | Описание |
|----|------------|----------|
| NFR-MSG-001 | Гарантия доставки сообщений | At-least-once delivery |
| NFR-MSG-002 | Сообщения должны сохраняться при недоступности получателя | Kafka persistence |
| NFR-MSG-003 | Система должна поддерживать retry-механизм | Exponential backoff |
| NFR-MSG-004 | Система должна поддерживать dead-letter queue | DLQ для необработанных сообщений |
---
## 3. Глоссарий
| Термин | Описание |
|--------|----------|
| PMS | Property Management System - система управления отелем |
| Адаптер | Компонент, обеспечивающий интеграцию с внешней системой |
| Событие | Стандартизированное сообщение, передаваемое между системами через Kafka |
| Задача | Единица работы в системе с назначенным исполнителем и статусом |
| Функшн | Документ с описанием мероприятия и задач для служб отеля |
| Хаускипинг | Служба уборки номеров |
| Хаусмен | Сотрудник, отвечающий за перестановку мебели и оборудования |