MoneyAccountService — CRUD, doira so'rovi, kassir egaligi
Tavsif
Texnik ko'rsatma
Agent uchun
Qabul mezonlari (DoD)
3 / 3 bajarildi
-
Node kesimidagi ro'yxatda `bank` hisobi ham ko'rinadi (`organization_id IS NULL` bandi ishlaydi) — test bilan tasdiqlangan
qa-ep-11-t04-s01 · 1 о аввал
-
Kassir o'ziga biriktirilmagan kassada kirim/chiqim qila olmaydi (08 AC14)
qa-ep-11-t04-s01 · 1 о аввал
-
Qoldig'i 0 bo'lmagan kassani yopib bo'lmaydi
qa-ep-11-t04-s01 · 1 о аввал
O'zgargan fayllar
10 ta
-
modified
src/test/java/uz/erpbom/finance/controller/MoneyAccountControllerIntegrationTest.java -
modified
src/test/java/uz/erpbom/finance/service/MoneyAccountServiceTest.java -
modified
src/test/java/uz/erpbom/auth/PermissionsAndCurrenciesSeedMigrationTest.java -
modified
src/test/java/uz/erpbom/auth/PermissionGroupsAndItemsSeedMigrationTest.java -
modified
src/test/java/uz/erpbom/auth/PermissionCatalogStaticTest.java -
modified
src/main/resources/db/migration/R__permissions_and_currencies_seed.sql -
modified
src/main/java/uz/erpbom/finance/service/MoneyAccountService.java -
modified
src/main/java/uz/erpbom/finance/dto/MoneyAccountUpdateRequest.java -
modified
src/main/java/uz/erpbom/finance/dto/MoneyAccountCreateRequest.java -
modified
src/main/java/uz/erpbom/finance/controller/MoneyAccountController.java
Izoh qoldirish
Tarix
33 yozuv
-
✎
pm-agent yangiladi
Yangilandi: estimate_hours
-
✎
pm-agent yangiladi
Yangilandi: estimate_hours
-
✎
team-lead-pm yangiladi
Yangilandi: estimate_hours
-
✎
finalize-ep-11 yangiladi
Yangilandi: pr_url
-
⇄
qa-ep-11-t04-s01 statusni o'zgartirdi Review → Bajarildi
-
💬
qa-ep-11-t04-s01 izoh qoldirdi
QA 2-tur — 888ca8c QABUL QILINDI (done). 1) Kod: 888ca8c faqat MoneyAccountControllerIntegrationTest.java ga tegadi (223+/1-), src/main/ TEGILMAGAN. @Disabled / assumeTrue / kommentga olingan assertion YO`Q. 9 yangi testning hammasida haqiqiy assertion bor (status kodi + javob tanasi maydonlari). 2) 403 testlari m6 ni HAQIQATAN ushlaydi: viewerToken = finance.view BOR + money_account.create/.edit YO`Q (cleanState da alohida creatorToken yaratilgan). auth_logs deny yozuvi countDenyAuthLogs(viewerUserId, `money_account.create`/`.edit`) = 1 bilan tekshirilgan — rule kodi ham pinlangan. 3) 201 testi kontrakt snake_case maydonlarini tasdiqlaydi: account_type, name, organization_id, currency_code, responsible_employee_id, current_balance=0.00, frozen_amount=0.00, available_balance=0.00, active=true, created_at/updated_at mavjud. 409 testlari `code` ni AYNAN tekshiradi: DUPLICATE_MONEY_ACCOUNT_NAME va ACCOUNT_BALANCE_NOT_ZERO. creatingRejectsAccountTypeOutsideContractEnum — `bank` VA `employee_hold` IKKALASI ham (List.of loop + .as() deskriptor), 400 VALIDATION_ERROR. 4) MUTATSIYA — izolyatsiyalangan worktree (git worktree add /tmp/qa2-EP-11-T04-S01 888ca8c), har biri javap bilan bytecode`da tasdiqlangan. 5/5 O`LDI: m6a @RequirePermission("money_account.create")->"finance.view" -> O`LDI: creatingWithoutCreatePermissionReturnsForbiddenAndAudits (expected 403, was 201 CREATED). javap: create() RequirePermission(value="finance.view"), const pool`da money_account.create YO`Q. m6b @RequirePermission("money_account.edit")->"finance.view" -> O`LDI: updatingWithoutEditPermissionReturnsForbiddenAndAudits (expected 403, was 400). javap: update() value="finance.view", money_account.edit const pool`da 0 marta. m7 @ResponseStatus(CREATED)->OK -> O`LDI: 2 test (creatingReturnsCreatedWith... va creatingWithDuplicateName..., expected 201, was 200). javap: ResponseStatus value=HttpStatus.OK. m8 qoida 16 qo`riqchisi (requireZeroBalance(account), MoneyAccountService:139) o`chirildi -> O`LDI: closingAccountWithNonZeroBalanceReturnsConflict (expected 409, was 200). javap: invokespecial requireZeroBalance chaqiruvi yo`q. m9 ERROR_DUPLICATE_NAME satri o`zgartirildi -> O`LDI: creatingWithDuplicateNameInSameOrganizationReturnsConflict (expected DUPLICATE_MONEY_ACCOUNT_NAME, was MUTANT_M9_OTHER_CODE). javap: ldc_w String MUTANT_M9_OTHER_CODE. Worktree o`chirildi; `grep -rn MUTANT src/` va `git grep -n MUTANT HEAD` — ikkalasi bo`sh; ishchi daraxt toza (888ca8c). 5) Testlar (bloklovchi, flock ostida, rm -rf target/surefire-reports dan keyin): MoneyAccountControllerIntegrationTest 16 tests, 0 fail, 0 err, 0 skip MoneyAccountServiceTest 21 tests, 0 fail, 0 err, 0 skip MoneyAccountQueryServiceTest 7 tests, 0 fail, 0 err, 0 skip JAMI 44/44 yashil. Mezonlar AC4071/4072/4073 1-turda servis qatlamida tasdiqlangan edi; endi HTTP qatlamida ham qoplandi. Tautologik/bo`sh test topilmadi. Eslatma (BU BARG QAMROVIDA EMAS, PM uchun): 400 javobidagi `fields[].field` camelCase qaytadi (`accountType`), chunki GlobalExceptionHandler:199 `fe.getField()` ni to`g`ridan-to`g`ri ishlatadi — bu butun ilova uchun umumiy, avvaldan mavjud xatti-harakat (CustomerCredentialsControllerTest esa snake_case `user_id` kutadi). Test haqiqiy xatti-harakatni to`g`ri hujjatlashtiradi; kontrakt darajasidagi bu nomuvofiqlik alohida cross-cutting ish sifatida ko`rilishi kerak.
-
💬
coder-ep-11-t04-s01 izoh qoldirdi
QA topilmasi tuzatildi: MoneyAccountControllerIntegrationTest.java ga 9 ta yangi HTTP-darajasidagi test qoshildi (POST/PUT). m6 (RequirePermission money_account.create/.edit -> finance.view) va m7 (201 CREATED -> 200 OK) ISOLYATSIYALANGAN worktree (/tmp/fix-EP-11-T04-S01, HEAD=888ca8c) da qayta tekshirildi - ikkalasi ham ENDI YIQILADI (avval 35/35 test yashil qolardi). Yangi testlar: creatingWithoutCreatePermissionReturnsForbiddenAndAudits, updatingWithoutEditPermissionReturnsForbiddenAndAudits (403+auth_logs deny), creatingReturnsCreatedWithContractFieldNamesAndZeroedOpeningBalances (201, snake_case, 0/0/true), updatingReturns200AndClosesAccountWhenBalanceIsZero (200), creatingWithDuplicateNameInSameOrganizationReturnsConflict (409 DUPLICATE_MONEY_ACCOUNT_NAME), closingAccountWithNonZeroBalanceReturnsConflict (409 ACCOUNT_BALANCE_NOT_ZERO), creatingWithUnknownOrganizationReturnsNotFound / creatingWithUnknownResponsibleEmployeeReturnsNotFound (404), creatingRejectsAccountTypeOutsideContractEnum (400 VALIDATION_ERROR, bank/employee_hold). Toliq toplam 16/16 va regressiya (MoneyAccountServiceTest 21/21, MoneyAccountQueryServiceTest 7/7) yashil. Servis qatlamiga tegilmadi. Commit 888ca8c.
-
⇄
coder-ep-11-t04-s01 statusni o'zgartirdi Ishlanyapti → Review
-
⇄
coder-ep-11-t04-s01 statusni o'zgartirdi Tayyor → Ishlanyapti
-
✎
coder-ep-11-t04-s01 yangiladi
Yangilandi: commit_sha
-
📄
coder-ep-11-t04-s01 fayllarni qayd etdi
1 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
-
⇄
qa-ep-11-t04-s01 statusni o'zgartirdi Review → Ishlanyapti
-
💬
qa-ep-11-t04-s01 izoh qoldirdi
QA (qa-EP-11-T04-S01, commit 2c8aec7) — QAYTARILDI: in_progress. Uchala AC (4071/4072/4073) SERVIS qatlamida tasdiqlandi, lekin POST/PUT uchun HTTP darajasidagi test UMUMAN YO'Q — bu qamrov nuqsoni. === YASHIL TESTLAR (o'zim yurgizdim, izolyatsiyalangan git worktree'da, 2c8aec7) === MoneyAccountServiceTest 21/21 · MoneyAccountQueryServiceTest 7/7 · MoneyAccountControllerIntegrationTest 7/7 · PermissionCatalogStaticTest 5/5 · PermissionsAndCurrenciesSeedMigrationTest 9/9 · PermissionGroupsAndItemsSeedMigrationTest 10/10. @Disabled/assumeTrue/kommentga olingan assertion yo'q. === MUTATSIYA — 5 mutant O'LDI (test yolg'onni ushlaydi) === m1 requireZeroBalance() -> no-op (javap: metod tanasi faqat 'return') => updateRejectsClosingAccountWithNonZeroBalance YIQILDI (AC4073 ✓) m2 requireResponsibleCashier tenglik teskari (javap: ifne -> ifeq) => 2 test YIQILDI (AC4072 ✓) m3 JPQL dan ' OR a.organizationId IS NULL' olib tashlandi (MoneyAccountRepository.java:108) => nodeScopedListReturnsSameBankAccountForEveryNodeWithoutDuplication YIQILDI (AC4071 ✓) m4 requireCashType() -> no-op => createRejectsEmployeeHold/BankTypeAtServiceLayer 2 test YIQILDI (servis enum'ga tayanmaydi ✓) m5 DUPLICATE_MONEY_ACCOUNT_NAME -> ACCOUNT_BUSY => 2 test YIQILDI ✓ Fixture xilma-xilligi TEKSHIRILDI va YETARLI: current_balance 0 VA 125000.00; organization_id root VA child node (+ QueryServiceTest'da NULL li bank qatori); account_type cash + employee_hold + bank. Mutantlar tozalandi (grep -rn MUTANT src/ va git grep MUTANT HEAD — ikkalasi ham bo'sh), worktree o'chirildi. === 🔴 NUQSON 1 (BLOKLOVCHI) — POST/PUT uchun HTTP darajasidagi test yo'q === Fayl: src/test/java/uz/erpbom/finance/controller/MoneyAccountControllerIntegrationTest.java — commit 2c8aec7 bu faylga UMUMAN tegmagan; ichidagi 7 test faqat GET (list/get/balance/turnover). ISBOT (mutatsiya m6+m7, ikkalasi ham TIRIK QOLDI): MoneyAccountController.java:86 @RequirePermission("money_account.create") -> "finance.view" MoneyAccountController.java:93 @RequirePermission("money_account.edit") -> "finance.view" MoneyAccountController.java:88 @ResponseStatus(HttpStatus.CREATED) -> HttpStatus.OK Natija: 35 test (21+7+7) HAMMASI YASHIL. javap tasdiqladi: kompilyatsiya qilingan klassda 'money_account.create'/'money_account.edit' satri 0 marta uchraydi, oltala metodda ham value="finance.view", ResponseStatus=OK. Ya'ni: faqat 'finance.view' li user o'ziga kassa ochib qo'ysa ham HECH BIR test yiqilmaydi — bu aynan 09_auth Q59 p.5 / 08_finance §7 da katalog qatoriga qotirilgan SoD xavfi (kassir o'ziga kassa ochib sanoq farqini yashiradi). KERAK (naqsh — WarehouseControllerIntegrationTest.java, coder javadocda "so'zma-so'z kuzatilgan" degan fayl): (a) :138 allEndpointsRejectRequestsWithoutRequiredPermission naqshi — money_account.create/.edit YO'Q (faqat finance.view) li token bilan POST va PUT -> 403 + body.code=FORBIDDEN + auth_logs deny qatori; (b) :165 naqshi — POST -> 201 va javob JSON'ida kontrakt snake_case maydonlari (account_type, current_balance, frozen_amount, available_balance, organization_id, responsible_employee_id, active); PUT -> 200; (c) 409 kodlari HTTP darajasida: DUPLICATE_MONEY_ACCOUNT_NAME va ACCOUNT_BALANCE_NOT_ZERO (kontrakt MoneyAccountCatalogConflict hozir uchdan-uchi ham faqat servis istisnosi darajasida tekshirilgan, javob tanasi tekshirilmagan); (d) :184 naqshi — noma'lum organization_id / responsible_employee_id -> 404 NOT_FOUND; (e) account_type="bank" va "employee_hold" HTTP so'rovida -> 400 VALIDATION_ERROR (DTO @Pattern qatlami hozir HECH QAYERDA tekshirilmagan — faqat servis qatlami tekshirilgan). === 🟡 NUQSON 2 (bloklamaydi, qarz) — partial unikal indeks qamrovsiz === MoneyAccountService.java:~296 violatesUniqueNameConstraint() ikki constraint nomini xaritalaydi, lekin test faqat uq_money_accounts_organization_id_name ni uradi; uq_money_accounts_name (WHERE organization_id IS NULL) shoxobchasi bitta ham test bilan qoplanmagan (v1 da bank ochilmagani uchun bloklamayapman). === ✅ TO'G'RI TOPILGANLAR (qayta ishlashga hojat yo'q) === * Kontrakt mosligi: DTO maydonlari kontrakt bilan aynan (Create: account_type/name/organization_id/currency_code/responsible_employee_id, @Pattern="cash"; Update: name+active majburiy, responsible_employee_id nullable; taqiqlangan maydonlarning BIRORTASI yo'q). DELETE endpoint yozilmagan ✓. PERIOD_CLOSED yo'q ✓. current_balance/frozen_amount/active so'rovda yo'q, server 0/0/true qo'yadi (test bilan tasdiqlangan) ✓. * Ko'r-ko'rona DataIntegrityViolationException -> 409 QILINMAGAN: faqat constraint NOMI bo'yicha, boshqasi yuqoriga o'tadi ✓. * active false->true ga ortiqcha to'siq QO'YILMAGAN ✓ (requireZeroBalance faqat Boolean.FALSE.equals(request.active()) da chaqiriladi). * @Transactional: create/update yozuv, requireResponsibleCashier readOnly=true ✓. Soft-delete (fizik DELETE yo'q) ✓. tenant_id/schema mexanikasi yo'q ✓. Katalog 136->138: seed'ga 2 qator (08_finance, org_node), uchala test klassi yangilangan, 08_finance kesimi 30->32, owner=138, repeatable migratsiya IKKINCHI yurishdan keyin ham 138 (test bor) ✓; grep -rn "\b136\b" src/ — faqat javadoc "136 -> 138" izohlari qoldi, qotirilgan qiymat yo'q ✓. === 🔴 AC4072 BO'YICHA HUKM (keyingi barglar uchun QARZ) === requireResponsibleCashier() guard'i KOD DARAJASIDA TO'G'RI (mas'ul==joriy hodim; null mas'ul -> rad; employee_hold DOIM rad; OwnershipDeniedException -> 403 + objectType=money_accounts; noma'lum hisob -> 404) va m2 mutanti bilan qoplangani isbotlandi. LEKIN CHAQIRUVCHISI YO'Q. Bugun tizimda kassir kirim/chiqim qiladigan HTTP yo'li umuman yo'q (finance/controller/ da yagona fayl — MoneyAccountController; MoneyMovementService.record() ochiq yo'lsiz primitiv, ExpenseEntry adapterlari tizim tug'diradigan pulsiz xarajat), shuning uchun bu leaf'da AC4072 ni MET deb belgiladim. ⚠️ QARZ: EP-11-T05 (to'lov) / T06 (o'tkazma) / T07 (xarajat) HAR BIRI money_movements yozishdan OLDIN MoneyAccountService.requireResponsibleCashier(accountId, actingEmployeeId) ni CHAQIRISHI SHART (08 qoida 36 / E7 / AC14); money_transfer.approve esa uni CHAQIRMASLIGI kerak (qoida 36 istisnosi — ko'radi/tasdiqlaydi, yozuv kiritmaydi). MoneyMovementService.record() ning o'zida bu tekshiruv YO'Q — ya'ni qo'riqchi chaqiruvchilarda unutilsa hech narsa ushlamaydi. Qaytarish sababi: yuqoridagi NUQSON 1 (a)-(e). Servis testlari yaxshi — faqat MoneyAccountControllerIntegrationTest ga POST/PUT bloki qo'shilsin.
-
✓
qa-ep-11-t04-s01 qabul mezonini belgiladi
✓ Qoldig'i 0 bo'lmagan kassani yopib bo'lmaydi
-
✓
qa-ep-11-t04-s01 qabul mezonini belgiladi
✓ Kassir o'ziga biriktirilmagan kassada kirim/chiqim qila olmaydi (08 AC14)
-
✓
qa-ep-11-t04-s01 qabul mezonini belgiladi
✓ Node kesimidagi ro'yxatda `bank` hisobi ham ko'rinadi (`organization_id IS NULL` bandi ishlaydi) — test bilan tasdiqlangan
-
⇄
coder-ep-11-t04-s01 statusni o'zgartirdi Ishlanyapti → Review
-
💬
coder-ep-11-t04-s01 izoh qoldirdi
Q59=A bilan blok yopilgach kod yozildi. POST/PUT /api/v1/money-accounts (money_account.create/.edit) — cash-only, DTO @Pattern + servis darajasida ikkinchi tekshiruv (enum'ga tayanmaydi). Yopish (active=false) uchun current_balance=0 qo'riqchisi (409 ACCOUNT_BALANCE_NOT_ZERO) — FOR UPDATE + lock_timoeut=3s bilan, timeout'da 409 ACCOUNT_BUSY. Qoida 11 (org-node + bank) allaqachon MoneyAccountRepository.search'da to'g'ri edi — MoneyAccountQueryServiceTest'dagi mavjud nodeScopedListReturnsSameBankAccountForEveryNodeWithoutDuplication testi AC4071 uchun yetarli, kod o'zgarmadi. Qoida 36 (kassir egaligi, AC4072) — MoneyAccountService.requireResponsibleCashier(accountId, actingEmployeeId) qayta ishlatiladigan guard sifatida qo'shildi (OwnershipDeniedException.asForbidden); hech qanday controller hali chaqirmaydi, chunki to'lov/o'tkazma/xarajat yozuvchilari (EP-11-T05/T06/T07) hali backlog'da — MoneyAccountServiceTest'da to'g'ridan-to'g'ri unit darajasida tasdiqlangan. Rule katalogi 136->138 (money_account.create/.edit, org_node); uchta test klassidagi kutilgan sonlar (PermissionCatalogStaticTest/PermissionsAndCurrenciesSeedMigrationTest/PermissionGroupsAndItemsSeedMigrationTest, shu jumladan 08_finance modul kesimi 30->32) yangilandi. Testlar: MoneyAccountServiceTest 21/21, MoneyAccountControllerIntegrationTest+MoneyAccountQueryServiceTest+MoneyAccountServiceTest birga 35/35, uchta permission test klassi 24/24 — hammasi yashil.
-
✎
coder-ep-11-t04-s01 yangiladi
Yangilandi: branch, commit_sha
-
✓
coder-ep-11-t04-s01 qabul mezonini belgiladi
✓ Qoldig'i 0 bo'lmagan kassani yopib bo'lmaydi
-
✓
coder-ep-11-t04-s01 qabul mezonini belgiladi
✓ Kassir o'ziga biriktirilmagan kassada kirim/chiqim qila olmaydi (08 AC14)
-
✓
coder-ep-11-t04-s01 qabul mezonini belgiladi
✓ Node kesimidagi ro'yxatda `bank` hisobi ham ko'rinadi (`organization_id IS NULL` bandi ishlaydi) — test bilan tasdiqlangan
-
📄
coder-ep-11-t04-s01 fayllarni qayd etdi
9 ta fayl qayd etildi
-
⇄
coder-ep-11-t04-s01 statusni o'zgartirdi Backlog → Ishlanyapti
Agent ishni boshladi
-
⚑
coder-ep-11-t04-s01 ishga oldi
-
⇄
unknown-agent statusni o'zgartirdi Bloklangan → Backlog
-
💬
unknown-agent izoh qoldirdi
UNBLOCK (team lead, 2026-09-05). Biznes bo'shlig'i YOPILDI: erp/ §5 sikli -> 09_auth Q59 = A (erp commit 806ae27) — 🆕 money_account.create + 🆕 money_account.edit, katalog 136 -> 138, doira org_node (bank uchun tenant). .close alohida kod EMAS (.edit active=false ni qamraydi; yopish qo'riqchisi — 08 qoida 16 current_balance=0). employee_hold QAMRALMAYDI — tizim ochadi (08 qoida 37, 09_auth §7.7 qator 24 = T), qo'lda ochish taqiqlanadi. Kontrakt 'o'zgarish' rejimida kengaytirildi: commit b3fc179 — POST /api/v1/money-accounts (createMoneyAccount, 201) + PUT /api/v1/money-accounts/{id} (updateMoneyAccount, 200); DELETE YO'Q; so'rov enum MoneyAccountCreateType=[cash] (employee_hold bloklangan; bank — Q28 bo'yicha v1 dan tashqarida); 409 ACCOUNT_BALANCE_NOT_ZERO va 409 DUPLICATE_MONEY_ACCOUNT_NAME. Kodda: permissions.json 136 -> 138 + owner shabloni. Barg ochildi.
-
💬
unknown-agent izoh qoldirdi
✅ BIZNES BO SHLIGI YOPILDI (2026-09-05, 09_auth Q59 = A). Foydalanuvchi qarori: 2 ta yangi rule -- money_account.create va money_account.edit; katalog 136 -> 138; doira org_node (warehouse.create bilan bir xil, chunki kassa node-lokal); bank (organization_id IS NULL) uchun ayni kod tenant doirasi bilan beriladi (§6.1 naqshi). .close ALOHIDA KOD EMAS -- .edit active=false ni qamraydi (organization.edit naqshi), yopishning qoriqchisi esa 08 qoida 16 (current_balance=0), u huquqdan qat i nazar ishlaydi va EP-11-T04-S03 da kodda bor. employee_hold QAMRALMAYDI -- tizim ochadi (qoida 37); qolda ochish taqiqlanadi. 🔴 SoD: bu kod oddiy kassirga berilmasin (payment.create/.confirm + cash.count bilan birga u oziga kassa ochib sanoq farqini yashira oladi). Doc yozildi: 09_auth §7.2 · §7.6.1 · §7.7 (qator 23 B + 24 T) · jurnal Q59 · changelog; 08_finance §7 (2 qator) + changelog; GLOSSARY; CROSS_CUTTING L. BARG HALI ready EMAS -- avval EP-11-T00 kontrakt "ozgarish" rejimida /api/v1/money-accounts ga POST va PUT qoshilishi kerak (contract-freeze.md), va permissions.json seed 136 -> 138 qilinishi kerak. Shundan keyin blocked -> ready.
-
💬
team-lead-pm izoh qoldirdi
✅ BIZNES JAVOBI OLINDI (2026-09-04, foydalanuvchi — variant A, warehouse.* naqshi): 09_auth katalogiga 3 ta yangi rule qo'shiladi — money_account.create / money_account.edit / money_account.close; doira org_node (money_accounts node-lokal; organization_id NULLABLE bo'lgani uchun so'rov sharti Q35=C2 dagi "organization_id = :node OR organization_id IS NULL"). ⏳ HALI READY EMAS: avval erp/docs ga yozilishi shart (09_auth §7.2 + §7.7, 08_finance §7, ikkala changelog — kichik tuzatish, modullar done qoladi), keyin pmboard YAML qayta import, keyin kontrakt agenti "Kontrakt o'zgarishi" rejimida /money-accounts ga POST/PUT/DELETE qo'shadi. Batafsil: erp/docs/00_CAPTURE.md #45.
-
⇄
team-lead-pm statusni o'zgartirdi Backlog → Bloklangan
SPEC BO'SHLIG'I (biznes) — money_accounts entitisini boshqarish (yaratish/tahrirlash/yopish) uchun 09_auth §7.2 katalogida rule YO'Q. Mavjudlari (payment.*, money_transfer.*, cash.count/.count_resolve, ledger.adjust, finance.view) faqat hisob USTIDA ishlaydi. Shu sababdan EP-11-T00 kontraktida /api/v1/money-accounts faqat o'qish uchun ochildi (POST/PUT/DELETE yozilmadi). Bu §7.7 qator 7 (warehouses -> Q26) va Q53/Q54 (organizations) naqshining uchinchi takrori. Rule to'qib chiqarilmadi (§17.5 qoida 4). Yechim: erp/ §5 savol sikli -> 09_auth ga rule qo'shilsa YAML tuzatilib qayta import, keyin kontrakt "o'zgarish" rejimida kengaytiriladi. Bloklanmagan qismi: qoida 11 doira so'rovi va qoida 36 kassir egaligi tekshiruvi (o'qish tomoni) — kerak bo'lsa alohida bargga ajratiladi.
-
✦
pm-agent yaratdi
MoneyAccountService — CRUD, doira so'rovi, kassir egaligi
Ma'lumot
- Agent
- —
- Olingan
- —
- Boshlandi
- 05.09.2026 04:30
- Tugadi
- 05.09.2026 06:06
- Baho
- 6 soat
- Spec
- erp/docs/modules/08_finance.md#5
- Branch
- feat/EP-11-erpbom-backend
- Commit
- 888ca8c51bc7
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-T04-S01/claim \ -H "X-Agent: backend-dev-1"
Tugatgach:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-11-T04-S01/status \
-H "X-Agent: backend-dev-1" \
-H "Content-Type: application/json" \
-d '{"status":"review","note":"..."}'