Пункты проката спортивного инвентаря обслуживают физлиц, предоставляя оборудование на ограниченный срок по тарифу (почасово/посуточно/пакеты). В отсутствие автоматизации типичны проблемы:
Цель: обеспечить оперативный и достоверный учёт аренды, сократить ошибки и время обслуживания клиента, повысить управляемость запасом и выручкой.
Задачи:
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
В учебной версии система автономна, без интеграций с эквайрингом или складскими WMS. Внешние интерфейсы ограничены файловыми операциями (импорт/экспорт CSV/JSON). Возможное расширение — подключение оплат и печати фискальных чеков (за рамками текущей практики).
flowchart LR
ext1[(CSV/JSON импорт)]
ext2[(CSV/JSON экспорт)]
subgraph System[УЧЕБНАЯ СИСТЕМА ПРОКАТА]
UI[UI/Админ-панель]
Core[Модуль аренды и расчёта тарифов]
Repo[(Локальное хранилище / БД)]
end
ext1 --> UI --> Core --> Repo
Repo --> ext2
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
}
| Риск | Мера |
|---|---|
| Некорректный тарифный расчёт при пограничных интервалах | Тест-кейсы на границах (59/60/61 мин; 23:59/00:01) |
| Утери данных при закрытии программы | Автосохранение и валидация |
| Путаница статусов при ТО | Запрет выдачи, если статус ≠ «доступен» |
| Ошибка идентификации клиента | Обязательные поля и форматные проверки |