Статусы карт¶
Полный справочник статусов топливных карт в системе FuelProcessing.
Жизненный цикл карты¶
stateDiagram-v2
[*] --> ОжидаетПоставки: Создание в системе
ОжидаетПоставки --> Неактивированная: Поступление от ВИНКа
Неактивированная --> Активирована: Первая активация
Активирована --> Заблокирована: Блокировка
Заблокирована --> Активирована: Разблокировка
Активирована --> Удалена: Удаление
Заблокирована --> Удалена: Удаление
CardStatus — основной статус¶
| Значение | Описание | Возможные действия |
|---|---|---|
ОжидаетПоставки |
Карта заказана, но ещё не получена от ВИНКа | — |
Неактивированная |
Карта получена, но ещё не использовалась | Активация |
Активирована |
Карта активна и используется | Блокировка |
BlockStatus — статусы блокировки¶
Пользовательские блокировки¶
| Статус | Обратный | Описание | Приоритет |
|---|---|---|---|
BlockByUser |
UnblockByUser |
Заблокирована пользователем | 4 |
UnblockByUser |
— | Разблокирована пользователем | — |
Административные блокировки¶
| Статус | Обратный | Описание | Приоритет |
|---|---|---|---|
BlockByAdmin |
UnblockByAdmin |
Заблокирована администратором | 1 |
BlockByManager |
UnblockByManager |
Заблокирована менеджером | 2 |
BlockBySuperUser |
UnblockBySuperUser |
Заблокирована суперпользователем | 3 |
Системные блокировки¶
| Статус | Обратный | Описание | Автоматическая |
|---|---|---|---|
BlockBadBalanceContract |
UnblockBadBalanceContract |
Недостаточный баланс контракта | |
BlockBadBalanceByDriver |
UnblockBadBalanceByDriver |
Превышен лимит владельца | |
BlockVink |
UnblockVink |
Заблокирована ВИНКом | |
BlockedWhenIssuing |
— | Заблокирована при выдаче | |
BlockedWhenCardBooked |
— | Бронь карты | |
DeleteCard |
— | Карта удалена |
Приоритеты блокировок¶
При применении статусов действует строгий приоритет (от высшего к низшему):
1. Администраторская блокировка (BlockByAdmin)
↓
2. Менеджерская блокировка (BlockByManager)
↓
3. Блокировка суперпользователем (BlockBySuperUser)
↓
4. Пользовательская блокировка (BlockByUser)
↓
5. Системные блокировки (по ситуации)
Правила переходов¶
Разрешённые переходы¶
| Из | В | Условие |
|---|---|---|
| Любой | DeleteCard |
Удаление карты |
| Любой | BlockedWhenIssuing |
Выдача карты |
| Активна | BlockByUser |
Пользователь |
| Активна | BlockByAdmin |
Администратор |
| Заблокирована | UnblockByUser |
Пользователь (если не наложена админом) |
| Заблокирована | UnblockByAdmin |
Администратор |
Игнорируемые изменения¶
Некоторые комбинации игнорируются системой:
- Попытка разблокировать карту, заблокированную администратором, пользователем
- Повторная установка того же статуса
- Конфликтующие комбинации
CardStatusHelper¶
Вспомогательный класс для работы со статусами.
// Проверка необходимости применения админ-блокировки
bool ShouldApplyAdminBlock(Card card, BlockStatus newStatus)
// Проверка сохранения админ-блокировки
bool IsAdminBlockPersistent(BlockStatus currentStatus)
// Проверка игнорирования изменения
bool ShouldIgnoreStatusChange(Card card, BlockStatus newStatus)
// Разрешён ли переход
bool IsAllowedStatusTransition(BlockStatus from, BlockStatus to)
Статус активности¶
Комбинированный статус на основе CardStatus и BlockStatus:
public bool IsActiveStatus(bool isActive, BlockStatus status, bool isForce)
{
// Бизнес-логика определения статуса активности
}
UI отображение¶
Цвета по статусу¶
| Статус | Цвет | Иконка |
|---|---|---|
| Активна | Зелёный | |
| Заблокирована пользователем | Жёлтый | |
| Заблокирована администратором | Красный | |
| Удалена | Серый |
Диагностика проблем¶
Карта неактивна despite Unblock¶
Проверьте:
1. Есть ли другие активные блокировки с более высоким приоритетом
2. Состояние CardStatus (может быть Удалена)
3. Состояние контракта и баланса
Статус не применяется¶
Проверьте:
1. Правильность перехода через IsAllowedStatusTransition()
2. Нет ли игнорирования через ShouldIgnoreStatusChange()
Связанная документация¶
- Domain Layer (Core) — доменные модели
- Модули сайта — модули управления картами