Sub-task EP-08-T09-S03 Yuqori 05_customers erpbom-web

Yuk node'lari + mobil akkaunt boshqaruvi

Bajarildi
Status:

Tavsif

UC4 (node biriktirish) va UC3 (mijozga login/parol berish) ekranlari.

Texnik ko'rsatma

Agent uchun

Node bo'limida "sotuvga tayyor" ko'rsatkichi (T07-S02) ko'rsatiladi — yetishmayotgan shart aniq yoziladi (mas. "node biriktirilmagan", "sektor tanlanmagan"). 🔴 Akkaunt bo'limida parol EKRANDA bir marta ko'rsatiladi va "adminning o'zi yetkazadi" izohi bo'ladi — parol xabarnoma bilan YUBORILMAYDI (10_notifications E21). Parol matnini log'ga yozish yoki nusxalash tarixida qoldirish TAQIQLANADI. Akkauntsiz mijoz normal holat — bo'lim "akkaunt yo'q" deb ko'rsatiladi, xato emas (R12(b)).

Qabul mezonlari (DoD)

4 / 4 bajarildi

  • Node biriktirilmagan mijozda "tayyor emas" sababi aniq matn bilan ko'rinadi

    qa-ep-08-t09-s03 · 1 о аввал

  • Akkaunt yaratilgach parol bir marta ko'rsatiladi va sahifa yangilangach qayta ko'rsatilmaydi

    qa-ep-08-t09-s03 · 1 о аввал

  • Akkauntsiz mijoz kartochkasi xatosiz ochiladi

    qa-ep-08-t09-s03 · 1 о аввал

  • `customer_account.manage` / `customer_organization.manage` huquqisiz tugmalar ko'rinmaydi

    qa-ep-08-t09-s03 · 1 о аввал

O'zgargan fayllar

20 ta

  • modified src/shared/layout/navigation.ts
  • modified src/router/index.ts
  • modified src/modules/customers/views/__tests__/CustomerListView.spec.ts
  • modified src/modules/customers/views/CustomerListView.vue
  • modified src/modules/customers/__tests__/access.spec.ts
  • modified src/modules/customers/types.ts
  • modified src/modules/customers/api/__tests__/customer-credentials.api.spec.ts
  • modified src/modules/customers/api/__tests__/customer-organizations.api.spec.ts
  • modified src/modules/customers/api/customer-credentials-errors.ts
  • modified src/modules/customers/api/customer-credentials.api.ts
  • modified src/modules/customers/api/customer-organization-errors.ts
  • modified src/modules/customers/api/customer-organizations.api.ts
  • modified src/modules/customers/components/__tests__/CustomerOrganizationAddDialog.spec.ts
  • modified src/modules/customers/components/CustomerOrganizationAddDialog.vue
  • modified src/modules/customers/components/__tests__/CustomerCredentialsGrantDialog.spec.ts
  • modified src/modules/customers/components/CustomerCredentialsGrantDialog.vue
  • modified src/modules/customers/components/__tests__/CustomerAccountPanel.spec.ts
  • modified src/modules/customers/components/CustomerAccountPanel.vue
  • modified src/modules/customers/views/__tests__/CustomerOrganizationsView.spec.ts
  • modified src/modules/customers/views/CustomerOrganizationsView.vue

Izoh qoldirish

Tarix

18 yozuv

  • ✎

    finalize-ep-08 yangiladi

    Yangilandi: pr_url

  • ✎

    worker-ep-08-t09 yangiladi

    Yangilandi: branch, commit_sha

  • ⇄

    qa-ep-08-t09-s03 statusni o'zgartirdi Review → Bajarildi

  • 💬

    qa-ep-08-t09-s03 izoh qoldirdi

    QA (qa-EP-08-T09-S03) — a123f63 izolyatsiyalangan worktree'da tekshirildi. VERDIKT: done. Testlar (bloklovchi, tor doira `npx vitest run src/modules/customers`): 22 fayl / 230 test yashil (S02 bazisi 167 -> +63 yangi test). MUTATSIYA TEKSHIRUVI — 9 mutant, 8 O'LDI / 1 tirik: 1. CustomerAccountPanel v-can customer_account.manage -> customer_organization.manage => O'LDI (6 assert yiqildi) 2. CustomerOrganizationsView v-can customer_organization.manage -> customer_account.manage => O'LDI (2 assert) 3. router/index.ts:381 meta.permission -> null => O'LDI (2 assert, shu jumladan authGuard IJROSI, faqat meta e'loni emas — S02 nuqsoni takrorlanmagan) 4. onGranted'da parolni sessionStorage.setItem bilan yozish => O'LDI (Storage.prototype spy ushladi) 5. "tayyor emas" xabari v-if="false" => O'LDI (4 assert) 6. node ro'yxati .slice().reverse() => O'LDI (organization_id asc tartibi assert qilingan) 7a. link-rejim canSubmit -> true => O'LDI; 7b. parol min 8 -> min 1 => O'LDI 9. AC3531 undefined guard (props.userId ?? null -> as number) => O'LDI Mezonlar (har biri alohida, kod darajasida): - AC3529 ✓ CustomerOrganizationsView.vue:93-107 — sabab UCH holatga ajratilgan (nofaol / node yo'q / faol shartnoma yo'q), aniq matn; bo'sh EmptyState'ga QO'SHIMCHA banner. sale_ready backend natijasi, frontendda qayta hisoblanmaydi. - AC3530 ✓ Parol javobda YO'Q (types.ts CustomerCredentialsResponse'da password maydoni yo'q, kontraktga mos); faqat CustomerAccountPanel.vue:65 `lastGranted` ref'ida; localStorage/sessionStorage/cookie/URL/pinia-persist'ga YOZILMAYDI (grep + Storage spy testi). Yangi mount'da banner yo'q. - AC3531 ✓ userId null VA undefined ikkalasi ham sinalgan (CustomerAccountPanel.spec.ts:52,61) + view darajasida integratsiya (spec:343). 'undefined' matni chiqmasligi assert qilingan. - AC3532 ✓ Ikki rule MUSTAQIL sinalgan — fixture'da HECH QACHON birga berilmagan: faqat org.manage -> akkaunt tugmalari display:none; faqat account.manage -> node tugmalari display:none (har ikki yo'nalish). access.spec.ts'da route guard uchun customer-contracts/customer-documents naqshidagi blok bor, salbiy holatda faqat customer_account.manage beriladi. Kontrakt muvofiqligi (customers.yaml 779-960): yo'llar/metodlar/status kodlari mos; 409 CUSTOMER_ORGANIZATION_EXISTS, ORGANIZATION_INACTIVE, CUSTOMER_ALREADY_HAS_CREDENTIALS, USER_ALREADY_LINKED, USER_NOT_CUSTOMER, BUSINESS_CONFLICT va 404 lar — hammasi testda qamralgan. DELETE credentials -> users O'CHIRILMAYDI (faqat bog'lanish uziladi). Yaratish XOR bog'lash: UI rejim almashganda qarama-qarshi maydonlarni tozalaydi, POST tanasi toEqual bilan qat'iy assert qilingan (aralash so'rov chiqmaydi). Xato joylashtirish status-agnostik (fields[] mavjudligiga qaraydi, status kodiga emas); statik maydon ro'yxati yo'q — reyestr (customer-form-error-slots) ishlatilgan. Fixture xilma-xilligi TEKSHIRILDI: organization_id 2/3/5/11, nomlar Andijon/Buxoro/Qarshi/Toshkent, user_id null/undefined/42/55/77/88, user_status invited/active, sale_ready true/false, active true/false, organization_active true/false. Qotib qolgan bir xil qiymat topilmadi. ⚠️ TIRIK MUTANT (mezonlarga tegmaydi, QARZ sifatida qayd etaman — bargni bloklamaydi): CustomerCredentialsGrantDialog.vue:125-131 `placeFieldError` ichidagi `unplaced.push(message)` fallback'ini butunlay o'chirsam 230 test YASHIL qoladi — ya'ni "reyestrga tushmagan maydon xatosi jim yo'qolmaydi" da'vosini HECH BIR test qo'riqlamaydi. Kodning O'ZI TO'G'RI: probe test bilan tasdiqladim — CREATE rejimida server fields[].field="user_id" (cross-field 400) yoki noma'lum maydon ("captcha") qaytarsa xabar umumiy konteynerda KO'RINADI, yo'qolmaydi (probe fayli o'chirildi). Mavjud cross-field testi (spec:204) faqat LINK rejimida, ya'ni slot MAVJUD bo'lgan holatda ishlaydi. Tavsiya (keyingi bargda yoki texnik qarz): CREATE rejimida fields[].field="user_id" keladigan holat uchun bitta test qo'shilsin. Worktree /tmp/qa-EP-08-T09-S03 o'chirildi; asosiy daraxtga tegilmadi (git diff bo'sh, .orig qoldig'i yo'q, `grep -rn MUTANT src/` bo'sh).

  • ✓

    qa-ep-08-t09-s03 qabul mezonini belgiladi

    ✓ `customer_account.manage` / `customer_organization.manage` huquqisiz tugmalar ko'rinmaydi

  • ✓

    qa-ep-08-t09-s03 qabul mezonini belgiladi

    ✓ Akkauntsiz mijoz kartochkasi xatosiz ochiladi

  • ✓

    qa-ep-08-t09-s03 qabul mezonini belgiladi

    ✓ Akkaunt yaratilgach parol bir marta ko'rsatiladi va sahifa yangilangach qayta ko'rsatilmaydi

  • ✓

    qa-ep-08-t09-s03 qabul mezonini belgiladi

    ✓ Node biriktirilmagan mijozda "tayyor emas" sababi aniq matn bilan ko'rinadi

  • ⇄

    coder-ep-08-t09-s03 statusni o'zgartirdi Ishlanyapti → Review

  • 💬

    coder-ep-08-t09-s03 izoh qoldirdi

    EP-08-T09-S03 tayyor: /mijozlar/:id/filiallar (customer-organizations) sahifasi qo'shildi — org-node biriktirish/olib tashlash (customer_organization.manage) + mobil akkaunt yaratish/bog'lash/uzish (customer_account.manage). AC3529 uchun customer.sale_ready asosida aniq sabab (node yo'q / mijoz nofaol / faol shartnoma yo'q). AC3530 — parol faqat xotirada, hech qanday storage'ga yozilmaydi (test bilan tasdiqlangan). AC3531/AC3532 alohida testlar bilan qamrab olingan. vue-tsc/eslint toza; vitest src/modules/customers: 230/230 yashil (bazis 167 + yangi 63). Commit a123f6335639040c50b8bb3e964c4b85fef0fac2.

  • ✓

    coder-ep-08-t09-s03 qabul mezonini belgiladi

    ✓ `customer_account.manage` / `customer_organization.manage` huquqisiz tugmalar ko'rinmaydi

  • ✓

    coder-ep-08-t09-s03 qabul mezonini belgiladi

    ✓ Akkauntsiz mijoz kartochkasi xatosiz ochiladi

  • ✓

    coder-ep-08-t09-s03 qabul mezonini belgiladi

    ✓ Akkaunt yaratilgach parol bir marta ko'rsatiladi va sahifa yangilangach qayta ko'rsatilmaydi

  • ✓

    coder-ep-08-t09-s03 qabul mezonini belgiladi

    ✓ Node biriktirilmagan mijozda "tayyor emas" sababi aniq matn bilan ko'rinadi

  • 📄

    coder-ep-08-t09-s03 fayllarni qayd etdi

    20 ta fayl qayd etildi

  • ⇄

    coder-ep-08-t09-s03 statusni o'zgartirdi Backlog → Ishlanyapti

    Agent ishni boshladi

  • ⚑

    coder-ep-08-t09-s03 ishga oldi

  • ✦

    pm-agent yaratdi

    Yuk node'lari + mobil akkaunt boshqaruvi

Ma'lumot

Agent
coder-ep-08-t09-s03
Olingan
1 о аввал
Boshlandi
27.08.2026 04:54
Tugadi
27.08.2026 05:11
Baho
3 soat
Spec
erp/docs/modules/05_customers.md#8
Branch
feat/EP-08-erpbom-web
Commit
a123f6335639

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-08-T09-S03/claim \
  -H "X-Agent: backend-dev-1"

Tugatgach:

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