name: stage-loss
description: |
  Loss (Списание) на test.admin.food-market.kz. UI/API одинаковая поверхность.
  Сценарии: создать draft, обновить (после фикса EF8 nav-bug), провести
  (Stock минус, StockMovement тип Loss), отказ списания больше остатка,
  отмена проведения, multi-tenant изоляция, валидация LossReason.

preconditions:
  reset_db: false
  smoke_login_super_admin: false

steps:
  - id: loss01_setup
    title: 2 org + продукт + начальный остаток через Enter (qty=100)
  - id: loss02_create_draft
    title: POST /api/inventory/losses → 201 с reason=Defect(0), 1 строка
  - id: loss03_update_draft
    title: PUT — заменить qty + reason; пересчёт Total; 204 (фикс EF8)
  - id: loss04_post
    title: POST /post → Stock -= qty; StockMovement type=Loss с UnitCost; Status=Posted
  - id: loss05_post_more_than_stock
    title: Списание больше текущего остатка → 400/409 (Stock не уходит в минус)
  - id: loss06_unpost
    title: POST /unpost → Stock += qty обратно; Status=Draft
  - id: loss07_reason_invalid
    title: POST с reason=99999 → 400; reason=Other(99) → 201
  - id: loss08_multi_tenant_isolation
    title: Org B не видит loss org A (GET/PUT/POST → 404)
