Задача разработки: [INVENTORY-412] Реализация метода PATCH /api/v1/fridge/scan-tag (Поддержка режимов заморозки)

Карточка Jira Task для спринта: Атомарная доработка складского контура

Published

July 3, 2026

Общая информация

  • Эпик: [BPDS-CORE] Разработка транзакционного кулинарного контура
  • Домен: INVENTORY (Склад и Транзакционный учет)
  • ID Задачи: INVENTORY-412
  • Исполнитель: Назначается
  • Статус: Реф refinement / Готов к разработке Текущий Статус: Ready for Dev

Контекст и Ссылки

Данная задача сфокусирована на обновлении существующего метода обработки смарт-меток. Необходимо добавить поддержку переменной калорийности и термодинамических режимов хранения (полка против морозилки).

Ссылки на документацию проекта:


Бизнес-требования (User Story & Use Cases)

Разработчику необходимо опираться на бизнес-логику, зафиксированную в Use Cases внутри архитектурной статьи метода:

  • User Story: Я, как пользователь семейного или офис-аккаунта, хочу маркировать контейнеры флагом «Заморозка», чтобы система автоматически пересчитывала срок годности (радиоактивного распада) еды с учетом температурного коэффициента и присылала уведомления вовремя, предотвращая порчу.
  • Use Case (Глубокая заморозка): Пользователь сканирует многоразовый QR-код foodapp://container/c-772-alpha, выбирает режим storage_mode: "FROZEN". Система запрашивает базовый период жизни блюда (например, 72 часа для Борща) и умножает его на внутренний коэффициент заморозки домена MDM (\(\times 10\)). Итоговый expires_at сдвигается на 30 дней.

Техническое задание для Разработчика

В рамках данной задачи необходимо реализовать следующие изменения в микросервисе warehouse-fridge-ops:

1. Слой Базы Данных (PostgreSQL / Alembic)

  • Написать скрипт миграции Alembic для таблицы fridge_containers.
  • Добавить новое поле storage_mode типа VARCHAR(20) или ENUM с допустимыми значениями CHILLED, FROZEN. По дефолту выставить CHILLED.
  • Добавить поле updated_at с автоматическим обновлением по NOW().

2. Слой Валидации данных (FastAPI / Pydantic)

  • Обновить Pydantic-модель запроса ContainerTagRequest, добавив поле storage_mode.
  • Обеспечить строгую валидацию ENUM. При передаче некорректного режима возвращать HTTP 422 Unprocessable Entity (структуру ошибки см. в разделе Исключений документации метода).

3. Слой Бизнес-логики (Интеграция с MDM)

  • Внедрить логику расчета: если storage_mode == "FROZEN", применять повышающий временной коэффициент, извлекаемый из кэша мастер-данных.
  • Реализовать проверку мультитентовости: если контейнер уже занят другой группой (home_group_id), выбрасывать кастомное исключение ERR-CONTAINER-OWNED-BY-OTHER-GROUP со статусом HTTP 403 Forbidden.

4. Транспортный слой (Kafka)

  • Обновить структуру payload сообщения, отправляемого в топик bpds.inventory.fridge_item.deducted.
  • Убедиться, что в мета-заголовки (Kafka Headers) корректно прокидываются home_group_id и account_type (HOME/OFFICE) для обеспечения изоляции данных.

Критерии приемки (Definition of Done)

Спецификация для QA Automation (Чек-лист автоматизации)

Автоматизатор тестирования (QA Automation) должен реализовать e2e и компонентные тесты в репозитории автотестов, проверяя следующие граничные условия контракта: