Sub-task EP-12-T04-S01 Yuqori 08_finance erpbom-backend

Aktiv CRUD, inventar raqami, node doirasi

Bajarildi
Status:

Tavsif

Aktiv yaratish/tahrir (`fixed_asset.create` / `.edit`), avtomatik `FA00001` raqami, node-lokal doira (qoida 45).

Texnik ko'rsatma

Agent uchun

* Bosh office useri **butun tree'ni** ko'radi va filial bo'yicha filtrlaydi; filial useri faqat o'z node'ini. * Raqam qo'lda tahrirlansa unikallik tekshiriladi. * Aktiv olish `payments` (`direction=out`) + `payment_allocations` (`target_type=fixed_asset`) orqali — alohida to'lov mexanizmi YO'Q (qoida 26).

Qabul mezonlari (DoD)

2 / 2 bajarildi

  • Inventar raqami avtomatik `FA00001` ko'rinishida beriladi va qo'lda tahrirda unikallik tekshiriladi (08 AC20)

    qa-ep-12-t04-s01 · 1 о аввал

  • Bosh office useri barcha filiallar aktivlarini ko'radi, filial useri faqat o'zinikini (08 AC19)

    qa-ep-12-t04-s01 · 1 о аввал

O'zgargan fayllar

9 ta

  • modified src/test/java/uz/erpbom/finance/service/FixedAssetServiceTest.java QA qaytargan organization_id filtr qamrovi qo'shildi (bosh office)
  • modified src/test/java/uz/erpbom/finance/controller/FixedAssetControllerTest.java
  • modified src/main/java/uz/erpbom/finance/service/FixedAssetService.java
  • modified src/main/java/uz/erpbom/finance/repository/FixedAssetRepository.java
  • modified src/main/java/uz/erpbom/finance/entity/FixedAsset.java
  • modified src/main/java/uz/erpbom/finance/dto/FixedAssetUpdateRequest.java
  • modified src/main/java/uz/erpbom/finance/dto/FixedAssetResponse.java
  • modified src/main/java/uz/erpbom/finance/dto/FixedAssetCreateRequest.java
  • modified src/main/java/uz/erpbom/finance/controller/FixedAssetController.java

Izoh qoldirish

Tarix

