Методические рекомендации

Учебный кейс: пункт проката спортивного инвентаря

1. Описание предметной области

1.1. Контекст и проблема

Пункты проката спортивного инвентаря обслуживают физлиц, предоставляя оборудование на ограниченный срок по тарифу (почасово/посуточно/пакеты). В отсутствие автоматизации типичны проблемы:

1.2. Цель и задачи автоматизации

Цель: обеспечить оперативный и достоверный учёт аренды, сократить ошибки и время обслуживания клиента, повысить управляемость запасом и выручкой.

Задачи:

1.3. Заинтересованные стороны и потребности

1.4. Основные бизнес-процессы (high-level)

flowchart TB
  %% Узлы
  subgraph BP1[BP1. Приём и выдача]
    A1[Идентификация клиента]
    A2[Выбор инвентаря]
    A3[Проверка доступности]
    A4[Выбор тарифа/скидок]
    A5[Предварительный расчёт]
    A6[Выдача]
    A1 --> A2 --> A3 --> A4 --> A5 --> A6
  end

  subgraph BP2[BP2. Возврат и закрытие]
    B1[Приём инвентаря]
    B2[Фиксация состояния]
    B3[Перерасчёт по факту]
    B4[Доплаты/штрафы]
    B5[Закрытие договора]
    B1 --> B2 --> B3 --> B4 --> B5
  end

  subgraph BP3[BP3. Обслуживание]
    C1[Регистрация заявки ТО/ремонта]
    C2[Статус: на обслуживании]
    C3[Выполнение работ]
    C4[Возврат в пул]
    C1 --> C2 --> C3 --> C4
  end

  subgraph BP4[BP4. Аналитика]
    D1[Формирование отчётов]
    D2{Срезы: период/категория/единица/клиент}
    D1 --> D2
  end
      

1.5. Границы системы и интерфейсы

В учебной версии система автономна, без интеграций с эквайрингом или складскими WMS. Внешние интерфейсы ограничены файловыми операциями (импорт/экспорт CSV/JSON). Возможное расширение — подключение оплат и печати фискальных чеков (за рамками текущей практики).

flowchart LR
  ext1[(CSV/JSON импорт)]
  ext2[(CSV/JSON экспорт)]

  subgraph System[УЧЕБНАЯ СИСТЕМА ПРОКАТА]
    UI[UI/Админ-панель]
    Core[Модуль аренды и расчёта тарифов]
    Repo[(Локальное хранилище / БД)]
  end

  ext1 --> UI --> Core --> Repo
  Repo --> ext2
      

1.6. Ключевые сущности (для последующего проектирования)

erDiagram
  Customer ||--o{ RentalAgreement : "оформляет"
  InventoryItem ||--o{ RentalAgreement : "выдаётся по"
  Tariff ||--o{ RentalAgreement : "расчёт по"
  RentalAgreement ||--o{ Payment : "оплата"
  InventoryItem ||--o{ MaintenanceRecord : "имеет"

  Customer {
    int id PK
    string full_name
    string email
    string phone
    string doc_series
    string doc_number
  }
  InventoryItem {
    int id PK
    string inv_code
    string category
    string condition
    string status
    date last_maintenance_date
  }
  Tariff {
    int id PK
    string type  "hour/day/package"
    decimal base_rate
    string rounding_rules
    string recalculation_rules
  }
  RentalAgreement {
    int id PK
    int customer_id FK
    int item_id FK
    int tariff_id FK
    datetime start_at
    datetime planned_end_at
    datetime actual_end_at
    decimal amount
    decimal penalties
  }
  Payment {
    int id PK
    int rental_id FK
    string method
    decimal amount
    datetime paid_at
  }
  MaintenanceRecord {
    int id PK
    int item_id FK
    date work_date
    string work_type
    string performer
    string comment
  }
      

1.7. Ограничения и допущения

1.8. Показатели эффективности (для оценки результата)

1.9. Риски и меры

Риск-реестр (учебная версия)
Риск Мера
Некорректный тарифный расчёт при пограничных интервалах Тест-кейсы на границах (59/60/61 мин; 23:59/00:01)
Утери данных при закрытии программы Автосохранение и валидация
Путаница статусов при ТО Запрет выдачи, если статус ≠ «доступен»
Ошибка идентификации клиента Обязательные поля и форматные проверки

1.10. Обоснование выбора предметной области (justification)