Sub-task EP-07-T04-S03 Kritik 07_tasks erpbom-backend

F5 WIP yig'ilishi + F7 brak yo'qotishi

Bajarildi
Status:

Tavsif

`good_share = material_out_cost x k / c`; `brak_share = material_out_cost - good_share`; `wip_cost += good_share + labor_cost`. F7: `brak_loss = brak_share + wip_per_unit_before x brak_qty`, `wip_per_unit_before = wip_cost / (shu operatsiyagacha o'tgan soz dona)`; `wip_cost -= wip_per_unit_before x brak_qty`; natija `works.brak_loss_snapshot` ga.

Texnik ko'rsatma

Agent uchun

Precision `numeric(18,2)` (CROSS_CUTTING B). Bo'lishda yaxlitlash qoidasi F6 dagi qoldiq siyosati bilan izchil bo'lsin. `material_cost_snapshot` = `material_out_cost` (butun `claimed_qty` uchun).

Qabul mezonlari (DoD)

4 / 4 bajarildi

  • AC14 raqamli misoli: 4 brom/3 soz, material 32 000 -> `good_share=24 000`, `brak_share=8 000`, ishbay 60 000 -> `wip_cost += 84 000`

    qa-1 · 1 о аввал

  • AC19 misoli: kesish(100+30) -> bukish(0+20) -> payvand(elektrod 5, brak 1 dona) -> `brak_loss = 155`, `wip_cost -= 150`; payvand ishbayi (25) yo'qotishga KIRMAYDI

    qa-1 · 1 о аввал

  • `brak_qty = 0` bo'lganda `brak_loss_snapshot = 0` va `wip_cost` faqat `good_share + labor_cost` ga oshadi

    qa-1 · 1 о аввал

  • Soz donalar `unit_cost` i brak tufayli oshmaydi (AC19)

    qa-1 · 1 о аввал

O'zgargan fayllar

6 ta

  • created src/test/java/uz/erpbom/tasks/controller/WorkReviewWipIntegrationTest.java
  • modified src/test/java/uz/erpbom/tasks/service/WorkReviewServiceAccrualOrderTest.java
  • modified src/test/java/uz/erpbom/tasks/controller/WorkReviewIntegrationTest.java
  • modified src/test/java/uz/erpbom/tasks/controller/WorkReviewAccrualIntegrationTest.java
  • modified src/main/java/uz/erpbom/tasks/service/WorkReviewService.java
  • modified src/main/java/uz/erpbom/tasks/repository/ProductionRunRepository.java

Izoh qoldirish

Tarix