42 yozuv

  • 💬

    finalize-ep-12 izoh qoldirdi

    Drift topilmasi yopildi va QAYTA O'LCHOV bilan tasdiqlandi: kontrakt chegarasi endi generatsiya qilingan hujjatda ko'rinadi, topilma o'lchovda umuman yo'q (0 ta uchrash) va baseline'ga OLINMADI. Nazorat sinovi: chegara generatsiya qilingan hujjatdan sun'iy olib tashlanganda gate o'sha izni QAYTA topdi (weaker 52 -> 56) — ya'ni yo'qolishi haqiqiy tuzatish, ko'r nuqta emas. PR #14.

  • ⇄

    finalize-ep-12 statusni o'zgartirdi Review → Bajarildi

  • ✎

    finalize-ep-12 yangiladi

    Yangilandi: commit_sha, pr_url

  • ⇄

    backend-agent statusni o'zgartirdi Ishlanyapti → Review

  • ⇄

    backend-agent statusni o'zgartirdi Tayyor → Ishlanyapti

  • ✎

    backend-agent yangiladi

    Yangilandi: commit_sha

  • 💬

    backend-agent izoh qoldirdi

    Regressiya: @Validated CGLIB proksisi springdoc registratsiyasini buzmagani FinanceContractOperationCoverageTest (/v3/api-docs, 2/2) bilan tasdiqlandi. Shu kontrollerga tegadigan qolgan HTTP testlari ham yashil: RegistryAccess 2/2, Transfer 7/7, Depreciation 3/3, ImprovementRevaluation 7/7. openapi/ ga TEGILMADI.

  • 💬

    backend-agent izoh qoldirdi

    Test: FixedAssetControllerTest ga chegara IKKI TOMONDAN (100 belgi -> 200, 101 belgi -> 400 VALIDATION_ERROR, field=q). 11/11 yashil. TESKARI TEKSHIRUV: @Size vaqtincha olib tashlanganda listRejectsSearchTermLongerThanHundredCharacters yiqildi (expected 400, but was 200 OK); tiklangach yana yashil.

  • 💬

    backend-agent izoh qoldirdi

    Drift tuzatishi: GET /fixed-assets query q — kontrakt maxLength=100, na kontroller na FixedAssetService.list tekshirmagan. FixedAssetController sinfiga @Validated + parametrga @Size(max=100) qoshildi. Commit 3ac14f3.

  • 📄

    backend-agent fayllarni qayd etdi

    2 ta fayl qayd etildi

  • ⇄

    system statusni o'zgartirdi Ishlanyapti → Tayyor

    Avtomatik bo'shatildi: 60 daqiqa signal yo'q

  • ⚐

    system bo'shatdi

    Avtomatik bo'shatildi: 60 daqiqa signal yo'q

  • ⇄

    backend-agent statusni o'zgartirdi Bloklangan → Ishlanyapti

  • ⇄

    finalize-ep-12 statusni o'zgartirdi Ishlanyapti → Bloklangan

    OpenAPI drift (kod kontraktdan ZAIFROQ): GET /api/v1/fixed-assets query param `q` — kontraktda maxLength=100, kodda cheklov YO`Q (FixedAssetController.java:99 `@RequestParam(required=false) String q` — @Size yo`q; FixedAssetService.list ham tekshirmaydi). Tuzatish KODDA: `@Size(max=100)`. Kontrakt tegilmaydi. So`ng: scripts/openapi-diff.sh --write-baseline v1/finance qayta o`lchansin.

  • ⇄

    finalize-ep-12 statusni o'zgartirdi Bajarildi → Ishlanyapti

    Drift gate (openapi-diff v1/finance) qizil — yakunlash tekshiruvi qaytardi.

  • ✎

    pm-agent yangiladi

    Yangilandi: estimate_hours

  • ✎

    pm-agent yangiladi

    Yangilandi: estimate_hours

  • ✎

    team-lead-pm yangiladi

    Yangilandi: estimate_hours

  • ⇄

    qa-ep-12-t04-s01 statusni o'zgartirdi Review → Bajarildi

  • 💬

    qa-ep-12-t04-s01 izoh qoldirdi

    QA qayta tekshiruv (a75f7e3, izolyatsiyalangan worktree) — OTDI. Mutatsiya: FixedAssetRepository.java:37 shartiga bosh office uchun chetlab o'tish qo'shildi: (:organizationId IS NULL OR a.organizationId = :organizationId OR :scopeOrganizationIds IS NULL) Bu aynan avval TIRIK qolgan mutant (tenant doirasida scope=null -> organization_id filtri e'tiborsiz; eski 22 testning birortasi ham buni ushlamaydi). Natija: Tests run: 24, Failures: 2 -> MUTANT O'LDI. Yiqilganlar aynan ikkala yangi test: FixedAssetServiceTest.listFiltersByOrganizationIdEvenForTenantScopedViewer:337 FixedAssetControllerTest.listFiltersByOrganizationIdEvenForTenantScopedViewer:287 javap tasdig'i: target/classes dagi @Query konstantasida mutatsiya matni mavjud (bytecode'ga tushgan, yolg'on xulosa emas). Baseline (mutantsiz): Tests run: 24, Failures: 0, Errors: 0 — BUILD SUCCESS (ServiceTest 15, ControllerTest 9). Testlar haqiqiy: ikkala testda 2 xil organization_id (rootOrg + yangi Andijon filiali) yaratiladi, bosh office (finance.view/tenant) ?organization_id=<Andijon> bilan so'raydi; total_items=1 VA containsExactly(andijonAsset.id()) / items[0].id — ya'ni ikkinchi filial YO'Qligi ham tasdiqlangan. Tautologik yoki assert'siz da'vo yo'q. AC4183 buzilmagan: FA\d{5} avto-raqam, qo'lda FA00042, dublikat -> BusinessConflictException/DUPLICATE_INVENTORY_NUMBER va HTTP 409, update'da qayta nomlash konflikti — 6 test, hammasi yashil (a75f7e3 da faqat 2 test fayli o'zgargan, ishlab turgan kodga tegilmagan). Tozalik: grep -rn MUTANT src/ bo'sh, .orig qolmagan, worktree diff HEAD bilan bir xil, worktree olib tashlandi. Asosiy ish daraxti va HEAD ham MUTANT'siz.

  • ✓

    qa-ep-12-t04-s01 qabul mezonini belgiladi

    ✓ Bosh office useri barcha filiallar aktivlarini ko'radi, filial useri faqat o'zinikini (08 AC19)

  • ✎

    coder-ep-12-t04-s01 yangiladi

    Yangilandi: commit_sha

  • ⇄

    coder-ep-12-t04-s01 statusni o'zgartirdi Ishlanyapti → Review

  • 💬

    coder-ep-12-t04-s01 izoh qoldirdi

    QA topgan bo'shliq yopildi: FixedAssetServiceTest#listFiltersByOrganizationIdEvenForTenantScopedViewer va FixedAssetControllerTest#listFiltersByOrganizationIdEvenForTenantScopedViewer qo'shildi — bosh office organization_id bilan so'raganda ham natija shu filialga cheklanishi (ikkinchi filial YO'Qligi bilan) tasdiqlanadi. Mutant (repository:37 dagi organization_id shartini 1=1 bilan chetlab o'tish) qo'lda kiritilib testlar YIQILGANI ko'rildi, so'ng tikladim (grep MUTANT src/ bo'sh). 24/24 test yashil (mvn -Dtest=FixedAssetServiceTest,FixedAssetControllerTest). Ishlab turgan kodga tegilmadi. Commit a75f7e3.

  • ✓

    coder-ep-12-t04-s01 qabul mezonini belgiladi

    ✓ Bosh office useri barcha filiallar aktivlarini ko'radi, filial useri faqat o'zinikini (08 AC19)

  • 📄

    coder-ep-12-t04-s01 fayllarni qayd etdi

    2 ta fayl qayd etildi

  • ⇄

    coder-ep-12-t04-s01 statusni o'zgartirdi Tayyor → Ishlanyapti

    Agent ishni boshladi

  • ⚑

    coder-ep-12-t04-s01 ishga oldi

  • ⇄

    system statusni o'zgartirdi Ishlanyapti → Tayyor

    Avtomatik bo'shatildi: 60 daqiqa signal yo'q

  • ⚐

    system bo'shatdi

    Avtomatik bo'shatildi: 60 daqiqa signal yo'q

  • ⇄

    qa-ep-12-t04-s01 statusni o'zgartirdi Review → Ishlanyapti

  • 💬

    qa-ep-12-t04-s01 izoh qoldirdi

    QA (izolyatsiyalangan worktree, commit 668c8fc0). Baza: mvn -Dtest=FixedAssetServiceTest,FixedAssetControllerTest -> Tests run: 22, Failures: 0, Errors: 0 (14 + 8), BUILD SUCCESS. AC4183 (avto FA00001 + qo'lda unikallik) = OTDI. Kod: FixedAssetService.java:194-196 va :210-222 (DB DEFAULT sequence V45:64-65 + entityManager.refresh), :338-353 uq_fixed_assets_inventory_number -> 409 DUPLICATE_INVENTORY_NUMBER (kontrakt FixedAssetCatalogConflict). Mutatsiya: (M1) violatesUniqueInventoryNumberConstraint -> return false => 3 test yiqildi; (M5) avto raqamni qayta o'qish olib tashlandi => 3 test yiqildi. Fixture xilma-xil (FA00042/FA00077/FA00099/FA00111/FA00112, ikkita ketma-ket avto raqam solishtiriladi), summa assert'lari to'liq qiymat bilan ('480000000.00', '8000000.00') — qism satr solishtiruvi yo'q. AC4184 (node doirasi) = QAYTARILDI — KOD TO'G'RI, LEKIN MEZONNING BIR QISMI TESTSIZ. Spec 08_finance.md AC19 (2451-2453-qator) va qoida 45 (1613-1615): "Bosh office useri barcha filiallar aktivlarini ko'radi VA FILIAL BO'YICHA FILTRLAYDI". Kontrakt finance.yaml listFixedAssets tavsifi ham shunday. Amalda bu ishlaydi (FixedAssetRepository.java:37 — :organizationId filtri), lekin uni QO'RIQLAYDIGAN test yo'q: - listShowsAllOrganizationsForTenantScopedViewer (FixedAssetServiceTest.java:275) va listShowsAllOrganizationsForTenantScopedViewer (FixedAssetControllerTest.java:228) bosh office useri uchun organization_id NI UMUMAN BERMAYDI — faqat total=2 ni tekshiradi; - organization_id filtri faqat ORG_NODE doirali user testida (FixedAssetServiceTest.java:267) ishlatilgan, u yerda doira filtri baribir bo'sh natija beradi. MUTATSIYA DALILI: FixedAssetRepository.java:37 dagi shart (:organizationId IS NULL OR a.organizationId = :organizationId) -> (:organizationId IS NULL OR :scopeOrganizationIds IS NULL OR a.organizationId = :organizationId) (ya'ni bosh office uchun filial filtri butunlay e'tiborsiz qoldiriladi) => Tests run: 22, Failures: 0 — MUTANT TIRIK QOLDI, BUILD SUCCESS. Mutatsiya javap bilan bytecode'da tasdiqlandi (FixedAssetRepository.class const #21). NIMA QILISH KERAK (bitta test): FixedAssetServiceTest ga (yoki ControllerTest ga) test qo'shing: tenant doirali (bosh office) finance.view useri list(...) ni organization_id = <Andijon filiali id> bilan chaqirsa, natijada FAQAT Andijon aktivi kelsin (kutilgan: 1 element, id = Andijon aktivi; hozirgi qamrovda bu shart buzilsa ham hech qaysi test yiqilmaydi). Fixture'da kamida 2 xil organization_id bo'lsin (root + child) — mavjud listShowsAllOrganizationsForTenantScopedViewer fixture'i shunday, uni kengaytirish yetarli. QO'SHIMCHA KUZATUV (bloklamaydi, bu bargning mezoni emas): GET /fixed-assets/{id} (FixedAssetService.java:159) da node doirasi tekshirilmaydi — org_node doirali user boshqa filial aktivini id bo'yicha o'qiy oladi. Bu repo'dagi mavjud naqsh bilan izchil (MoneyAccountQueryService.java:87 ham shunday) va kontrakt getFixedAsset uchun doira qoidasi e'lon qilmagan, shu sabab defekt deb yozilmadi — EP-09 permission-scope infra ishida umumiy hal qilinsin. Cross-cutting: @Transactional(readOnly=true) list/get, @Transactional create/update (OK); tenant_id/schema ajratish yo'q — AR-1 (OK); FK'lar haqiqiy (organizations/employees/payments/users, V45:98-107) (OK); snake_case + ko'plik jadval (OK); pul numeric(18,2) (OK); fizik DELETE yo'q (OK); log'da parol/token yo'q (OK). FixedAssetResponse ning barcha required maydonlari javobda bor (id, organization_id, inventory_number, name, acquired_date, acquisition_cost, useful_life_months, salvage_value, accumulated_depreciation, book_value, status, created_at, updated_at). Mutant hisobi: 4 o'ldirilgan (M1 unikallik, M2 doira filtri, M3 organization_id noto'g'ri manbadan, M5 avto raqam), 1 TIRIK (M4 — yuqoridagi). Worktree tozalandi, `grep -rn MUTANT src/` bo'sh, `git diff HEAD` bo'sh.

  • ✓

    qa-ep-12-t04-s01 qabul mezonini belgiladi

    ✗ Bosh office useri barcha filiallar aktivlarini ko'radi, filial useri faqat o'zinikini (08 AC19)

  • ✓

    qa-ep-12-t04-s01 qabul mezonini belgiladi

    ✓ Inventar raqami avtomatik `FA00001` ko'rinishida beriladi va qo'lda tahrirda unikallik tekshiriladi (08 AC20)

  • ✎

    coder-ep-12-t04-s01 yangiladi

    Yangilandi: branch, commit_sha

  • ⇄

    coder-ep-12-t04-s01 statusni o'zgartirdi Ishlanyapti → Review

  • ✓

    coder-ep-12-t04-s01 qabul mezonini belgiladi

    ✓ Bosh office useri barcha filiallar aktivlarini ko'radi, filial useri faqat o'zinikini (08 AC19)

  • ✓

    coder-ep-12-t04-s01 qabul mezonini belgiladi

    ✓ Inventar raqami avtomatik `FA00001` ko'rinishida beriladi va qo'lda tahrirda unikallik tekshiriladi (08 AC20)

  • 📄

    coder-ep-12-t04-s01 fayllarni qayd etdi

    9 ta fayl qayd etildi

  • ⇄

    coder-ep-12-t04-s01 statusni o'zgartirdi Backlog → Ishlanyapti

    Agent ishni boshladi

  • ⚑

    coder-ep-12-t04-s01 ishga oldi

  • ✦

    pm-agent yaratdi

    Aktiv CRUD, inventar raqami, node doirasi

Ma'lumot

Agent
—
Olingan
—
Boshlandi
07.09.2026 18:53
Tugadi
09.09.2026 08:47
Baho
6 soat
Spec
erp/docs/modules/08_finance.md#2.9
Branch
feat/EP-12-erpbom-backend
Commit
58b15a397303

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-12-T04-S01/claim \
  -H "X-Agent: backend-dev-1"

Tugatgach:

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