Epic EP-08 Kritik 05_customers erpbom-backend backend

05_customers — Mijozlar (anketa, shartnoma versiyalash, hujjat generatsiyasi, yuk node'lari, mijoz akkaunti)

Bajarildi
100% 23/23
Status:

Tavsif

Mijoz katalogi: anketa (`customers` — **tenant-umumiy**, scoping ustunisiz), **versiyalangan** shartnoma (`customer_contracts` — qarz limiti va to'lov muddatining YAGONA manbai, bir vaqtda aynan bitta `active`), hujjatlar (`customer_documents` — pasport nusxasi + **tilxat**), yuk beriladigan **org-node'lar** (`customer_organizations`, N—N) va mijozning **mobil akkaunti** (`customers.user_id` → `users` `user_type='customer'`, `audience='customer'`). Bu modul **06_orders uchun poydevor**: u `customer_id` lookup'ini, sotish sektorini (`sector_id`), to'lov muddati **TAVANINI** (`payment_term_days`), qarz **limitini** va yuk beriladigan node ro'yxatini beradi. Buyurtmaning o'zi, narx turi filtri (R9), ombor hosilasi (R10) va snapshot semantikasi (R11) — 06_orders epicida. Backend'da to'liq data-model + REST API + hujjat generatsiyasi; web'da ichki foydalanuvchi ekranlari. **Mobil repo'da ish yo'q** — mijoz login oqimi umumiy qatlamda tayyor, uni ochadigan o'zgarish backend'dagi ownership implementatsiyasi (T06-S02).

Texnik ko'rsatma

Agent uchun

Majburiy o'qish: erp/docs/modules/05_customers.md (to'liq), erp/docs/00_CROSS_CUTTING.md (A valyuta, G tarix=versiya qatorlari, H soft-delete/toggle, K nomlash, L RBAC, N tenant setting, P scoping), .claude/skills/coding/java-spring-coder/SKILL.md (backend), .claude/skills/coding/vuejs-coder/SKILL.md (web), .claude/skills/coding/postgresql/SKILL.md, .claude/skills/coding/swagger/SKILL.md (T00 uchun). 🔴 SCOPING (§3 p.1–p.2, CROSS_CUTTING P, ADR-001 AR-1) — BU MODULNING ASOSIY TUZOG'I: `organization_id` nomi ikki xil ma'noda ishlatilgan edi, endi FAQAT BITTASI qoladi: * `customers.organization_id` — ❌ YO'Q va QO'SHILMAYDI (scoping ustuni olib tashlangan; mijoz butun DB bo'ylab yagona qator). Unga tobe `customer_contracts` / `customer_documents` da ham bunday ustun HECH QACHON bo'lmagan. * `customer_organizations.organization_id` — ✅ BOR va QOLADI (node-lokal: mijozga QAYSI FILIALDAN yuk beriladi). Xotira qoidasi: *scoping ustuni yo'qoldi, biriktirish ustuni qoldi.* 🔴 YAGONA MANBA (§5 R1): `credit_limit` / `payment_term_days` haqiqat manbai = `customer_contracts` (`status='active'`). `customers.credit_limit` / `customers.payment_term_days` — **read-only cache**, faqat tizim yozadi (shartnoma yaratilganda/ versiyalanganda BIR TRANZAKSIYADA yangilanadi). API orqali to'g'ridan-to'g'ri tahrirlash RAD ETILADI (AC4). 🔴 SHARTNOMASIZ MIJOZ YO'Q (§5 R3): anketa saqlanganda `version=1` shartnoma AVTOMATIK va ATOMIK yaratiladi. 🔴 `payment_term_days` = TAVAN, default emas (§5 R9). 05 uni faqat SAQLAYDI; buyurtmada narx turini filtrlash — 06_orders. Valyuta: `credit_limit numeric(18,2)` — valyuta ustuni YO'Q (CROSS_CUTTING A, asosiy valyuta nazarda tutilgan; §3 p.7).

Qabul mezonlari (DoD)

0 / 6 bajarildi

  • Spec §12 AC1–AC11 dan 05 ga tegishlilari qamrab olingan (AC5/AC6/AC7/AC8 — 06_orders/08_finance ijrosi, bu epicda faqat MANBA tekshiriladi; AC12 — ADR-001 bilan bekor)

  • `customers` jadvalida `organization_id` ustuni YO'Q; `UNIQUE(phone)` butun DB bo'ylab ishlaydi (AC10)

  • Har mijozda bir vaqtda aynan bitta `status='active'` shartnoma; shartnomasiz mijoz yaratib bo'lmaydi (AC1/AC3)

  • `customers.credit_limit`/`payment_term_days` API orqali to'g'ridan-to'g'ri tahrirlanmaydi (AC4)

  • Mijoz o'chirilmaydi — faqat `active=false`; nofaol mijoz `audience='customer'` bilan login qila olmaydi (AC9)

  • OpenAPI drift gate toza: `openapi/v1/customers.yaml` dagi har operatsiya kodda bor (EP-05 ratchet siyosati)

Ichki ishlar

10 ta

Izoh qoldirish

Tarix

7 yozuv

  • ⇄

    system statusni o'zgartirdi Ishlanyapti → Bajarildi

    Bolalardan avtomatik hisoblandi

  • 💬

    team-lead-pm izoh qoldirdi

    SESSIYA YAKUNI (2026-08-27, team-lead-pm). Yopilgan: T00 kontrakt (e114543), T01 migratsiya V30 (3b3b8e2), T02 mijoz CRUD+v1 seed (bc01c93), T03 shartnoma versiyalash/bekor/tarix (f75fdc7), T08 va T09 web (a123f63). Backend branch feat/EP-08-erpbom-backend HEAD=f75fdc7, web branch feat/EP-08-erpbom-web HEAD=a123f63 — IKKALASI HAM PUSH QILINMAGAN (push epic oxirida, Faza D). Lead tekshiruvi: backend customers paketi 146 test 0 xato (toza daraxtda o'zim yurgizdim), openapi/ faqat T00 commitida, MUTANT/worktree/.orig qoldigi yoq, ikkala daraxt toza. QOLGAN ISH (hammasi backend, ketma-ket — bitta repo bitta yozuvchi): T04 mijoz hujjatlari, T06 mobil akkaunt + audience=customer, T07 yuk org-nodelari (uchalasi ready), keyin T05 hujjat generatsiyasi (T02+T03+T04 ga bogliq). Keyingi sessiya: /team-lead-pm — Faza C fan-out, T04 dan boshlanadi. Mock :4010 kerak bolsa qayta kotariladi.

  • ⇄

    system statusni o'zgartirdi Backlog → Ishlanyapti

    Bolalardan avtomatik hisoblandi

  • 🔗

    pm-agent bog'liqlik qo'shdi

    → EP-02

  • 🔗

    pm-agent bog'liqlik qo'shdi

    → EP-09

  • 🔗

    pm-agent bog'liqlik qo'shdi

    → EP-01

  • ✦

    pm-agent yaratdi

    05_customers — Mijozlar (anketa, shartnoma versiyalash, hujjat generatsiyasi, yuk node'lari, mijoz akkaunti)

Ma'lumot

Agent
—
Olingan
—
Boshlandi
26.08.2026 19:46
Tugadi
27.08.2026 19:23
Baho
81 soat
Spec
erp/docs/modules/05_customers.md
Branch
—
Commit
—

Bog'liqliklar

Agent uchun

Bu ishni AI agent quyidagicha oladi:

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

Tugatgach:

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