# E2E report: stock-concurrency Запущен: 2026-05-26T07:02:47.787Z Длительность: 4.9с **Итог:** 4 ✓ / 0 ✗ / 0 ⚠ / 0 ◯ (всего 4) ## ✓ Step step01_bootstrap: Орг + товар + стартовая приёмка qty=5 @100 (Stock=5, Cost=100) Длительность: 2212мс | Тип | Проверка | Результат | |---|---|---| | api | Bootstrap product создан | ✓ df50a87d-0f25-4fb0-9e35-d5e1077e5fb9 | | db | Stock.Quantity == Σ StockMovement (invariant) | ✓ stock=5 sum=5 | | db | Стартовый Stock == 5 | ✓ stock=5 | | db | Стартовый Cost == 100 | ✓ cost=100 | ## ✓ Step step02_concurrent_distinct_supplies: Две разные приёмки (10@100 и 10@120) одновременно → Stock=25, инвариант, Cost=108 Длительность: 873мс | Тип | Проверка | Результат | |---|---|---| | api | Две приёмки-черновика созданы | ✓ | | db | Stock.Quantity == Σ StockMovement (invariant) | ✓ stock=25 sum=25 | | db | Stock == 25 (5 + 10 + 10, без потери приёмки) | ✓ stock=25 sum=25 statuses=204,409 | | db | Cost == 108 (взвешенное среднее по всем трём приёмкам) | ✓ cost=108 | ## ✓ Step step03_double_post_same_supply: Двойное проведение ОДНОЙ приёмки (7@100) одновременно → применяется один раз Длительность: 1373мс | Тип | Проверка | Результат | |---|---|---| | api | Приёмка-черновик 7@100 создана | ✓ | | api | Не более одного успешного проведения | ✓ statuses=204,409 | | db | Stock вырос ровно на 7 (приёмка применена один раз) | ✓ before=25 after=32 | | db | Добавлено ровно одно StockMovement | ✓ +1 movements | | db | Stock.Quantity == Σ StockMovement (invariant) | ✓ stock=32 sum=32 | ## ✓ Step step04_final_invariant: Финальный инвариант Stock == Σ StockMovement Длительность: 415мс | Тип | Проверка | Результат | |---|---|---| | db | Финальный invariant Stock == Σ StockMovement | ✓ stock=32 sum=32 | ## Summary - Passed: 4 - Failed: 0 - Warnings: 0 - Skipped: 0 ## Critical bugs Нет.