Sub-task EP-12-T01-S03 Kritik 08_finance erpbom-backend

payroll_runs + payroll_run_lines + payments.payroll_run_id

Bajarildi
Status:

Tavsif

Oylik ish haqi hujjati (§2.12) va hodim bo'yicha qatorlar (§2.12a); `payments` ga `payroll_run_id` ustuni qo'shiladi.

Texnik ko'rsatma

Agent uchun

* `payroll_runs`: `organization_id` NOT NULL (node-lokal), `UNIQUE(organization_id, period_year, period_month)`, `working_days_total int` **qo'lda kiritiladi** (ish kalendari jadvali YARATILMAYDI — Q12), `status` (`draft|calculated|approved|paid|cancelled`), `total_amount`, `period_id`. * `payroll_run_lines`: `UNIQUE(payroll_run_id, employee_id)`, `worked_days` (oylikbayda, ishbayda NULL), `accrued_amount`, `opening_balance`, `net_amount`, `rounding_remainder`, `payment_id`. * `payments.payroll_run_id` — ALTER bilan qo'shiladi (EP-11-T01-S03 da ataylab qoldirilgan).

Qabul mezonlari (DoD)

3 / 3 bajarildi

  • Bir node'da bir oy uchun ikkinchi payroll-run yaratib bo'lmaydi

    qa-ep-12-t01 · 1 о аввал

  • Bir run'da bitta hodim ikki qator bilan kelmaydi

    qa-ep-12-t01 · 1 о аввал

  • `payments.payroll_run_id` FK mavjud va NULL bo'lishi mumkin

    qa-ep-12-t01 · 1 о аввал

O'zgargan fayllar

3 ta

  • modified src/test/java/uz/erpbom/finance/PaymentsMovementsAllocationsMigrationTest.java
  • modified src/test/java/uz/erpbom/finance/PayrollRunsAndLinesMigrationTest.java
  • modified src/main/resources/db/migration/V46__payroll_runs_and_lines.sql

Izoh qoldirish

Tarix

15 yozuv

  • ✎

    finalize-ep-12 yangiladi

    Yangilandi: pr_url

  • ✎

    finalize-ep-12 yangiladi

    Yangilandi: branch, commit_sha

  • ✎

    pm-agent yangiladi

    Yangilandi: estimate_hours

  • ✎

    pm-agent yangiladi

    Yangilandi: estimate_hours

  • ✎

    team-lead-pm yangiladi

    Yangilandi: estimate_hours

  • ⇄

    qa-ep-12-t01 statusni o'zgartirdi Review → Bajarildi

  • 💬

    qa-ep-12-t01 izoh qoldirdi

    QA (izolyatsiyalangan worktree, PostgreSQL 16 / Testcontainers). Baza: 68 test yashil (Payroll 10 + Reconciliations 9 + PermissionCatalog 4 + PaymentsMovements 45), Failures 0. MUTATSIYA — 4/4 o'ldi: M1 uq_payroll_runs...dan organization_id olib tashlandi -> secondPayrollRunForSameNodeAndMonthIsRejected + 4 test yiqildi (AC 4155 node-lokalligi haqiqatan qo'riqlangan). M2 uq_payroll_run_lines_payroll_run_id_employee_id o'chirildi -> employeeAppearsAtMostOnceInOneRunButMayAppearInAnotherRun:180 yiqildi (AC 4156). M3 fk_payments_payroll_run o'chirildi (ustun qoldi) -> paymentsPayrollRunIdIsNullableAndForeignKeyIsEnforced:264 + payrollRunCannotBeDeletedWhileAPaymentPointsToIt:278 + PaymentsMovements...:133 yiqildi (AC 4157). M4 payroll_run_id NOT NULL qilindi -> ...IsNullableAndForeignKeyIsEnforced:254 + PaymentsMovements...:126 yiqildi (AC 4157 NULL sharti). M8 chk_payroll_runs_working_days_total_positive '> 0' -> '>= 0' -> workingDaysTotalMustBePositiveBecauseF7DividesByIt:127 yiqildi. SPEC: §2.12 ustun to'plami 15/15, §2.12a 9/9 — ortiqcha/yetishmayotgan ustun yo'q. §4.4 status CHECK aynan draft|calculated|approved|paid|cancelled (ortiqcha qiymat testda rad etiladi). worked_days ishbayda NULL (Q12) — workedDaysIsNullForPieceRateEmployees tekshiradi. Fixture xilma-xilligi bor: working_days 0/-1/1/21, oy 0/13, worked_days 10/12/21/null, boshqa filial + boshqa yil + boshqa oy shoxobchalari alohida. PaymentsMovementsAllocationsMigrationTest'dagi 'paymentsHasNoPayrollRunIdColumnYet' -> 'paymentsPayrollRunIdWasAddedByV46AsNullableForeignKey' ALMASHTIRISHI to'g'ri: qamrov yo'qolmagan, kuchaygan (ustun bor + is_nullable=YES + confrelid=payroll_runs). M3 va M4 mutantlarini AYNAN shu test ham ushladi. CROSS-CUTTING: tenant_id yo'q / schema almashtirish yo'q (AR-1); nomlash snake_case, jadval ko'plikda, FK to'liq nomdan; pul numeric(18,2); parol/token log yo'q. @Transactional va outbox — bu bargda qo'llanmaydi (faqat migratsiya + test). VERDIKT: done.

  • ✓

    qa-ep-12-t01 qabul mezonini belgiladi

    ✓ `payments.payroll_run_id` FK mavjud va NULL bo'lishi mumkin

  • ✓

    qa-ep-12-t01 qabul mezonini belgiladi

    ✓ Bir run'da bitta hodim ikki qator bilan kelmaydi

  • ✓

    qa-ep-12-t01 qabul mezonini belgiladi

    ✓ Bir node'da bir oy uchun ikkinchi payroll-run yaratib bo'lmaydi

  • ⇄

    worker-ep-12-t01 statusni o'zgartirdi Ishlanyapti → Review

  • 📄

    worker-ep-12-t01 fayllarni qayd etdi

    3 ta fayl qayd etildi

  • ⇄

    worker-ep-12-t01 statusni o'zgartirdi Backlog → Ishlanyapti

    Agent ishni boshladi

  • ⚑

    worker-ep-12-t01 ishga oldi

  • ✦

    pm-agent yaratdi

    payroll_runs + payroll_run_lines + payments.payroll_run_id

Ma'lumot

Agent
worker-ep-12-t01
Olingan
1 о аввал
Boshlandi
07.09.2026 06:46
Tugadi
07.09.2026 08:03
Baho
4 soat
Spec
erp/docs/modules/08_finance.md#2.12
Branch
feat/EP-12-erpbom-backend
Commit
407a17327077

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

Tugatgach:

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