# E2E report: stage-transfer

Запущен: 2026-05-29T12:01:34.682Z
Длительность: 8.0с

**Итог:** 7 ✓ / 0 ✗ / 0 ⚠ / 0 ◯ (всего 7)

## ✓ Step tr01_setup: 2 org. У org A — 2 склада + продукт с qty=100 на FromStore.

Длительность: 4909мс

| Тип | Проверка | Результат |
|---|---|---|
| api | Initial Enter on FromStore=100 | ✓ 204 |
| api | Org A: 2 разных склада | ✓ from=dbbc12fa to=905896ae |

## ✓ Step tr02_create_draft: POST /api/inventory/transfers → 201, валидация From==To → 400

Длительность: 635мс

| Тип | Проверка | Результат |
|---|---|---|
| api | From == To → 400 | ✓ 400 {"error":"Склад-отправитель и склад-получатель должны различаться.","field":"toStoreId"} |
| api | POST transfers → 201 | ✓ 201 {"id":"66129efa-b57e-4125-91f4-7d402c4864e0","number":"П-2026-Т-000001","date":"2026-05-29T12:01:39.779Z","status":0,"fromStoreId":"dbbc12fa-b5f5-4a14-94fa-c7697d43fb76","fromStoreName":"Основной  |
| api | Total = 10*30 = 300 | ✓ total=300 |
| api | Status = Draft (0) | ✓ status=0 |

## ✓ Step tr03_update_draft: PUT с заменой строк → 204 (фикс EF8)

Длительность: 353мс

| Тип | Проверка | Результат |
|---|---|---|
| api | PUT transfer → 204 (фикс EF8) | ✓ 204  |
| api | После PUT: total=600 | ✓ total=600 |

## ✓ Step tr04_post_atomic: POST /post → 204; FromStore.qty-=10; ToStore.qty+=10; пара StockMovement [TransferOut+TransferIn]

Длительность: 744мс

| Тип | Проверка | Результат |
|---|---|---|
| api | POST /post → 204 | ✓ 204  |
| api | FromStore -= 20 | ✓ from 100 → 80 |
| api | ToStore += 20 | ✓ to 0 → 20 |
| api | Создано минимум 2 StockMovement: TransferOut + TransferIn | ✓ count=2 hasOut=true hasIn=true types=TransferIn,TransferOut |

## ✓ Step tr05_post_more_than_stock: Если qty > available → 409 с conflicts, движения не создаются

Длительность: 346мс

| Тип | Проверка | Результат |
|---|---|---|
| api | Post с qty > available → 409 | ✓ 409 {"error":"На складе-отправителе недостаточно товара.","lines":[{"productId":"fa017dec-2c78-4e99-b720-81ca224e6ba2","productName":"Tr Prod a 1780056094681","requested":180,"available":80}]} |
| api | Документ failed post НЕ создал orphan-движений | ✓ orphan=false |

## ✓ Step tr06_unpost_no_orphan: POST /unpost → 204; FromStore.qty восстановлен; ToStore.qty -= обратно; обе пары движений «отменены»

Длительность: 710мс

| Тип | Проверка | Результат |
|---|---|---|
| api | POST /unpost → 204 | ✓ 204  |
| api | FromStore += 20 (вернулся) | ✓ from 80 → 100 |
| api | ToStore -= 20 (вернулся) | ✓ to 20 → 0 |
| api | Сумма quantity по всем движениям документа = 0 (нет orphan) | ✓ count=4 sumQty=0 |
| api | После Unpost: Status=Draft, PostedAt=null | ✓ status=0 postedAt=null |

## ✓ Step tr07_multi_tenant_isolation: Org B не видит transfer org A

Длительность: 324мс

| Тип | Проверка | Результат |
|---|---|---|
| api | Org B не видит transfer org A | ✓ total=0 sees=false |
| api | GET чужого id → 404 | ✓ 404 |
| api | POST /post чужого → 404 | ✓ 404 |

## Summary

- Passed: 7
- Failed: 0
- Warnings: 0
- Skipped: 0

## Critical bugs

Нет.
