name: stock-concurrency description: | Конкурентные операции со складом на стороне ПРИЁМОК (Supply.Post). RetailSale.Post уже под Serializable (см. stock-invariant-deep step09), а Supply.Post исторически шёл на дефолтной изоляции — отсюда потеря обновлений Stock и гонка в расчёте скользящего среднего Cost при одновременном проведении. Проверяем главный инвариант Stock.Quantity == Σ StockMovement.Quantity под нагрузкой: - две РАЗНЫЕ приёмки одного товара проводятся одновременно, - одна и та же приёмка проводится дважды одновременно (double-post). preconditions: reset_db: true smoke_login_super_admin: true steps: - id: step01_bootstrap title: "Орг + товар + стартовая приёмка qty=5 @100 (Stock=5, Cost=100)" - id: step02_concurrent_distinct_supplies title: "Две разные приёмки (10@100 и 10@120) одновременно → Stock=25, инвариант, Cost=108" - id: step03_double_post_same_supply title: "Двойное проведение ОДНОЙ приёмки (7@100) одновременно → применяется один раз" - id: step04_final_invariant title: "Финальный инвариант Stock == Σ StockMovement"