# B2B account-health dashboard (markdown)

Companion to **AI Account Manager Agent for B2B eCommerce (2026)**.

This is a **text dashboard** for AM stand-up. It is not a screenshot of Amazon CloudWatch, QuickSight, or a fake AWS console. Demo accounts are fixtures. Numbers are illustrative so you can copy the columns — **not** FactualMinds client KPIs.

Fill every cell from **named tools**. Empty evidence → `unknown`, not a story.

## Daily attention (cap 5)

Rank by **blast radius you already measure** (open revenue, strategic flag, credit hold), not by model confidence. Overflow is a watch list.

| Rank | Account | Why today | 30d revenue (tool) | Open quotes | Returns / complaints | Cadence | Next action | HITL? |
| ---- | ------- | --------- | ------------------ | ----------- | -------------------- | ------- | ----------- | ----- |
| 1 | ACC-DEMO-104 Northline MRO | Missed ~30d cadence (day 38) | `getRevenue` $48,200 | 0 | 0 | Late | AM call — do not email | Yes |
| 2 | ACC-DEMO-221 Harbor Labs | Quote Q-8841 expires in 2d; amount above draft cap | `getRevenue` $12,400 | 1 ($31,000) | 0 | On time | Manager approve / kill quote | Yes |
| 3 | ACC-DEMO-077 Pine & Co | 3 quality tickets same SKU family | `getRevenue` $9,100 | 0 | 3 tickets | On time | `do_not_contact` until QA | Yes |
| 4 | ACC-DEMO-019 Westfield | Credit hold | `getRevenue` $0 this window | 0 | 0 | n/a | Finance + AM; no reorder nudge | Yes |
| 5 | ACC-DEMO-310 Summit Dental | First order pending onboarding docs | `getRevenue` $0 | 0 | 0 | New | Onboarding queue — not a sales blast | Yes |

Watch (not in the 8 a.m. five): ACC-DEMO-088 qty down 18% vs prior 3 POs — `watch`, not a campaign.

## Account card (one row expanded)

Use this shape in the HITL UI. Context: demo JSON; align names to your ERP.

```json
{
  "accountId": "ACC-DEMO-104",
  "asOf": "2026-08-27",
  "revenue30d": { "amount": 48200, "currency": "USD", "tool": "getRevenue" },
  "orderCount30d": { "value": 0, "tool": "getOrderHistory" },
  "topSkus": { "value": ["SKU-PIPE-40", "SKU-GLV-NIT"], "tool": "getOrderHistory" },
  "returns": { "count": 0, "tool": "getReturns" },
  "complaints": { "count": 0, "tool": "searchTickets" },
  "quotes": { "open": 0, "tool": "getQuote" },
  "cadence": { "expectedDays": 30, "daysSinceLastOrder": 38, "tool": "getOrderHistory" },
  "trend": "missed_cadence",
  "recommended_action": "call_am",
  "contact_customer": false
}
```

## Column rules

| Metric | Tool | AM may see | Buyer JWT may see |
| ------ | ---- | ---------- | ----------------- |
| Revenue / orders / SKUs | account-scoped reads | Assigned accounts | **Own** account only |
| Returns / complaints | OMS + helpdesk | Assigned | Own tickets only |
| Quotes | CPQ | Assigned | Own quotes |
| Credit limit / risk score | Credit system | Associate + finance roles | **No** (status only if you already show it on the portal) |
| Another account's net price | — | Assigned via `getCustomerPrice` | **DENY** |

Do not put another customer's net price on this dashboard. Do not rank with a model-only "health score" that you cannot recompute from tools.

## Related

- [`b2b-reorder-attention-playbook.md`](b2b-reorder-attention-playbook.md)
- [`b2b-sales-agent-tool-policy.md`](b2b-sales-agent-tool-policy.md)
- [`operations-daily-brief-schema.md`](operations-daily-brief-schema.md) — same `evidence_tool` discipline, retail ops shape
- [`monday-checklist.md`](monday-checklist.md)
