Hodim kartasi — atomik yaratish/tahrir + holat amallari
Tavsif
Qabul mezonlari (DoD)
5 / 5 bajarildi
-
Kasb tanlanmasa "Saqlash" bloklanadi (klient validatsiyasi) va server ham rad etadi
qa-ep-06-t07-s04 · 1 о аввал
-
`monthly` kasb tanlanganda maosh maydoni majburiy bo'ladi; hamma kasb `piece_rate` bo'lsa ixtiyoriy
qa-ep-06-t07-s04 · 1 о аввал
-
Akkaunt bloki yopiq bo'lsa so'rovda `account` yuborilmaydi (akkauntsiz hodim)
qa-ep-06-t07-s04 · 1 о аввал
-
`fired` hodim kartasida qayta faollashtirish tugmasi YO'Q
qa-ep-06-t07-s04 · 1 о аввал
-
`409 last_owner_required` uchun maxsus, harakatga yo'naltiruvchi xato matni ko'rsatiladi
qa-ep-06-t07-s04 · 1 о аввал
O'zgargan fayllar
9 ta
-
modified
src/shared/layout/navigation.ts -
modified
src/router/index.ts -
modified
src/modules/employees/views/__tests__/EmployeeListView.spec.ts -
modified
src/modules/employees/views/EmployeeListView.vue -
modified
src/modules/employees/views/__tests__/EmployeeDetailView.spec.ts -
modified
src/modules/employees/views/EmployeeDetailView.vue -
modified
src/modules/employees/components/__tests__/EmployeeFormDialog.spec.ts -
modified
src/modules/employees/components/EmployeeFormDialog.vue -
modified
src/modules/employees/api/employee-errors.ts
Izoh qoldirish
Tarix
19 yozuv
-
✎
finalize-ep-06 yangiladi
Yangilandi: branch, commit_sha, pr_url
-
⇄
qa-ep-06-t07-s04 statusni o'zgartirdi Review → Bajarildi
-
💬
qa-ep-06-t07-s04 izoh qoldirdi
QA (qa-EP-06-T07-S04) — 5 mezon ham tasdiqlandi, mutatsiya tekshiruvi bilan. TESTLAR (o'zim yurgizdim): - npx vitest run src/modules/employees -> 11 fayl / 86 test yashil - npx vitest run src/router src/shared -> 17 fayl / 103 test yashil (shared fayl regressiyasi: router/index.ts, navigation.ts) - npx vue-tsc -b --noEmit -> exit 0 MUTATSIYA (har biri qo'llanib, test YIQILDI, so'ng git checkout bilan tiklandi): 1) AC2921: create body'ga doim `account: null` qo'shildi -> EmployeeFormDialog.spec.ts "'account' in body" yiqildi (1 fail). 2) AC2920: requiresSalary `.some(` -> `.every(` -> mixed va reaktivlik testlari yiqildi (2 fail). 3) AC2919: canSubmit -> `return true` -> AC2919 + 3 boshqa test yiqildi (4 fail). 4) AC2922: `v-if="employee.status !== 'fired'"` olib tashlandi -> AC2922 testi yiqildi (1 fail). 5) AC2923: isLastOwnerRequired -> `return false` -> fire va suspend AC2923 testlari yiqildi (2 fail). Yolg'on yashil topilmadi. Ish daraxti tekshiruv oxirida toza (git status bo'sh). MEZONLAR: - 2919: canSubmit (EmployeeFormDialog.vue:181-207) `profession_ids.length === 0` da false -> `:disabled="!canSubmit"` submit tugmasini HAQIQATAN bloklaydi; onSubmit() ham birinchi qatorda `if (!canSubmit.value) return`. Kontrakt `minItems: 1` (employees.yaml:1652) — klient bu holatga yetib bormaydi, test body'da `profession_ids: [1,3]` borligini tasdiqlaydi. - 2920: requiresSalary `.some(wage_type === 'monthly')` — MIXED holat qamralgan (test: [piece_rate id=1, monthly id=2] -> maosh maydoni bor + submit bloklangan). REAKTIV: computed, `professionIds` o'zgarganda qayta hisoblanadi (alohida test: [1] -> submit ochiq, keyin [1,2] -> yana bloklangan). Hammasi piece_rate -> ToggleSwitch ixtiyoriy, body'da `salary` kaliti YO'Q. - 2921: `body.account` FAQAT `if (form.accountEnabled)` ichida yaratiladi (EmployeeFormDialog.vue:311-321) — `null`/`{}`/`undefined` yo'q. Test so'rov TANASINI tekshiradi (`JSON.parse(config.data)`, `'account' in body === false`), forma holatini emas. `account_user_id` ham yo'q. - 2922: EmployeeDetailView.vue:244 `<div v-if="employee.status !== 'fired'">` — fired'da butun blok DOM'da yo'q (disabled emas). Test uchala tugma `exists() === false` va "Holatni o'zgartirish" matni yo'qligini tekshiradi. Activate tugmasi faqat `status === 'suspended'` da — kontraktdagi `fired -> active` yo'qligiga zid yo'l chaqirilmaydi. - 2923: xato kodi kontraktdan — `LAST_OWNER_REQUIRED` (employees.yaml:2394, EmployeeStatusConflict), to'qilmagan. Matn server javobidan (`resolveErrorMessage`, o'zgartirilmaydi) + qo'shimcha harakat ko'rsatmasi: "Avval 'owner' huquqini boshqa foydalanuvchiga bering..." + `user.view` bo'lsa Foydalanuvchilarga havola. severity="warn", umumiy `employee-status-error` banneri bir vaqtda ko'rinmaydi (test tasdiqladi). Suspend uchun ham ko'rsatilishi TO'G'RI: /suspend 409 -> EmployeeStatusConflict (employees.yaml:686) va §4 bo'yicha suspend ham `users.status='blocked'` sinxroniga tayanadi. KONTRAKT: yaratish AYNAN ATOMIK — bitta `POST /employees` (employees.api.ts:76), hodim + ixtiyoriy account + profession_ids + ixtiyoriy salary bitta tanada; ketma-ket so'rovga bo'linmagan. Holat amallari kontraktdagi alohida yo'llar bilan: POST /employees/{id}/activate|suspend|fire. Maydon nomlari/tiplari mos: salary {amount: string 2 kasr (formatPrice -> toFixed(2)), effective_from: date}, account {username, password, phone?}. Tahrir PUT /employees/{id} FAQAT anketa maydonlarini yuboradi (test: profession_ids/salary/account yo'q). MASKALASH: `hasEmployeeSalaryAccess()` = `'current_salary' in employee` (kalit yo'q = huquq yo'q) saqlangan; `!= null`, `|| 0`, `?? 0` ishlatilmagan. Ko'rinish signali `useCan('employee_salary.view')` (S03 QA qarori) — EmployeeDetailView.vue:71. REGRESSIYA: S01/S02/S03 fayllari (types.ts, employees.store.ts, ProfessionListView.vue, ProfessionFormDialog.vue, profession-errors.ts) tegilmagan; EmployeeListView.vue ga faqat "Yangi hodim" tugmasi + "Amallar" ustuni + dialog qo'shilgan — AC2916 (maosh ustuni) va AC2918 (filtr tozalash) mantig'i o'zgarmagan va testlari yashil. Yangi route `/hodimlar/:id` `meta.permission: 'employee.view'` bilan (user-detail konvensiyasi). Commit'da begona fayl yo'q (9 fayl), T08 doirasi (normativ/maosh/payroll ekranlari) oldindan yozilmagan. KUZATUVLAR (bloklovchi emas, T08 ga eslatma): 1. Yangi `employee-detail` route'i `modules/employees/__tests__/access.spec.ts` da qamralmagan — S01 (AC2912) da o'rnatilgan "route yozuvi + meta.permission haqiqiy jadvaldan tekshiriladi" konvensiyasi bu route uchun takrorlanmagan. Mezonlarda talab yo'q, lekin keyingi bargda qo'shilsa yaxshi. 2. `account_user_id` (mavjud akkauntni bog'lash/uzish — §8.1 qoida 21b, kontraktda EmployeeCreateRequest va EmployeeUpdateRequest da bor) uchun UI bu bargda ataylab qoldirilmagan. AC2919-2923 dan birortasi buni talab qilmaydi, shu sabab mezon yopilishiga to'sqinlik qilmaydi — lekin T07 ning oxirgi bargi bo'lgani uchun bu qobiliyat hech bir bargda qolmadi; PM T08 yoki yangi bargga kiritishi kerak. 3. `employee_salary.set` huquqi yo'q foydalanuvchi `monthly` kasb tanlasa forma oldindan ogohlantirmaydi — server 403 qaytaradi va umumiy banner ko'rsatiladi (kontrakt: "Yozish uchun employee_salary.set huquqi ham kerak"). Mezonlarda talab yo'q.
-
✓
qa-ep-06-t07-s04 qabul mezonini belgiladi
✓ `409 last_owner_required` uchun maxsus, harakatga yo'naltiruvchi xato matni ko'rsatiladi
-
✓
qa-ep-06-t07-s04 qabul mezonini belgiladi
✓ `fired` hodim kartasida qayta faollashtirish tugmasi YO'Q
-
✓
qa-ep-06-t07-s04 qabul mezonini belgiladi
✓ Akkaunt bloki yopiq bo'lsa so'rovda `account` yuborilmaydi (akkauntsiz hodim)
-
✓
qa-ep-06-t07-s04 qabul mezonini belgiladi
✓ `monthly` kasb tanlanganda maosh maydoni majburiy bo'ladi; hamma kasb `piece_rate` bo'lsa ixtiyoriy
-
✓
qa-ep-06-t07-s04 qabul mezonini belgiladi
✓ Kasb tanlanmasa "Saqlash" bloklanadi (klient validatsiyasi) va server ham rad etadi
-
⇄
coder-ep-06-t07-s04 statusni o'zgartirdi Ishlanyapti → Review
-
✓
coder-ep-06-t07-s04 qabul mezonini belgiladi
✓ `409 last_owner_required` uchun maxsus, harakatga yo'naltiruvchi xato matni ko'rsatiladi
-
✓
coder-ep-06-t07-s04 qabul mezonini belgiladi
✓ `fired` hodim kartasida qayta faollashtirish tugmasi YO'Q
-
✓
coder-ep-06-t07-s04 qabul mezonini belgiladi
✓ Akkaunt bloki yopiq bo'lsa so'rovda `account` yuborilmaydi (akkauntsiz hodim)
-
✓
coder-ep-06-t07-s04 qabul mezonini belgiladi
✓ `monthly` kasb tanlanganda maosh maydoni majburiy bo'ladi; hamma kasb `piece_rate` bo'lsa ixtiyoriy
-
✓
coder-ep-06-t07-s04 qabul mezonini belgiladi
✓ Kasb tanlanmasa "Saqlash" bloklanadi (klient validatsiyasi) va server ham rad etadi
-
📄
coder-ep-06-t07-s04 fayllarni qayd etdi
9 ta fayl qayd etildi
-
⇄
coder-ep-06-t07-s04 statusni o'zgartirdi Backlog → Ishlanyapti
Agent ishni boshladi
-
⚑
coder-ep-06-t07-s04 ishga oldi
-
🔗
pm-agent bog'liqlik qo'shdi
→ EP-06-T07-S03
-
✦
pm-agent yaratdi
Hodim kartasi — atomik yaratish/tahrir + holat amallari
Ma'lumot
- Agent
- coder-ep-06-t07-s04
- Olingan
- 1 о аввал
- Boshlandi
- 24.08.2026 11:36
- Tugadi
- 24.08.2026 12:18
- Baho
- 6 soat
- Spec
- erp/docs/modules/04_employees.md#8.1
- Branch
- feat/EP-06-erpbom-web
- Commit
- e99f80abbafb
Bog'liqliklar
Bundan oldin tugashi kerak
Agent uchun
Bu ishni AI agent quyidagicha oladi:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-06-T07-S04/claim \ -H "X-Agent: backend-dev-1"
Tugatgach:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-06-T07-S04/status \
-H "X-Agent: backend-dev-1" \
-H "Content-Type: application/json" \
-d '{"status":"review","note":"..."}'