V21 — `profession_norms` + `profession_norm_logs`
Tavsif
Qabul mezonlari (DoD)
5 / 5 bajarildi
-
Bir (operatsiya × org-node) uchun ikkinchi FAOL normativ kiritishga urinish DB darajasida rad etiladi
qa-ep-06-t01-s03 · 1 о аввал
-
Bir xil operatsiya uchun IKKI xil org-node'da turli `norm_per_day` (Toshkent 4, Samarqand 6) muammosiz saqlanadi
qa-ep-06-t01-s03 · 1 о аввал
-
`profession_norms` da `profession_id`/`variant_id` ustunlari YO'Q (information_schema testi — 2026-07-25 kaliti)
qa-ep-06-t01-s03 · 1 о аввал
-
`norm_per_day = 0` yoki manfiy qiymat CHECK bilan rad etiladi
qa-ep-06-t01-s03 · 1 о аввал
-
V21 toza va mavjud bazada xatosiz o'tadi
qa-ep-06-t01-s03 · 1 о аввал
O'zgargan fayllar
2 ta
-
modified
src/test/java/uz/erpbom/employees/ProfessionNormsMigrationTest.java -
modified
src/main/resources/db/migration/V21__profession_norms.sql
Izoh qoldirish
Tarix
20 yozuv
-
✎
finalize-ep-06 yangiladi
Yangilandi: pr_url
-
💬
qa-ep-06-t01-s03 izoh qoldirdi
QA (qa-EP-06-T01-S03) — TEKSHIRILDI, done. **Test:** `mvn -Dtest=ProfessionNormsMigrationTest test` → Tests run: 16, Failures: 0, Errors: 0 — BUILD SUCCESS (Testcontainers postgres:16, V1…V21 zanjiri). **Spec muvofiqligi (04_employees §2.4 / §2.4a) — ustunma-ustun:** - `profession_norms`: aynan 9 ustun (id, variant_operation_id, norm_per_day, effective_from, organization_id, set_by_user_id, active, created_at, updated_at) — ortiqchasi yo'q. - `profession_norm_logs`: aynan 7 ustun, `effective_to date NOT NULL` bor. - Kalit: `uq_profession_norms_variant_operation_organization_active` — partial, `WHERE active`. §5 qoida 20 dagi eski `UNIQUE(profession_id, variant_id, organization_id)` qo'llanmagan (to'g'ri — u BEKOR). **🔴 Mutatsiya tekshiruvi (har buzilish V21 ga kiritildi, testda YIQILISHI ko'rildi, so'ng `git checkout --` bilan tiklandi) — 5/5 o'ldirildi:** | Mutatsiya | Yiqilgan test | Mezon | |---|---|---| | unique'dan `organization_id` olib tashlandi | `sameOperationDifferentOrganizationIsAllowedWithDifferentNorm` (duplicate key) | 2815 | | `WHERE active` olib tashlandi (partial → to'liq) | `newActiveProfessionNormIsAllowedAfterOldOneIsRetired` | 2814/§2.4 retired | | `CHECK (norm_per_day > 0)` → `>= 0` | `normPerDayZeroIsRejectedByCheckConstraint` | 2817 | | `profession_id bigint` ustuni qayta qo'shildi | `professionNormsTableHasNoProfessionOrVariantIdColumn` | 2816 | | `numeric(18,4)` → `numeric(18,2)` | `sameOperationDifferentOrganizationIsAllowedWithDifferentNorm` (expected 4.0000, but was 4.00) | precision | Ya'ni 2815 haqiqiy tekshiruv — tautologik emas. **QA test kuchaytirishi (1 ta, faqat test fayli):** `sameOperationDifferentOrganizationIsAllowedWithDifferentNorm` faqat `id` larni (positive / notEqual) tekshirardi — mezon esa "turli `norm_per_day` SAQLANADI" deydi, ya'ni qiymatning o'zi hech qayerda qaytib o'qilmagan edi va `numeric(18,4)` aniqligini hech bir test qulflamagan edi. Qo'shildi: `readNormPerDay()` helper + Toshkent `4.0000` / Samarqand `6.0000` ni scale bilan (`isEqualTo(BigDecimal)`) tekshirish. Yuqoridagi 5-mutatsiya aynan shu qo'shimchani tasdiqlaydi. `V21__profession_norms.sql` O'ZGARTIRILMADI (e168e24 bilan bayt-bayt bir xil). **Cross-cutting:** AR-1 — `tenant_id` yo'q, schema almashtirish yo'q (`organization_id` = node-lokal biznes FK, tenancy emas, §2.4 Q4). AR-10 — 5 FK ning hammasi haqiqiy `REFERENCES` (varchar kod yo'q), har biriga indeks, testda `information_schema` orqali tasdiqlangan. Nomlash — snake_case, jadval ko'plikda, FK to'liq nomdan. Precision — `numeric(18,4)`. Fizik `DELETE` yo'q; retired = `active=false` (spec shunday, `deleted_at` talab qilinmagan). Parol/token yo'q; `profession_norm_logs` insert-only audit. **Kontrakt:** `openapi/v1/employees.yaml` `ProfessionNormResponse` (9 maydon) va `ProfessionNormLogResponse` (7 maydon) DDL bilan maydon nomi va tipida to'liq mos — `norm_per_day` ikkalasida ham numeric(18,4)/string decimal. Chetga chiqish yo'q. Eslatma: `RecipesAndRoutesMigrationTest` dagi 11 qizil test (V19 FK) — bu subtask doirasidan tashqarida, EP-02 ga alohida task chiqarilgan; S03 ga ta'sir qilmaydi.
-
⇄
qa-ep-06-t01-s03 statusni o'zgartirdi Review → Bajarildi
-
✓
qa-ep-06-t01-s03 qabul mezonini belgiladi
✓ V21 toza va mavjud bazada xatosiz o'tadi
-
✓
qa-ep-06-t01-s03 qabul mezonini belgiladi
✓ `norm_per_day = 0` yoki manfiy qiymat CHECK bilan rad etiladi
-
✓
qa-ep-06-t01-s03 qabul mezonini belgiladi
✓ `profession_norms` da `profession_id`/`variant_id` ustunlari YO'Q (information_schema testi — 2026-07-25 kaliti)
-
✓
qa-ep-06-t01-s03 qabul mezonini belgiladi
✓ Bir xil operatsiya uchun IKKI xil org-node'da turli `norm_per_day` (Toshkent 4, Samarqand 6) muammosiz saqlanadi
-
✓
qa-ep-06-t01-s03 qabul mezonini belgiladi
✓ Bir (operatsiya × org-node) uchun ikkinchi FAOL normativ kiritishga urinish DB darajasida rad etiladi
-
⇄
coder-ep-06-t01-s03 statusni o'zgartirdi Ishlanyapti → Review
-
✎
coder-ep-06-t01-s03 yangiladi
Yangilandi: branch, commit_sha
-
✓
coder-ep-06-t01-s03 qabul mezonini belgiladi
✓ V21 toza va mavjud bazada xatosiz o'tadi
-
✓
coder-ep-06-t01-s03 qabul mezonini belgiladi
✓ `norm_per_day = 0` yoki manfiy qiymat CHECK bilan rad etiladi
-
✓
coder-ep-06-t01-s03 qabul mezonini belgiladi
✓ `profession_norms` da `profession_id`/`variant_id` ustunlari YO'Q (information_schema testi — 2026-07-25 kaliti)
-
✓
coder-ep-06-t01-s03 qabul mezonini belgiladi
✓ Bir xil operatsiya uchun IKKI xil org-node'da turli `norm_per_day` (Toshkent 4, Samarqand 6) muammosiz saqlanadi
-
✓
coder-ep-06-t01-s03 qabul mezonini belgiladi
✓ Bir (operatsiya × org-node) uchun ikkinchi FAOL normativ kiritishga urinish DB darajasida rad etiladi
-
📄
coder-ep-06-t01-s03 fayllarni qayd etdi
2 ta fayl qayd etildi
-
⇄
coder-ep-06-t01-s03 statusni o'zgartirdi Backlog → Ishlanyapti
Agent ishni boshladi
-
⚑
coder-ep-06-t01-s03 ishga oldi
-
🔗
pm-agent bog'liqlik qo'shdi
→ EP-06-T01-S01
-
✦
pm-agent yaratdi
V21 — `profession_norms` + `profession_norm_logs`
Ma'lumot
- Agent
- coder-ep-06-t01-s03
- Olingan
- 1 о аввал
- Boshlandi
- 24.08.2026 10:33
- Tugadi
- 24.08.2026 10:57
- Baho
- 3 soat
- Spec
- erp/docs/modules/04_employees.md#2.4
- Branch
- feat/EP-06-erpbom-backend
- Commit
- e168e2403dd6
Bog'liqliklar
Bundan oldin tugashi kerak
Buni kutayotganlar
Agent uchun
Bu ishni AI agent quyidagicha oladi:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-06-T01-S03/claim \ -H "X-Agent: backend-dev-1"
Tugatgach:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-06-T01-S03/status \
-H "X-Agent: backend-dev-1" \
-H "Content-Type: application/json" \
-d '{"status":"review","note":"..."}'