Deduction V2 — progress 2026-07-24
Delivery / Program Management — periodic status report.
health:carries the delivery-health status; the doc-lifecyclestatus: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::UserDownloadsWaDeductionHistoryin hub_core, mounted asGET /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::WaDeductionHistoryQuerymodule 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 actualmcc_logsmodpanel 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-review → approved, PRD refresh) still open, PM-owned, not blocking engineering.