Sub-task EP-11-T01-S07 Kritik 08_finance erpbom-backend

`expense_categories` seed — 8 tizim + 8 foydalanuvchi turi (S05/S06 orasida tushib qolgan)

Bajarildi
Status:

Tavsif

🔴 YETKAZILMAGAN QAMROV (lead topdi, 2026-09-06 — manba: EP-11-T06-S03 worker hisoboti + lead tekshiruvi). `expense_categories` jadvali V42 da YARATILGAN, lekin unga BIRORTA QATOR SEED QILINMAGAN — butun `src/main/resources/db/` da `INSERT INTO expense_categories` YO'Q (lead o'lchadi). Qanday tushib qolgan: `EP-11-T01-S05` (V42) ning `technical_notes` i seed ro'yxatini sanaydi va uni ochiq `(repeatable faylda, S06)` deb S06 ga uzatadi. `EP-11-T01-S06` ning O'Z ta'rifi esa faqat `Ruxsatlar seed — 14 ta yadro rule + moliya sozlamalari` — xarajat turlari u yerda UMUMAN nomlanmagan. Ikki barg orasidagi uzatish yo'qolgan; ikkalasi ham `done` bo'lgan. 🔴 TA'SIRI (runtime, testda ko'rinmaydi): `expense_entries` ga tizim kategoriyasi bilan yozadigan HAR BIR oqim buziladi — `cash_shortage` (kassa sanog'i farqini hal qilish, EP-11-T06-S03 endigina qurildi: `resolution=expense|income` runtime'da 404), `depreciation`, `production_brak`, `supplier_return_diff`, hamda qoida 64 ning uchtasi: `salary_monthly`, `picking_wage`, `delivery_fee`. ℹ️ Tekshirilgan va MUAMMO EMAS: `payment_due_soon_days` seed'da yo'q, lekin `PaymentDueDateScanJob.DEFAULT_DUE_SOON_DAYS = 3` fallback'i bor va AC36 testi kalit YO'Q holatini ataylab sinaydi — bu ongli dizayn, bu bargga kirmaydi.

Texnik ko'rsatma

Agent uchun

* Fayl — mavjud `R__` repeatable seed naqshi (`R__organization_and_system_user_seed.sql` uslubi): `INSERT ... SELECT ... FROM (VALUES ...) ... ON CONFLICT (code) DO NOTHING`. 🔴 `DO NOTHING` MAJBURIY — korxona `active`/nomni o'zgartirgan bo'lsa seed uni QAYTARMASIN (mavjud seed fayllaridagi bootstrap-default semantikasi). * `is_system = true` (8 ta, 08_finance §2.13a / qoida 64): `depreciation`, `write_off`, `production_brak`, `cash_shortage`, `supplier_return_diff`, `salary_monthly`, `picking_wage`, `delivery_fee` * `is_system = false` (8 ta): `rent`, `utilities`, `fuel`, `repair`, `bank_fee`, `tax`, `customs`, `other` * `expense_categories` — tenant-umumiy: `organization_id` ustuni YO'Q, kalit `UNIQUE(code)` (§2.13a, 2026-08-04 qarori). * `is_system=true` turlar CRUD'da o'chirilmaydi/tahrirlanmaydi (qoida 56) — bu allaqachon EP-11-T02-S03 da, TAKRORLANMASIN. * Nomlar (`name`) o'zbekcha ko'rinadigan qatlam (CLAUDE.md §12) — kod inglizcha `snake_case` bo'lib qoladi.

Qabul mezonlari (DoD)

4 / 4 bajarildi

  • Bo'sh bazada migratsiya yurgizilgach `expense_categories` da 16 qator bor: 8 tasi `is_system=true`, 8 tasi `is_system=false`

    qa-ep-11-t01-s07 · 1 о аввал

  • Migratsiya IKKI marta yurgizilganda dublikat qator yozilmaydi va korxona o'zgartirgan qiymat (mas. `active=false`) SEED tomonidan qaytarilmaydi

    qa-ep-11-t01-s07 · 1 о аввал

  • Kassa sanog'i farqini `resolution=employee_debt` bilan hal qilish `cash_shortage` kategoriyasini topadi va `expense_entries` qatori yoziladi — 404 CHIQMAYDI (EP-11-T06-S03 oqimi uchdan-uchgacha test bilan)

    qa-ep-11-t01-s07 · 1 о аввал

  • Qoida 64 ning uchala kodi (`salary_monthly`, `picking_wage`, `delivery_fee`) katalogda mavjud va `is_system=true`

    qa-ep-11-t01-s07 · 1 о аввал

O'zgargan fayllar

3 ta

  • modified src/test/java/uz/erpbom/finance/service/ExpenseCategorySeedTest.java
  • modified src/main/java/uz/erpbom/finance/service/CashCountService.java
  • modified src/main/resources/db/migration/R__finance_expense_categories_seed.sql

Izoh qoldirish

Tarix

18 yozuv

  • ✎

    finalize-ep-11 yangiladi

    Yangilandi: commit_sha, pr_url

  • ⇄

    qa-ep-11-t01-s07 statusni o'zgartirdi Review → Bajarildi

  • 💬

    qa-ep-11-t01-s07 izoh qoldirdi

    QA mustaqil tekshiruv — DONE. TESTLAR (izolyatsiyalangan worktree, surefire XML dan sanaldi): 27 test, 0 fail / 0 error — ExpenseCategorySeedTest 4, CashCountServiceTest 16, ExpenseCategoryServiceTest 7. MEZONLAR (har biri kod darajasida tekshirildi): - AC4245: test faqat count(*) emas, 16 kodning HAR BIRINI nomma-nom tekshiradi (fetchIsSystem rs.next() ni assert qiladi). Seed 16 kodi spec 2.13a ro-yxatiga aynan mos. - AC4246: test seed SQL ni classpath-dan HAQIQATAN o-qib IKKINCHI marta ijro etadi (executeSeedScriptAgain); rent active=false + nom o-zgarishi qaytarilmasligini tasdiqlaydi. ON CONFLICT (code) DO NOTHING mavjud, uq_expense_categories_code (V42) bilan ishlaydi. - AC4247: e2e testlar kategoriyani QO-LDA INSERT QILMAYDI — Flyway seed qatoriga tayanadi; expense_entries.category_id seed-dagi cash_shortage id bilan solishtiriladi (shunchaki "qator bor" emas). expense va income shoxlari qamralgan. employee_debt shoxi CashCountServiceTest-da (yashil). - AC4248: qoida 64 uchala kodi alohida is_system=true bo-yicha tekshiriladi. MUTATSIYA (4/4 O-LDIRILDI, hammasi target/classes da tasdiqlangan): 1. cash_shortage qatorini o-chirish -> 3 test yiqildi (count 15!=16; "No value present" x2). O-LDI. 2. DO NOTHING -> DO UPDATE SET active=true,name=EXCLUDED.name -> idempotentlik testi yiqildi ("active=false ni QAYTARMASLIGI kerak"). O-LDI. 3. delivery_fee is_system=false -> yiqildi (8 kutilgan, 7 olingan). O-LDI. 4. QO-SHIMCHA (fixture xilma-xilligi): bank_fee -> bankfee, sanoq 16 va 8/8 SAQLANDI -> baribir yiqildi ("kod bank_fee topilishi kerak"). Ya-ni sanoqqa tayanmaydi. GIGIYENA: V42 diff BO-SH (Flyway checksum xavfsiz), openapi/ diff BO-SH, git grep MUTANT HEAD bo-sh, worktree o-chirildi, asosiy daraxt toza, commit xabarida AI atributi YO-Q. TOPILMA (bloklovchi EMAS, keyingi bargga tavsiya) — CashCountServiceTest.java:458 ensureCashShortageCategoryExists() endi o-lik kod VA niqoblovchi: mutant 1 da (seed-dan cash_shortage o-chirilgan) CashCountServiceTest 16/16 YASHIL qoldi, chunki helper kategoriyani o-zi yaratadi. Aynan shu barg tuzatayotgan nuqson sinfi. Yangi ExpenseCategorySeedTest haqiqiy qo-riqchi bo-lgani uchun bu barg qaytarilmaydi, lekin helper olib tashlanishi kerak. Kichik eslatma: seedIsIdempotent... testi rent qatorini o-zidan keyin tiklamaydi. Hozir zararsiz (Testcontainers konteyneri klassga xos, qolgan 3 test rent active/name ni o-qimaydi), lekin bu klassga kelajakda active bo-yicha assert qo-shilsa tartibga bog-liq bo-lib qoladi.

  • ✓

    qa-ep-11-t01-s07 qabul mezonini belgiladi

    ✓ Qoida 64 ning uchala kodi (`salary_monthly`, `picking_wage`, `delivery_fee`) katalogda mavjud va `is_system=true`

  • ✓

    qa-ep-11-t01-s07 qabul mezonini belgiladi

    ✓ Kassa sanog'i farqini `resolution=employee_debt` bilan hal qilish `cash_shortage` kategoriyasini topadi va `expense_entries` qatori yoziladi — 404 CHIQMAYDI (EP-11-T06-S03 oqimi uchdan-uchgacha test bilan)

  • ✓

    qa-ep-11-t01-s07 qabul mezonini belgiladi

    ✓ Migratsiya IKKI marta yurgizilganda dublikat qator yozilmaydi va korxona o'zgartirgan qiymat (mas. `active=false`) SEED tomonidan qaytarilmaydi

  • ✓

    qa-ep-11-t01-s07 qabul mezonini belgiladi

    ✓ Bo'sh bazada migratsiya yurgizilgach `expense_categories` da 16 qator bor: 8 tasi `is_system=true`, 8 tasi `is_system=false`

  • ✎

    coder-ep-11-t01-s07 yangiladi

    Yangilandi: branch, commit_sha

  • ⇄

    coder-ep-11-t01-s07 statusni o'zgartirdi Ishlanyapti → Review

  • 💬

    coder-ep-11-t01-s07 izoh qoldirdi

    AC4247 matni resolution=employee_debt deydi, lekin shu yo'l expense_categories'ni umuman ishlatmaydi (LedgerEntryService, source_type=cash_shortage). expense_categories'ni haqiqatan iste'mol qiladigan yo'l — resolution=expense/income (CashCountService#recordExpenseOrIncome). Shuning uchun uchdan-uchgacha testlar ExpenseCategorySeedTest#resolveExpenseWritesEntryLinkedToRealSeededCashShortageCategory va #resolveIncomeWritesEntryLinkedToRealSeededCashShortageCategory — ikkalasi ham cash_shortage kategoriyasini QO'LDA yozmasdan, real R__ seed natijasiga tayanadi. employee_debt qamrovi CashCountServiceTest'da allaqachon bor, takrorlanmadi.

  • ✓

    coder-ep-11-t01-s07 qabul mezonini belgiladi

    ✓ Qoida 64 ning uchala kodi (`salary_monthly`, `picking_wage`, `delivery_fee`) katalogda mavjud va `is_system=true`

  • ✓

    coder-ep-11-t01-s07 qabul mezonini belgiladi

    ✓ Kassa sanog'i farqini `resolution=employee_debt` bilan hal qilish `cash_shortage` kategoriyasini topadi va `expense_entries` qatori yoziladi — 404 CHIQMAYDI (EP-11-T06-S03 oqimi uchdan-uchgacha test bilan)

  • ✓

    coder-ep-11-t01-s07 qabul mezonini belgiladi

    ✓ Migratsiya IKKI marta yurgizilganda dublikat qator yozilmaydi va korxona o'zgartirgan qiymat (mas. `active=false`) SEED tomonidan qaytarilmaydi

  • ✓

    coder-ep-11-t01-s07 qabul mezonini belgiladi

    ✓ Bo'sh bazada migratsiya yurgizilgach `expense_categories` da 16 qator bor: 8 tasi `is_system=true`, 8 tasi `is_system=false`

  • 📄

    coder-ep-11-t01-s07 fayllarni qayd etdi

    3 ta fayl qayd etildi

  • ⇄

    coder-ep-11-t01-s07 statusni o'zgartirdi Backlog → Ishlanyapti

    Agent ishni boshladi

  • ⚑

    coder-ep-11-t01-s07 ishga oldi

  • ✦

    unknown-agent yaratdi

    `expense_categories` seed — 8 tizim + 8 foydalanuvchi turi (S05/S06 orasida tushib qolgan)

Ma'lumot

Agent
coder-ep-11-t01-s07
Olingan
1 о аввал
Boshlandi
06.09.2026 12:18
Tugadi
06.09.2026 12:41
Baho
2 soat
Spec
erp/docs/modules/08_finance.md#2.13
Branch
feat/EP-11-erpbom-backend
Commit
ad9e1ee2c474

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-11-T01-S07/claim \
  -H "X-Agent: backend-dev-1"

Tugatgach:

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