Sub-task EP-06-T04-S02 Yuqori 04_employees erpbom-backend

Yangi resept versiyasida normativni avto ko'chirish + aktivatsiya to'liqligi (02 qoida 27)

Bajarildi
Status:

Tavsif

02_products qoida 27 / Q32 = A: yangi resept versiyasida **iqtisod avtomatik ko'chadi**. EP-02 buni `piece_rates` uchun `RecipeVersionService.carryOverPieceRates` bilan bajargan; `profession_norms` qismi ATAYLAB qoldirilgan (javadoc 290, 331-qatorlar: "Normativ (`profession_norms`, 04_employees) BU YERDA YO'Q"). Bu subtask: 1. `carryOverProfessionNorms` — mos kelgan operatsiyalar uchun eski versiyaning normativlarini yangi versiya operatsiyalariga (har org-node kesimida) ko'chiradi; 2. `validateActivationComplete` kengaytiriladi — har operatsiya `piece_rates` DAN TASHQARI `profession_norms` ga ham ega bo'lishi shart, aks holda mavjud `409 RECIPE_ACTIVATION_INCOMPLETE`; 3. javadoc'lardagi "04_employees da yo'q" izohlari yangilanadi. 🔴 Ko'chirish 02_products modulining oqimida, lekin egalik shu modulda — cross-modul chaqiruv yo'nalishi mavjud `carryOverPieceRates` bilan bir xil bo'lsin (yangi arxitektura naqshi o'ylab topilmaydi).

Qabul mezonlari (DoD)

4 / 4 bajarildi

  • Yangi resept versiyasi yaratilganda mos operatsiyalarning normativi (har org-node bo'yicha) avtomatik ko'chadi

    qa-ep-06-t04-s02 · 1 о аввал

  • Yangi (mos kelmagan) operatsiya normativsiz qoladi va versiyani aktivlashtirishga urinish `409 RECIPE_ACTIVATION_INCOMPLETE` beradi

    qa-ep-06-t04-s02 · 1 о аввал

  • Faqat `piece_rates` bor, `profession_norms` yo'q operatsiyada ham aktivatsiya 409 beradi (yangi shart)

    qa-ep-06-t04-s02 · 1 о аввал

  • Ikkalasi ham to'liq bo'lganda aktivatsiya 200 va oldingi faol versiya nofaol bo'ladi (EP-02 regressiyasi yashil)

    qa-ep-06-t04-s02 · 1 о аввал

O'zgargan fayllar

6 ta

  • modified src/test/java/uz/erpbom/employees/service/ProfessionNormServiceTest.java
  • modified src/test/java/uz/erpbom/products/controller/RecipeVersionControllerIntegrationTest.java
  • modified src/test/java/uz/erpbom/products/service/RecipeVersionServiceTest.java
  • modified src/main/java/uz/erpbom/employees/repository/ProfessionNormRepository.java
  • modified src/main/java/uz/erpbom/employees/service/ProfessionNormService.java
  • modified src/main/java/uz/erpbom/products/service/RecipeVersionService.java

Izoh qoldirish

Tarix

23 yozuv

  • ✎

    finalize-ep-06 yangiladi

    Yangilandi: commit_sha, pr_url

  • ⇄

    finalize-ep-06 statusni o'zgartirdi Ishlanyapti → Bajarildi

  • ⇄

    finalize-ep-06 statusni o'zgartirdi Bloklangan → Ishlanyapti

  • ⇄

    finalize-ep-06 statusni o'zgartirdi Ishlanyapti → Bloklangan

    FINALIZE EP-06: to'liq backend to'plami QIZIL — 1453 test, 5 failure (ProductVariantOrchestrationIntegrationTest), yakka holda ham takrorlanadi (tartibga bog'liq EMAS). Sabab: T04-S02 validateActivationComplete() ga profession_norms shartini qo'shdi (RecipeVersionService:487), lekin ProductVariantService POST /product-variants ichida resept versiyasini yaratib (:269) DARHOL activate qiladi (:302). Normativni o'sha so'rovda berib bo'lmaydi — variant_operation_id hali yo'q va create kontraktida bunday maydon yo'q. Natija: marshrutli variant yaratish yo'li butunlay yopildi (409 RECIPE_ACTIVATION_INCOMPLETE: "Yangi operatsiya uchun ishbay/normativ kiritilmagan"). Qaror kerak: (a) normativ shartini yaratishdagi avto-aktivatsiyadan chiqarib faqat keyingi qo'lda activate'ga qoldirish, yoki (b) create kontraktiga normativ kiritish. Backend PUSH QILINMADI.

  • ⇄

    finalize-ep-06 statusni o'zgartirdi Bajarildi → Ishlanyapti

  • ⇄

    qa-ep-06-t04-s02 statusni o'zgartirdi Review → Bajarildi

  • 💬

    qa-ep-06-t04-s02 izoh qoldirdi

    QA (qa-EP-06-T04-S02) — c564638 tekshirildi, 4/4 mezon o'tdi. TESTLAR (o'zim yurgizdim, flock ostida, mvn -o -Dtest=...): ProfessionNormServiceTest Tests run: 15, Failures: 0, Errors: 0 RecipeVersionControllerIntegrationTest Tests run: 36, Failures: 0, Errors: 0 (EP-02 regressiyasi yashil) RecipeVersionServiceTest Tests run: 6, Failures: 0, Errors: 0 exit=0 MUTATSIYA TEKSHIRUVI (3 ta buzilish kiritildi, testlar YIQILDI, keyin tiklandi — javap bilan bytecode tasdiqlandi): M1 ProfessionNormService#carryOver — faqat 1-org-node ko'chirilsin: ProfessionNormServiceTest#carryOverCopiesAllActiveOrgNodeNormsToNewOperationAsNewRows FAILED (Expected size: 2 but was: 1) RecipeVersionControllerIntegrationTest#unchangedOperationNames... FAILED => AC2874 'HAR org-node' kesimi haqiqatan tekshiriladi (6 op x 2 node = 12 qator). M2 RecipeVersionService#validateActivationComplete — normativ sharti olib tashlandi: #operationWithPieceRateButWithoutProfessionNormBlocksActivation FAILED (expected: 409 CONFLICT but was: 200 OK) => AC2876 (yangi shart) haqiqatan tekshiriladi. M3 carryOverProfessionNorms — nom bo'yicha moslash o'rniga 'birinchi operatsiya': #newOrRenamedOperationBlocksActivationWithIncompleteConflict FAILED (expected: 0L but was: 1L) => AC2875 moslash kaliti (variant_operations.name) haqiqatan tekshiriladi. Uchala mutatsiya OLDIRILDI; tiklangandan keyin manba git bilan bir xil (git diff bosh), bytecode javap bilan toza. KOD DARAJASIDA: AC2874 RecipeVersionService.java:322-341 carryOverProfessionNorms -> ProfessionNormService.java:214-236 carryOver; manba ProfessionNormRepository#findByVariantOperationIdAndActiveTrue (BARCHA org-node), har qator yangi qator sifatida (organization_id/norm_per_day ko'chadi, set_by_user_id = versiya yaratuvchi). AC2875 Moslash kaliti RecipeVersionService.java:335 previousOperationsByName.get(newOperation.getName()) — carryOverPieceRates:286 bilan AYNAN bir xil; mos kelmasa hech narsa ko'chmaydi -> 409. AC2876 RecipeVersionService.java:403-404: !pieceRate.exists || !professionNorm.existsActive -> BusinessConflictException 'RECIPE_ACTIVATION_INCOMPLETE'. Ikkalasi MUSTAQIL shart. AC2877 #activatingNewVersionAutomaticallyDeactivatesPreviousOne — 200 OK + oldingi versiya active=false (real GET). KONTRAKT: openapi/v1/products.yaml:3263-3278 RecipeActivationConflict — code va message shakli ('Yangi operatsiya uchun ishbay/normativ kiritilmagan: lakash') kod bilan mos, ErrorResponse konverti o'zgarmagan. Drift yo'q. EP-02 TESTLARI ZAIFLASHTIRILMAGAN: diffda BIRORTA assert olib tashlanmagan/bo'shashtirilmagan — faqat insertProfessionNorm(...) seed qo'shilgan; #newVersionCarriesOverUpdatedPieceRate da esa assert KUCHAYTIRILGAN (activateRecipeVersion(...) -> assertThat(...getStatusCode()).isEqualTo(OK)). Qonuniy moslashtirish. CROSS-CUTTING: carryOver @Transactional (create tranzaksiyasiga qo'shiladi -> rollbackda nusxalar ham yo'qoladi); existsActiveByVariantOperationId @Transactional(readOnly=true); fizik DELETE yo'q (retire chaqirilmaydi — eski versiya qiymatlari tarix uchun qoladi, 02 qoida 27 'Eski versiya qiymatlari o'zgarmaydi' bilan MOS); tenant_id yo'q; precision 18,4 saqlangan (test '4.0000'/'6.0000' bilan tasdiqlaydi); migratsiya/token log'i yo'q. !! PM UCHUN TOPILMA (bu bargning mezonidan TASHQARIDA, shuning uchun qaytarilmadi): 02_products qoida 27 oxirgi bandi: 'Ko'chirish auditlanadi: ko'chirilgan qiymatlar ... profession_norm_logs / stavka tarixida ... qayd etiladi — kim, qachon, qaysi versiyadan.' Amalda ko'chirish profession_norm_logs ga YOZILMAYDI (ProfessionNormService.java:214-236) va test buni ataylab tasdiqlaydi (log bo'sh). 'Kim/qachon' qatorning o'zida bor (set_by_user_id + created_at + effective_from), lekin 'qaysi versiyadan' hech qayerda yo'q. Sabab spetsifikatsiyada: 04_employees §2.4a profession_norm_logs sxemasida effective_to MAJBURIY — u 'eski qiymatni yopish' hodisasi uchun, 'yangi qator yaratildi' hodisasi uchun emas. EP-02 ning piece_rates yarmi ham ayni shu bandni bajarmagan (allaqachon done). Ya'ni bu bitta bargning nuqsoni emas, qoida 27 <-> §2.4a ziddiyati — alohida qaror/barg talab qiladi (PM -> spec §5 sikli).

  • ✓

    qa-ep-06-t04-s02 qabul mezonini belgiladi

    ✓ Ikkalasi ham to'liq bo'lganda aktivatsiya 200 va oldingi faol versiya nofaol bo'ladi (EP-02 regressiyasi yashil)

  • ✓

    qa-ep-06-t04-s02 qabul mezonini belgiladi

    ✓ Faqat `piece_rates` bor, `profession_norms` yo'q operatsiyada ham aktivatsiya 409 beradi (yangi shart)

  • ✓

    qa-ep-06-t04-s02 qabul mezonini belgiladi

    ✓ Yangi (mos kelmagan) operatsiya normativsiz qoladi va versiyani aktivlashtirishga urinish `409 RECIPE_ACTIVATION_INCOMPLETE` beradi

  • ✓

    qa-ep-06-t04-s02 qabul mezonini belgiladi

    ✓ Yangi resept versiyasi yaratilganda mos operatsiyalarning normativi (har org-node bo'yicha) avtomatik ko'chadi

  • 💬

    coder-ep-06-t04-s02 izoh qoldirdi

    carryOverPieceRates bilan bir xil naqsh: ProfessionNormService.carryOver (yangi, cross-module) har org-node normativini yangi versiyaga nusxalaydi, RecipeVersionService.carryOverProfessionNorms orqali chaqiriladi. validateActivationComplete endi piece_rates VA profession_norms ikkalasini mustaqil talab qiladi, 409 RECIPE_ACTIVATION_INCOMPLETE agar biri yetishmasa. EP-02 regressiya testlari RecipeVersionControllerIntegrationTest yangi shartga moslab yashil saqlandi 36/36, RecipeVersionServiceTest 6/6, ProfessionNormServiceTest 15/15 (5 tasi yangi carryOver/existsActiveByVariantOperationId testlari). Diqqat: ProfessionNormRepository.java S03 agenti bilan bir vaqtda tahrirlanayotgan umumiy fayl edi - faqat mening qatorlarim (findByVariantOperationIdAndActiveTrue/existsByVariantOperationIdAndActiveTrue) git plumbing orqali alohida stage qilib commit qilindi, S03ning findActiveByVariantOperationIdsAndOrganizationId qo'shimchasi ish daraxtida committed emas holda saqlanib qoldi, ular o'z ishini alohida commit qiladi.

  • ⇄

    coder-ep-06-t04-s02 statusni o'zgartirdi Ishlanyapti → Review

  • ✎

    coder-ep-06-t04-s02 yangiladi

    Yangilandi: branch, commit_sha

  • ✓

    coder-ep-06-t04-s02 qabul mezonini belgiladi

    ✓ Ikkalasi ham to'liq bo'lganda aktivatsiya 200 va oldingi faol versiya nofaol bo'ladi (EP-02 regressiyasi yashil)

  • ✓

    coder-ep-06-t04-s02 qabul mezonini belgiladi

    ✓ Faqat `piece_rates` bor, `profession_norms` yo'q operatsiyada ham aktivatsiya 409 beradi (yangi shart)

  • ✓

    coder-ep-06-t04-s02 qabul mezonini belgiladi

    ✓ Yangi (mos kelmagan) operatsiya normativsiz qoladi va versiyani aktivlashtirishga urinish `409 RECIPE_ACTIVATION_INCOMPLETE` beradi

  • ✓

    coder-ep-06-t04-s02 qabul mezonini belgiladi

    ✓ Yangi resept versiyasi yaratilganda mos operatsiyalarning normativi (har org-node bo'yicha) avtomatik ko'chadi

  • 📄

    coder-ep-06-t04-s02 fayllarni qayd etdi

    6 ta fayl qayd etildi

  • ⇄

    coder-ep-06-t04-s02 statusni o'zgartirdi Backlog → Ishlanyapti

    Agent ishni boshladi

  • ⚑

    coder-ep-06-t04-s02 ishga oldi

  • 🔗

    pm-agent bog'liqlik qo'shdi

    → EP-06-T04-S01

  • ✦

    pm-agent yaratdi

    Yangi resept versiyasida normativni avto ko'chirish + aktivatsiya to'liqligi (02 qoida 27)

Ma'lumot

Agent
coder-ep-06-t04-s02
Olingan
1 о аввал
Boshlandi
24.08.2026 14:33
Tugadi
25.08.2026 06:11
Baho
4 soat
Spec
erp/docs/modules/04_employees.md#2.4
Branch
feat/EP-06-erpbom-backend
Commit
3296a1186bce

Bog'liqliklar

Agent uchun

Bu ishni AI agent quyidagicha oladi:

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

Tugatgach:

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