Skip to main content

Deduction V2 — progress 2026-07-24

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

M3 (BIF-8885, DED-S08 backend) shipped — the new download API streaming the wa_reconciliation_batches rollup as CSV. BE 1.5 md now done (15 → 16.5); M3 QA (0.5 md) still open. Denominator unchanged at 32.5, so pct moves 46% → 51% on completed work.

  • M3 (BIF-8885) — Repositories::Billings::Downloads::WaDeductionHistory + Interactors::Billings::UserDownloadsWaDeductionHistory in hub_core, mounted as GET /api/core/v1/reports/billing/download/deduction_history (modpanel scope) in hub_service, with colocated repo, interactor, and request specs. Always returns the daily-aggregate CSV (WhatsApp Business, Category, Usage Day, Message Count, Deducted Balance); no batches → header-only CSV.
  • Single source of query truth — M2's grouped query was extracted into a shared Repositories::Billings::WaDeductionHistoryQuery module that both M2 (GET) and M3 (download) include, so their rows can never diverge. A parity spec asserts M3's download rows equal M2's GET rows for the same org/range (satisfies DED-S08/AC-3).

Effort unchanged: BE 23 · FE 3 · QA 6.5 = 32.5 md. Supersedes the 2026-07-23 entry (15 / 32.5).

Evidence

  • M3 → BIF-8885 (Task, Epic BIF-8644, Sprint 21464).
  • As-built writeup: documentations/wa-deduction-history-usage-api.md (now covers both M2 + M3); task-breakdown M3 section flipped to Implemented with the as-built plan + checked ACs.
  • Scope note: M3's download route uses oauth2 :modpanel (consumer is moderator-be/M5), not the client scopes M2's GET uses — the earlier plan text listed both; the modpanel-only split matches the actual mcc_logs modpanel download.

Lowlights & blockers

Unchanged from 2026-07-23: QA (6.5 md, now incl. M2 + M3 = 1 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.