17 yozuv

  • ✎

    finalize-ep-07 yangiladi

    Yangilandi: pr_url

  • ⇄

    qa-1 statusni o'zgartirdi Review → Bajarildi

  • 💬

    qa-1 izoh qoldirdi

    QA (qa-1) — 53fb21e mustaqil tekshirildi, hisobotga tayanilmadi. TESTLAR (o'zim yurgizdim, toza surefire): - uz.erpbom.tasks.** 218/218, 0 failure/0 error - uz.erpbom.employees.** 252/252, 0 failure/0 error - WorkReviewWipIntegrationTest 5/5 (real Testcontainers, @Transactional test emas) - grep -rn MUTANT src/ -> bo'sh; git status -> faqat `A openapi/v1/tasks.yaml` MEZONLAR (raqamni o'zim qayta hisobladim, spec 07_tasks.md §8.1/§6 bilan solishtirdim): - AC3241: material 32 000 -> good_share 24 000, brak_share 8 000, ishbay 60 000, wip_cost += 84 000, brak_loss 8 000 (birinchi op -> wip_per_unit_before=0). §8.1 misoliga AYNAN mos. - AC3242: kesish 130 -> bukish 150 -> payvand terminal brak: brak_loss 155 = brak_share 5 + 150; wip_cost 150 -> 0; labor_cost_snapshot=0 (payvand ishbayi 25 yo'qotishga kirmaydi). F7/Q23 misoliga mos. - AC3243: brak_qty=0 -> brak_loss_snapshot 0.00, wip_cost += 15 000 (good_share+labor). - AC3244: brakli va braksiz ikki run yakunda TENG wip_cost (3000.00). Qiymat saqlanishi kodda konstruktiv: brak_share = material - good_share (mustaqil yaxlitlanmaydi), wip delta + brak_loss == material + labor. Precision: wip_cost/snapshot'lar numeric(18,2), MONEY_SCALE=2 HALF_UP. R8 ATOMIK ROLLBACK (S02 dan qolgan qarz) — TASDIQLANDI, izolyatsiyalangan git worktree'da mutatsiya bilan: Savol: test rostdan rollback'ni isbotlaydimi, yoki yozuv umuman yaratilmaganini tekshiradimi? Javob: ROSTDAN rollback'ni isbotlaydi. - M1: WageAccrualPortImpl.accrue -> @Transactional(REQUIRES_NEW). Test YIQILDI: 'S02 wage_entries qatori ham rollback bo'lishi kerak — expected: 0 but was: 1'. Demak INSERT haqiqatan DB ga yetib borgan (WageAccrualService:174 saveAndFlush) va assert rollback'ni ushlaydi. - M2: StockOutPoster.post -> @Transactional(REQUIRES_NEW). Test YIQILDI: 'S01 material chiqimi rollback bo'lishi kerak — expected: 100.0000 but was: 95.0000'. S02 saveAndFlush butun persistence context'ni flush qilgani uchun S01 ning stock/stock_movements yozuvlari ham S03 gacha DB da bo'ladi -> negativ assert'lar vakuum emas. Kutish >=2500ms assert'i S01/S02 haqiqatan bajarilib, keyin S03 qulfida bloklanganini isbotlaydi. Arifmetika vakuum emasligi ham tekshirildi: M3 (good_share numerator confirmedQty->claimedQty) + M4 (wip_cost'da subtract->add) -> 5 testdan 3 tasi yiqildi (AC3241/3242/3244); AC3243 kutilganidek omon qoldi (brak_qty=0 nol-holat). CROSS-CUTTING (8 band): 1) review() @Transactional (yozuv) ✓ 2) tenant_id/schema almashtirish yo'q ✓ 3) migratsiya yo'q ✓ 4) outbox/broker yo'q — R8 sync ✓ 5) nomlash n/a ✓ 6) precision ✓ 7) fizik DELETE yo'q ✓ 8) log'da token/parol yo'q ✓ Qo'shimcha: qulf tartibi tasks -> stock -> production_runs; production_runs FOR UPDATE faqat shu yerda olinadi -> deadlock sikli yo'q. V24:64 chk_production_runs_required_qty_positive -> nolga bo'lish yo'q. picking task'lar WorkService:167 da claim bosqichida bloklangan -> review'da NULL production_run_id ga bormaydi. SPEC KUZATUVI (S03 nuqsoni EMAS — PM ga doc qarzi): Kod wip_per_unit_before ni production_runs.required_qty ga bo'ladi (WorkReviewService.java:267-268); spec F7 da maxraj 'shu operatsiyagacha o'tgan soz dona'. R20 gating ostida ikkalasi teng, shu sabab qaytarmadim. Lekin spec formulasining o'zi noaniq: agar AYNI operatsiyaning oldingi work'i wip_cost ga hissa qo'shgan bo'lsa (mas. required_qty=2, op2 work A 1 dona tasdiq, work B 1 dona brak), surat o'sha hissani ham o'z ichiga oladi va brak donaga ortiqcha qiymat yoziladi (misolda soz dona tannarxi 1330 o'rniga 1315 — oshmaydi, kamayadi; AC19 buzilmaydi, jami qiymat saqlanadi). Bu holat hech bir testda qamralmagan, chunki mavjud testlarda brak paytida yo wip_cost=0 (AC3244), yo required_qty=1 (AC3242). 07_tasks.md §6 F7 da maxraj aniqlashtirilsa yaxshi bo'lardi. VERDIKT: done.

  • ✓

    qa-1 qabul mezonini belgiladi

    ✓ Soz donalar `unit_cost` i brak tufayli oshmaydi (AC19)

  • ✓

    qa-1 qabul mezonini belgiladi

    ✓ `brak_qty = 0` bo'lganda `brak_loss_snapshot = 0` va `wip_cost` faqat `good_share + labor_cost` ga oshadi

  • ✓

    qa-1 qabul mezonini belgiladi

    ✓ AC19 misoli: kesish(100+30) -> bukish(0+20) -> payvand(elektrod 5, brak 1 dona) -> `brak_loss = 155`, `wip_cost -= 150`; payvand ishbayi (25) yo'qotishga KIRMAYDI

  • ✓

    qa-1 qabul mezonini belgiladi

    ✓ AC14 raqamli misoli: 4 brom/3 soz, material 32 000 -> `good_share=24 000`, `brak_share=8 000`, ishbay 60 000 -> `wip_cost += 84 000`

  • 📄

    unknown-agent fayllarni qayd etdi

    6 ta fayl qayd etildi

  • ⇄

    backend-1 statusni o'zgartirdi Ishlanyapti → Review

  • 💬

    unknown-agent izoh qoldirdi

    F5 (WIP yig ilishi) + F7 (brak yo qotishi) WorkReviewService.review() SEAM S03 sifatida qo shildi. AC3241/3242/3243/3244 = 4/4 met, raqamli misollar (AC14, AC19 zanjiri) aynan spec qiymatlari bilan tasdiqlandi. R8 qarzi yopildi: WorkReviewWipIntegrationTest#wipLockContentionRollsBackMaterialAndWageEntryToo — production_runs qatori tashqi ulanish bilan qulflanadi, review() S01/S02 dan keyin S03 da STOCK_BUSY bilan yiqiladi, wage_entries/stock_movements/production_out hammasi rollback ekani DB darajasida isbotlandi. uz.erpbom.tasks.**: 218/218. uz.erpbom.employees.**: 252/252 (o zim tegmagan modul, mavjud holicha yashil). Commit 53fb21e.

  • ✎

    unknown-agent yangiladi

    Yangilandi: branch, commit_sha

  • ✓

    unknown-agent qabul mezonini belgiladi

    ✓ Soz donalar `unit_cost` i brak tufayli oshmaydi (AC19)

  • ✓

    unknown-agent qabul mezonini belgiladi

    ✓ `brak_qty = 0` bo'lganda `brak_loss_snapshot = 0` va `wip_cost` faqat `good_share + labor_cost` ga oshadi

  • ✓

    unknown-agent qabul mezonini belgiladi

    ✓ AC19 misoli: kesish(100+30) -> bukish(0+20) -> payvand(elektrod 5, brak 1 dona) -> `brak_loss = 155`, `wip_cost -= 150`; payvand ishbayi (25) yo'qotishga KIRMAYDI

  • ✓

    unknown-agent qabul mezonini belgiladi

    ✓ AC14 raqamli misoli: 4 brom/3 soz, material 32 000 -> `good_share=24 000`, `brak_share=8 000`, ishbay 60 000 -> `wip_cost += 84 000`

  • ⇄

    backend-1 statusni o'zgartirdi Backlog → Ishlanyapti

  • ✦

    pm-agent yaratdi

    F5 WIP yig'ilishi + F7 brak yo'qotishi

Ma'lumot

Agent
—
Olingan
—
Boshlandi
25.08.2026 20:28
Tugadi
25.08.2026 21:30
Baho
6 soat
Spec
erp/docs/modules/07_tasks.md#6
Branch
feat/EP-07-erpbom-backend
Commit
53fb21e

Bog'liqliklar

Bundan oldin tugashi kerak

Yo'q — bu ish mustaqil.

Agent uchun

Bu ishni AI agent quyidagicha oladi:

curl -s -X POST https://pmboard.ferp.uz/api/items/EP-07-T04-S03/claim \
  -H "X-Agent: backend-dev-1"

Tugatgach:

curl -s -X POST https://pmboard.ferp.uz/api/items/EP-07-T04-S03/status \
  -H "X-Agent: backend-dev-1" \
  -H "Content-Type: application/json" \
  -d '{"status":"review","note":"..."}'