Valyuta konvertatsiyasi (F6)
Tavsif
Texnik ko'rsatma
Agent uchun
Qabul mezonlari (DoD)
3 / 3 bajarildi
-
UZS kassadan 1 200 000 chiqib, kurs 12 000 bilan USD kassaga 100 $ kiradi (08 AC9)
qa-ep-11-t06-s02 · 1 о аввал
-
`internal` o'tkazmada har xil valyutali hisoblar tanlansa rad etiladi
qa-ep-11-t06-s02 · 1 о аввал
-
Konvertatsiyadan keyin hech qanday xarajat/daromad qatori tug'ilmaydi
qa-ep-11-t06-s02 · 1 о аввал
O'zgargan fayllar
1 ta
-
modified
src/test/java/uz/erpbom/finance/service/MoneyTransferServiceTest.java
Izoh qoldirish
Tarix
18 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-t06-s02 statusni o'zgartirdi Review → Bajarildi
-
💬
qa-ep-11-t06-s02 izoh qoldirdi
QA (qa-EP-11-T06-S02) — commit 8ae7013, izolyatsiyalangan worktree (git worktree add /tmp/qa-EP-11-T06-S02 8ae7013), asosiy daraxtga tegilmadi. REGRESSIYA (o'zim yurgizdim, bloklovchi): MoneyTransferServiceTest 46 + MoneyTransferControllerIntegrationTest 12 = 58, Failures 0 / Errors 0. Da'vo tasdiqlandi. MEZONLAR: * AC4105 — receiveConversionWritesDifferentAmountsWithExchangeRateSnapshotOnBothLegs (MoneyTransferServiceTest.java:727) aynan 1 200 000 UZS / kurs 12 000 / 100.00 USD bilan: out=1 200 000.00, in=100.00, exchange_rate_snapshot=12000.000000 IKKALA oyoqda. Yangi teskari yo'nalish testi (satr 801) qoldiqlarni ham tekshiradi (400.00 USD / 1 250 000 UZS, kurs 12 500 — fixture kursi ataylab boshqa). * AC4106 — createRejectsInternalWithDifferentCurrencies (satr 210) + kontrakt mosligi: GlobalExceptionHandler.java:91-94 ValidationException -> 400 + ex.getCode(); kod VALIDATION_ERROR ekani MoneyTransferControllerIntegrationTest.java:168-177 da HTTP darajasida isbotlangan. * AC4107 — receiveConversionDoesNotCreateExpenseOrLedgerEntries (satr 768) expense_entries VA ledger_entries qatorlari sonini receive'dan oldin/keyin solishtiradi (shunchaki 'xato bermadi' emas). MUTATSIYA — 7 mutant, 7/7 O'LDIRILDI (har biri alohida yurgizildi, javap bilan bytecode tasdiqlandi): 1. internal valyuta tekshiruvi olib tashlandi (if(false)) -> javap: ValidationException throw bloki bytecode'dan yo'qoldi; FAQAT createRejectsInternalWithDifferentCurrencies yiqildi (AC4106 aniq qoplangan). 2. exchange_rate_snapshot doim null -> 5 test (chk_money_movements_exchange_rate_snapshot DB CHECK + assertion). 3. amount_to ga QAT'IY F6 tengligi majburlandi (spec buzilishi) -> FAQAT receiveConversionKeepsManuallyAdjustedAmountToWithoutRecomputing yiqildi => bu test haqiqiy, yolg'on ijobiy emas. 4. in-oyoq summasi amount_to o'rniga amount_from -> 4 test. 5. exchange_rate_snapshot faqat out-oyoqda -> 5 test. 6. ikki oyoqqa turli transfer_group_id (javap: randomUUID chaqiruvi 1 -> 2) -> 2 test. 7. movement_type doim 'transfer' (javap: shox konstantaga yig'ildi) -> 5 test. HALOLLIK TEKSHIRUVI (coder da'volari): * USD->EUR: R__permissions_and_currencies_seed.sql:179-184 — USD is_base=false, EUR is_base=false, ya'ni fixture haqiqatan IKKALA tomoni asosiy bo'lmagan holat. Spec §6 F6 va qoida 38, kontrakt MoneyTransferType (finance.yaml:2947) faqat 'valyutalar har xil' deydi — bir tomoni asosiy bo'lishi TALAB QILINMAYDI. Da'vo rost. * Qo'lda tuzatish: test faqat 200/muvaffaqiyat emas — response.amount_to=99.50, money_movements in-oyoq qatori=99.50 VA to_account qoldig'i=99.50 (DB darajasi) tekshiriladi; ustiga M3 mutanti aynan shu testni o'ldirdi. * F6 formulasi backendda hisoblanmasligi kontraktga mos: MoneyTransferCreateRequest da amount_to required (finance.yaml:4360-4386) — klient beradi, qoida 38 'qo'lda tuzatilishi mumkin'. Nuqson emas. CROSS-CUTTING: @Transactional bor; tenant_id/schema yo'q; precision numeric(18,2)/(18,6) V41 ga mos; nomlash snake_case; outbox qatori enqueueRejectedEvent orqali biznes yozuv bilan bir tranzaksiyada; xarajat/daromad qatori DB CHECK bilan ham yopilgan (chk_expense_entries_source_type V42:122-134 va chk_ledger_entries_source_type V38:155-160 ro'yxatida 'money_transfers' YO'Q). MUTANT QOLDIRILMADI: git grep MUTANT HEAD -- src/ bo'sh, ishchi daraxtda MUTANT yo'q, openapi/ o'zgarmagan, worktree o'chirilgan. BLOKLAMAYDIGAN 2 KUZATUV (keyingi barg / spec qarzi uchun, bu bargni to'smaydi): A1. exchange_rate musbatligi hech qayerda tekshirilmaydi — MoneyTransferService.java:530-585 faqat null-likni ko'radi, V41 CHECK ro'yxatida ham (amount_from>0, amount_to>0, exchange_rate NULL-juftligi) musbatlik yo'q. Ya'ni conversion'ni exchange_rate=0 yoki manfiy bilan yaratish mumkin va shu qiymat exchange_rate_snapshot'ga tushadi. Spec (§2.11, qoida 38) va kontrakt bu haqda JIM — shuning uchun mezon buzilishi emas, spec qarzi sifatida qayd etaman. A2. AC4107 testi qatorlarni create/send/approve'dan KEYIN sanaydi — nazariy jihatdan oldingi qadamlarda tug'ilgan qator sezilmasdi. Amalda DB CHECK'lari (yuqorida) buni imkonsiz qiladi, shuning uchun kichik kuzatuv. XULOSA: 3/3 mezon bajarilgan, 58/58 yashil, 7/7 mutant o'ldirilgan -> done.
-
✓
qa-ep-11-t06-s02 qabul mezonini belgiladi
✓ Konvertatsiyadan keyin hech qanday xarajat/daromad qatori tug'ilmaydi
-
✓
qa-ep-11-t06-s02 qabul mezonini belgiladi
✓ `internal` o'tkazmada har xil valyutali hisoblar tanlansa rad etiladi
-
✓
qa-ep-11-t06-s02 qabul mezonini belgiladi
✓ UZS kassadan 1 200 000 chiqib, kurs 12 000 bilan USD kassaga 100 $ kiradi (08 AC9)
-
⇄
coder-ep-11-t06-s02 statusni o'zgartirdi Ishlanyapti → Review
-
✎
coder-ep-11-t06-s02 yangiladi
Yangilandi: branch, commit_sha
-
✓
coder-ep-11-t06-s02 qabul mezonini belgiladi
✓ Konvertatsiyadan keyin hech qanday xarajat/daromad qatori tug'ilmaydi
-
✓
coder-ep-11-t06-s02 qabul mezonini belgiladi
✓ `internal` o'tkazmada har xil valyutali hisoblar tanlansa rad etiladi
-
✓
coder-ep-11-t06-s02 qabul mezonini belgiladi
✓ UZS kassadan 1 200 000 chiqib, kurs 12 000 bilan USD kassaga 100 $ kiradi (08 AC9)
-
📄
coder-ep-11-t06-s02 fayllarni qayd etdi
1 ta fayl qayd etildi
-
⇄
coder-ep-11-t06-s02 statusni o'zgartirdi Backlog → Ishlanyapti
Agent ishni boshladi
-
⚑
coder-ep-11-t06-s02 ishga oldi
-
✦
pm-agent yaratdi
Valyuta konvertatsiyasi (F6)
Ma'lumot
- Agent
- coder-ep-11-t06-s02
- Olingan
- 1 о аввал
- Boshlandi
- 05.09.2026 19:28
- Tugadi
- 05.09.2026 20:18
- Baho
- 6 soat
- Spec
- erp/docs/modules/08_finance.md#6
- Branch
- feat/EP-11-erpbom-backend
- Commit
- 8ae7013ab07d
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-T06-S02/claim \ -H "X-Agent: backend-dev-1"
Tugatgach:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-11-T06-S02/status \
-H "X-Agent: backend-dev-1" \
-H "Content-Type: application/json" \
-d '{"status":"review","note":"..."}'