Перейти к содержанию

Статусы карт

Полный справочник статусов топливных карт в системе 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()

Связанная документация