`stock_write_offs` — utilizatsiya akti (§8.6)
Tavsif
Qabul mezonlari (DoD)
5 / 5 bajarildi
-
2 ta nosoz tovar (tannarx 100 000) utilizatsiya qilinganda `defective` qoldiq −2 bo'ladi va `write_off` movement(lar) yoziladi
qa-ep-04-t06-s02 · 1 о аввал
-
Xarajat summasi chiqim qatlamlarining `Σ total_cost` iga teng (`qty × unit_cost` emas)
qa-ep-04-t06-s02 · 1 о аввал
-
`reason` siz akt yaratishga urinish 400 beradi
qa-ep-04-t06-s02 · 1 о аввал
-
Qoldiqdan ko'p chiqarishga urinishda rollback bo'ladi va akt `draft` qoladi
qa-ep-04-t06-s02 · 1 о аввал
-
`ExpensePort` chaqirilgan (mock bilan tasdiqlanadi), no-op implementatsiya 08_finance uchun TODO bilan belgilangan
qa-ep-04-t06-s02 · 1 о аввал
O'zgargan fayllar
16 ta
-
modified
src/test/java/uz/erpbom/warehouse/controller/StockWriteOffConfirmedPostingTest.java -
modified
src/main/java/uz/erpbom/warehouse/service/StockWriteOffService.java -
modified
src/main/java/uz/erpbom/warehouse/service/NoopExpensePort.java -
modified
src/main/java/uz/erpbom/warehouse/service/ExpensePort.java -
modified
src/main/java/uz/erpbom/warehouse/service/ExpenseCommand.java -
modified
src/main/java/uz/erpbom/warehouse/repository/StockWriteOffRepository.java -
modified
src/main/java/uz/erpbom/warehouse/repository/StockWriteOffLineRepository.java -
modified
src/main/java/uz/erpbom/warehouse/mapper/StockWriteOffMapper.java -
modified
src/main/java/uz/erpbom/warehouse/entity/StockWriteOffLine.java -
modified
src/main/java/uz/erpbom/warehouse/entity/StockWriteOff.java -
modified
src/main/java/uz/erpbom/warehouse/dto/StockWriteOffUpdateRequest.java -
modified
src/main/java/uz/erpbom/warehouse/dto/StockWriteOffResponse.java -
modified
src/main/java/uz/erpbom/warehouse/dto/StockWriteOffLineResponse.java -
modified
src/main/java/uz/erpbom/warehouse/dto/StockWriteOffLineInput.java -
modified
src/main/java/uz/erpbom/warehouse/dto/StockWriteOffCreateRequest.java -
modified
src/main/java/uz/erpbom/warehouse/controller/StockWriteOffController.java
Izoh qoldirish
Tarix
20 yozuv
-
✎
finalize-ep-04 yangiladi
Yangilandi: commit_sha, pr_url
-
⇄
qa-ep-04-t06-s02 statusni o'zgartirdi Review → Bajarildi
-
💬
qa-ep-04-t06-s02 izoh qoldirdi
QA (qa-EP-04-T06-S02) — tekshirildi, QABUL QILINDI. Testlar: StockWriteOffConfirmedPostingTest — Tests run: 6, Failures: 0, Errors: 0 (Testcontainers postgres:16). MUTATSIYA TEKSHIRUVI (5 mutant, hammasi o'ldi): - M1 `consumption.totalCost()` -> `qty x unitCost` (2dp): O'LDI — `expected: 10.00 but was: 9.99`. Coderning uch qatorli ssenariysi (partiya total_cost=10.00, unit_cost=3.3333, 3 x 1 dona chiqim -> 3.33+3.34+3.33) HAQIQATAN diskriminatsion; rule 42 (FP-21) StockOutPoster.java:88-98 da to'g'ri: oxirgi chiqim qolgan BUTUN remaining_cost ni oladi. - M2 ExpensePort chaqiruvi olib tashlandi: O'LDI — "Wanted but not invoked ... zero interactions". AC2495 mock'ni test qilmaydi: ArgumentCaptor bilan amount (10.00), writeOffId va warehouseId QIYMATLARI tekshiriladi + `isNotEqualByComparingTo("9.99")`. - M3 `@NotBlank reason` olib tashlandi: O'LDI — 400 o'rniga 500. - M5 `orderedLines = List.of()` (posting o'tkazib yuborildi): O'LDI — 4 test yiqildi. - M4 `@Transactional` `confirm` dan olib tashlandi: dastlab OMON QOLDI (5/5 yashil) — TOPILMA. TOPILMA VA UNING YOPILISHI (test kuchaytirildi, ishlab chiqarish kodi TEGILMADI): AC2494 ning eski testi bitta qatorli (qty 5 > qoldiq 1) bo'lgani uchun rollback'ni ISBOTLAMASDI — postOut yiqilgunicha hech narsa yozilmagan edi, shuning uchun `@Transactional` siz ham yashil qolardi (StockPostingService TransactionTemplate PROPAGATION_REQUIRED — tashqi chegara bo'lmasa har qator ALOHIDA commit bo'ladi). Qo'shildi (commit 81baae5, faqat test fayli): - `confirmRollsBackAlreadyPostedLineWhenLaterLineLacksStock` — 2 qatorli hujjat, 1-qator muvaffaqiyatli post bo'lgach 2-qator STOCK_INSUFFICIENT bilan yiqiladi; stock.qty_on_hand, stock_batches.qty_remaining/remaining_cost, movement sanog'i va hujjat holati (draft) — HAMMASI orqaga qaytgani tekshiriladi. Shu test bilan M4 endi O'LADI (`expected: 2.0000 but was: 1.0000`). - AC2491 endi movement SANOG'I emas, mazmunini ham tekshiradi: Sigma qty = 2.0000, Sigma total_cost = 200000.00. Ishlab chiqarish kodi to'g'ri edi (@Transactional joyida) — faqat test qamrovi zaif edi. KONTRAKT (openapi/v1/warehouse.yaml, tegilmadi): - `status` HECH BIR request DTO'da yo'q (Create/Update) — yagona o'tish POST /confirm. OK. - StockWriteOffResponse 13 maydon aynan mos; StockWriteOffLineResponse (variant_name/variant_code readOnly) mos; LineInput da unitCost ATAYLAB yo'q. Xatolik kodlari: 400 VALIDATION_ERROR, 409 STOCK_INSUFFICIENT / INVALID_STATUS_TRANSITION, 403 — mos. CROSS-CUTTING: (1) har servis metodi @Transactional, o'qishlar readOnly=true; (2) tenant_id/schema almashtirish YO'Q, organization_id ombordan qayta hisoblanadi (qoida 16); (4) ExpensePort ICHKI DB yozuvi forward-ref'i — §8.6 p.3.d "shu tranzaksiya qismi" degani uchun outbox TO'G'RI ishlatilmagan, tashqi broker yo'q; NoopExpensePort da aniq `TODO(08_finance)` bor; (6) qty setScale(4), xarajat 2dp; (7) soft-delete faqat draft'da, fizik DELETE yo'q (qator almashtirish PUT ichida — bu bog'liq qator, hujjat emas); (8) log'da token/parol yo'q. SPEC DRIFT (bloklamaydi, PM e'tibori uchun): 03_warehouse.md §8.6 p.3.d va §2.11 izohi hali "SUM(qty x unit_cost)" deb yozilgan, §5 qoida 42 FP-21 (2026-08-09) esa harakat qatoridagi ajratilgan `stock_movements.total_cost` ni talab qiladi. Kod yangi qoidaga (va AC2492 ga) amal qilgan — TO'G'RI; eski §8.6/§2.11 matni FP-21 dan keyin yangilanmay qolgan. docs tuzatilishi §5 sikli orqali PM zimmasida.
-
✓
qa-ep-04-t06-s02 qabul mezonini belgiladi
✓ `ExpensePort` chaqirilgan (mock bilan tasdiqlanadi), no-op implementatsiya 08_finance uchun TODO bilan belgilangan
-
✓
qa-ep-04-t06-s02 qabul mezonini belgiladi
✓ Qoldiqdan ko'p chiqarishga urinishda rollback bo'ladi va akt `draft` qoladi
-
✓
qa-ep-04-t06-s02 qabul mezonini belgiladi
✓ `reason` siz akt yaratishga urinish 400 beradi
-
✓
qa-ep-04-t06-s02 qabul mezonini belgiladi
✓ Xarajat summasi chiqim qatlamlarining `Σ total_cost` iga teng (`qty × unit_cost` emas)
-
✓
qa-ep-04-t06-s02 qabul mezonini belgiladi
✓ 2 ta nosoz tovar (tannarx 100 000) utilizatsiya qilinganda `defective` qoldiq −2 bo'ladi va `write_off` movement(lar) yoziladi
-
⇄
coder-ep-04-t06-s02 statusni o'zgartirdi Ishlanyapti → Review
-
✓
coder-ep-04-t06-s02 qabul mezonini belgiladi
✓ `ExpensePort` chaqirilgan (mock bilan tasdiqlanadi), no-op implementatsiya 08_finance uchun TODO bilan belgilangan
-
✓
coder-ep-04-t06-s02 qabul mezonini belgiladi
✓ Qoldiqdan ko'p chiqarishga urinishda rollback bo'ladi va akt `draft` qoladi
-
✓
coder-ep-04-t06-s02 qabul mezonini belgiladi
✓ `reason` siz akt yaratishga urinish 400 beradi
-
✓
coder-ep-04-t06-s02 qabul mezonini belgiladi
✓ Xarajat summasi chiqim qatlamlarining `Σ total_cost` iga teng (`qty × unit_cost` emas)
-
✓
coder-ep-04-t06-s02 qabul mezonini belgiladi
✓ 2 ta nosoz tovar (tannarx 100 000) utilizatsiya qilinganda `defective` qoldiq −2 bo'ladi va `write_off` movement(lar) yoziladi
-
✎
coder-ep-04-t06-s02 yangiladi
Yangilandi: branch, commit_sha
-
📄
coder-ep-04-t06-s02 fayllarni qayd etdi
16 ta fayl qayd etildi
-
⇄
coder-ep-04-t06-s02 statusni o'zgartirdi Backlog → Ishlanyapti
Agent ishni boshladi
-
⚑
coder-ep-04-t06-s02 ishga oldi
-
🔗
pm-agent bog'liqlik qo'shdi
→ EP-04-T06-S01
-
✦
pm-agent yaratdi
`stock_write_offs` — utilizatsiya akti (§8.6)
Ma'lumot
- Agent
- coder-ep-04-t06-s02
- Olingan
- 1 о аввал
- Boshlandi
- 21.08.2026 01:45
- Tugadi
- 21.08.2026 02:17
- Baho
- 5 soat
- Spec
- erp/docs/modules/03_warehouse.md#8.6
- Branch
- feat/EP-04-erpbom-backend
- Commit
- b6685d9b9b72
Bog'liqliklar
Bundan oldin tugashi kerak
Buni kutayotganlar
Agent uchun
Bu ishni AI agent quyidagicha oladi:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-04-T06-S02/claim \ -H "X-Agent: backend-dev-1"
Tugatgach:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-04-T06-S02/status \
-H "X-Agent: backend-dev-1" \
-H "Content-Type: application/json" \
-d '{"status":"review","note":"..."}'