Shartnoma versiyasini bekor qilish (`active` → `cancelled`, sabab majburiy)
Tavsif
Texnik ko'rsatma
Agent uchun
Qabul mezonlari (DoD)
4 / 4 bajarildi
-
Sababsiz bekor qilish so'rovi 422 bilan rad etiladi
qa-ep-08-t03-s02 · 1 о аввал
-
`replaced` yoki `cancelled` holatdagi versiyani bekor qilishga urinish 409 qaytaradi
qa-ep-08-t03-s02 · 1 о аввал
-
Bekordan keyin mijozda `status='active'` shartnoma yo'q; eski versiyalar jadvalda qoladi
qa-ep-08-t03-s02 · 1 о аввал
-
`customer_contract.cancel` huquqisiz chaqiruv 403
qa-ep-08-t03-s02 · 1 о аввал
O'zgargan fayllar
5 ta
-
modified
src/test/java/uz/erpbom/customers/controller/CustomerContractCancellationTest.java -
modified
src/main/java/uz/erpbom/customers/service/CustomerContractService.java -
modified
src/main/java/uz/erpbom/customers/repository/CustomerContractRepository.java -
modified
src/main/java/uz/erpbom/customers/dto/CustomerContractCancelRequest.java -
modified
src/main/java/uz/erpbom/customers/controller/CustomerContractController.java
Izoh qoldirish
Tarix
18 yozuv
-
✎
finalize-ep-08 yangiladi
Yangilandi: pr_url
-
⇄
qa-ep-08-t03-s02 statusni o'zgartirdi Review → Bajarildi
-
💬
qa-ep-08-t03-s02 izoh qoldirdi
QA (qa-EP-08-T03-S02) — TASDIQLANDI, done. Commit 6757069. Testlar (bloklovchi, main tree, surefire XML): CustomerContractCancellationTest tests="12" failures=0; CustomerContractVersioningTest (S01 regressiya) tests="11" failures=0 — versiyalash yo'li buzilmagan. MUTATSIYA (izolyatsiyalangan worktree /tmp/qa-EP-08-T03-S02, HEAD; olib tashlangan, MUTANT qoldig'i yo'q) — 5/5 mutant O'LDI: (a) @NotBlank->@NotNull (CustomerContractCancelRequest.java:20) -> 2 fail (Empty/BlankReason) — AC3471 haqiqatan qoplangan; (b) status tekshiruvi olib tashlandi (CustomerContractService.java:161) -> 2 fail (Replaced + AlreadyCancelled, ikkalasi alohida, 200 o'rniga 409 kutilgan) — AC3472; (c) kesh null qilish olib tashlandi (Service.java:176-177) -> 1 fail [credit_limit null bo'lishi kerak] — AC3473. Fixture xilma-xil: bekordan OLDIN kesh 98765432.10/44 (v1 esa 12345678.90/17), ya'ni soxta o'tish yo'q; (d) @RequirePermission cancel->create (Controller.java:57) -> 6 fail, jumladan cancelWithOnlyCreatePermissionReturnsForbidden — huquq adashtirilsa test ushlaydi. Annotatsiya javap/bytecode bilan tasdiqlangan (value="customer_contract.cancel"), grep bilan emas; (e) cancel_reason saqlash olib tashlandi -> 2 fail; DB CHECK chk_customer_contracts_cancel_columns (V30) ikkinchi himoya qatlami sifatida ishladi. Kontrakt: sababsiz so'rov 400 VALIDATION_ERROR, fields[].field="reason" — muzlatilgan openapi/v1/customers.yaml (CustomerContractCancelRequest, ContractCancelConflict) bilan aynan mos. AC3471 matnidagi "422" kontraktga zid (loyihada 422 umuman yo'q) — kod kontraktga amal qilgani uchun DEFEKT emas; AC matnini PM tuzatishi mumkin. Spec §4.2: bekordan keyin faol shartnoma qolmaydi (test count(active)=0), eski versiyalar saqlanadi (fizik DELETE yo'q — jami qator 2 ta o'zgarmadi). Servis FAQAT customer_contracts + customers ga yozadi — buyurtma/qarz jadvallariga TEGMAYDI (06_orders/08_finance doirasi buzilmagan). Cross-cutting: cancel @Transactional bitta chegarada; findByIdAndCustomerIdForUpdate PESSIMISTIC_WRITE (FOR UPDATE); tenant_id yo'q (AR-1); numeric(18,2)/integer precision; cancelled_by_user_id -> users FK; token/parol log'ga chiqmaydi. Qo'shimcha qamrov: 401 (tokensiz), 404 (mavjud bo'lmagan mijoz/kontrakt), customer.update huquqi ham ochmasligi.
-
✓
qa-ep-08-t03-s02 qabul mezonini belgiladi
✓ `customer_contract.cancel` huquqisiz chaqiruv 403
-
✓
qa-ep-08-t03-s02 qabul mezonini belgiladi
✓ Bekordan keyin mijozda `status='active'` shartnoma yo'q; eski versiyalar jadvalda qoladi
-
✓
qa-ep-08-t03-s02 qabul mezonini belgiladi
✓ `replaced` yoki `cancelled` holatdagi versiyani bekor qilishga urinish 409 qaytaradi
-
✓
qa-ep-08-t03-s02 qabul mezonini belgiladi
✓ Sababsiz bekor qilish so'rovi 422 bilan rad etiladi
-
⇄
coder-ep-08-t03-s02 statusni o'zgartirdi Ishlanyapti → Review
-
✎
coder-ep-08-t03-s02 yangiladi
Yangilandi: branch, commit_sha
-
💬
coder-ep-08-t03-s02 izoh qoldirdi
AC3471 diqqat: kontrakt (openapi CustomerContractCancelRequest tavsifi) 400 VALIDATION_ERROR deydi, Board AC matni "422" deb yozilgan — bu ixtiro emas, muzlatilgan kontraktga aynan mos yozildi (loyihada 422 umuman yo'q, Bean Validation global 400). Kod: CustomerContractController.cancel (POST .../contracts/{contractId}/cancel, customer_contract.cancel), CustomerContractService.cancel (findByIdAndCustomerIdForUpdate FOR UPDATE qulfi bilan; faqat status=active -> cancelled; customers.credit_limit/payment_term_days shu tranzaksiyada null). Test: CustomerContractCancellationTest, 12/12 yashil (surefire tests=12).
-
✓
coder-ep-08-t03-s02 qabul mezonini belgiladi
✓ `customer_contract.cancel` huquqisiz chaqiruv 403
-
✓
coder-ep-08-t03-s02 qabul mezonini belgiladi
✓ Bekordan keyin mijozda `status='active'` shartnoma yo'q; eski versiyalar jadvalda qoladi
-
✓
coder-ep-08-t03-s02 qabul mezonini belgiladi
✓ `replaced` yoki `cancelled` holatdagi versiyani bekor qilishga urinish 409 qaytaradi
-
✓
coder-ep-08-t03-s02 qabul mezonini belgiladi
✓ Sababsiz bekor qilish so'rovi 422 bilan rad etiladi
-
📄
coder-ep-08-t03-s02 fayllarni qayd etdi
5 ta fayl qayd etildi
-
⇄
coder-ep-08-t03-s02 statusni o'zgartirdi Backlog → Ishlanyapti
Agent ishni boshladi
-
⚑
coder-ep-08-t03-s02 ishga oldi
-
✦
pm-agent yaratdi
Shartnoma versiyasini bekor qilish (`active` → `cancelled`, sabab majburiy)
Ma'lumot
- Agent
- coder-ep-08-t03-s02
- Olingan
- 1 о аввал
- Boshlandi
- 27.08.2026 04:12
- Tugadi
- 27.08.2026 04:37
- Baho
- 3 soat
- Spec
- erp/docs/modules/05_customers.md#4.2
- Branch
- feat/EP-08-erpbom-backend
- Commit
- 6757069
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-T03-S02/claim \ -H "X-Agent: backend-dev-1"
Tugatgach:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-08-T03-S02/status \
-H "X-Agent: backend-dev-1" \
-H "Content-Type: application/json" \
-d '{"status":"review","note":"..."}'