Skip to main content

Deduction V2 — progress 2026-07-26

Delivery / Program Management — periodic status report. health: carries the delivery-health status; the doc-lifecycle status: stays in the linter enum (active).

Progress

progress_done_days: 16.5 · progress_pct: 51 · progress_total_days: 32.5

No new milestone shipped since 2026-07-24; this entry records an M6 scope change (spec-only, no code yet). Effort and denominator unchanged: BE 23 · FE 3 · QA 6.5 = 32.5 md.

  • M6 (BIF-9016, DED-S03 manual re-trigger) broadened. The manual "trigger settle daily" moved from a single-company account-detail button to a modpanel Finance-menu tool that can trigger a single CID, many CIDs, or all CIDs:
    • Single / many → hub-service POST /billings/settle_wa_holds (oauth2 :modpanel) with organization_id / organization_ids[] → hub-core Interactors::Billings::TriggerWaHoldSettlement enqueues SettleWaHoldsWorker per eligible CID.
    • All → same endpoint with all → enqueues the existing SettleWaHoldsDispatcherWorker (the nightly fan-out) on demand.
    • Gating rule: a CID settles only when wa_hold_settlement_enabled? is true — i.e. its per-company wa_hold_settlement flag is ON or the global flag is ON (Services::Billing::FeatureFlag; global ON → all CIDs, global OFF → only preference_unique_ids allow-listed CIDs). Ineligible CIDs in a single/many request are skipped and reported, never silently settled.
    • Placement: new item under moderator-be _sidebar_finance.html.erb → new Billing::WaHoldSettlementsController page (form: single / many / all), gated by a new can? permission; calls hub-service via the M5 HTTP client.

Estimate held at BE 1.5 · FE 0.5 · QA 0.5 = 2.5 md — the single/many/all fan-out reuses the shipped SettleWaHoldsDispatcherWorker + wa_hold_settlement_enabled?, so the extra scope is mostly a wider contract and a Finance-menu form rather than new engine work.

Evidence

  • M6 → BIF-9016 (Task, Epic BIF-8644, Sprint 21464); summary + description updated 2026-07-26 to the Finance-menu / single-many-all design.
  • Task-breakdown M6 section rewritten with the new scope, gating rule, and implementation plan.
  • Flag semantics: documentations/wa_hold_settlement-flag-registration.md (wa_hold_settlement_enabled? = per-company flag ON ∨ global ON).

Lowlights & blockers

Unchanged from 2026-07-24: QA (6.5 md) not started; M0 edits shipped money-path code; M4 (chat FE) unverified (hub repo not checked out); governance gate (RFC in-reviewapproved, PRD refresh) still open, PM-owned, not blocking engineering. M6 depends on M1b (BIF-8958)

  • M5's HTTP client (BIF-8887); both must land before M6 starts.