Skip to main content

Phase 1 — Production Readiness (P0)

1.1 — PDF Invoice Generation

Files: api/lib/pdf-invoice.ts (new), api/routes/instance-admin.ts
UI: Download PDF button in InvoiceSection detail dialog

1.2 — Mark Invoice as Paid

Files: api/routes/instance-admin.ts (mark_invoice_paid action)

UI: Mark as Paid button in InvoiceSection (owner/admin only)

1.3 — Backfill billing_period

Phase 2 — Credit Notes & Dunning (P1)

2.1 — Credit Notes

2.2 — Overdue Cron + Email

Files: api/queue/billing-cron.ts (nightly job)

Files: api/routes/instance-admin.ts (trigger email on finalize_invoice)

Phase 3 — Distribution Model (P0 for distribution use cases)

3.1 — Merchant Distribution Fields

3.2 — Distribution Tiers

3.3 — Settlement & Rebate Tables

Migration 044: merchant_settlements + merchant_rebates (full DDL in §6)

3.4 — Settlement API Actions

New actions in instance-admin.ts:
  • generate_settlement — create settlement statement for merchant + period\
  • finalize_settlement — issue to merchant\
  • mark_settlement_paid — record payment, trigger rebate calculation\
  • list_settlements — paginated list per instance\
  • get_settlement — detail + line items\
  • list_rebates — rebate notices per instance\
  • mark_rebate_paid — record rebate payment + tx_hash\

3.5 — Settlement UI

New sub-tabs in RevenueTab:
  • Settlements — per-merchant statements, generate/finalize/mark-paid\
  • Rebates — rebate notices, status, payment recording\

Phase 4 — Fee Collection Automation (P1)

4.1 — Collection Retry Queue

Retry job using next_retry_at + collection_attempts. Exponential backoff (1h × 2^attempts). Max 5 attempts → abandoned.

4.2 — billing_mode Enforcement

In collectCreationFee(): if instance.settings.billing_mode === 'invoice' → set collection_status = 'invoiced', skip on-chain transfer.

Phase 5 — Analytics & Reconciliation (P2)

5.1 — Nightly Reconciliation Job

Compare fee_ledger sums vs. cheque count expectations.

5.2 — Volume Tier Auto-Upgrade

Monthly check against volume_threshold_monthly.

5.3 — Revenue Charts

12-month rolling trend in AdminB2BDashboardTab.

Phase 6 — USDC Rate Documentation (P1)

Phase 7 — Branded PDF (Gotenberg) (P2)

Add gotenberg/gotenberg:8 container to docker-compose.yml. Create api/templates/ with HTML invoice and settlement templates supporting instance branding (logo, colors, USDC wallet QR code).