Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions .changeset/sales-list-view-rosters.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
'hotcrm': patch
---

Rewrite the "Standard list views" section on the Accounts, Leads, Contacts and
Quotes documentation against the views those objects actually ship.

Same defect as the Opportunities page fixed in #757, on four more pages (and
their zh-Hans / zh-Hant siblings): the rosters were invented. Accounts listed
*All Customers*, *Top Accounts by Revenue*, *Inactive Accounts*, *By Industry*
and *Recently Updated* — none of which exist — while never mentioning the five
views that do: **Account Cards**, **Accounts by Location**, **Enterprise
Accounts**, **🔄 Upcoming Renewals** and **⚠️ At-Risk Accounts**. Contacts and
Quotes each advertised five views where only three exist. Leads advertised five,
of which one was real, and hid three working queues plus the kanban, calendar
and gallery views. A reader looking for any of those names in the product found
nothing under it, and the queues with the most business value were the ones
nobody was told about.

Each page now carries the real roster measured against its `*.view.ts`
declaration — what the view filters on, how it sorts, and where it is reached
from — plus the behaviour that makes an empty list readable:

- **Accounts** — seven views. The two customer-success queues get their own
note: both are scoped to **Type = Customer** before anything else, and both
read hand-maintained fields (Health Score has no default, Next Renewal Date
can be blank), so an empty *At-Risk Accounts* is missing data rather than a
broken filter. Also corrected: **Enterprise Accounts** is a revenue cut
(Annual Revenue ≥ $10M), *not* the Customer Tier field — an account tiered
*Enterprise* at $5M is not in it; and the map plots **Office Location**, not
the billing address.
- **Leads** — eight views, the full switcher. **🔥 Hot Leads** is documented as
it behaves: its cut is 4.5 stars against a whole-star rating, so it is the
5-star queue, and a 4-star lead is on **High Priority** — the old page called
Hot Leads "rating ≥ 4 stars", which is the other view's filter. The rep tip
that pointed at a nonexistent *Today's Follow-ups* view now says what the
Next Follow-up Date really drives: the sort order of Hot Leads, stamped
automatically on intake (tomorrow at 4+ stars, three days otherwise) and
re-stamped by **Schedule Follow-up**.
- **Contacts** — three views, with the account-grouped default explained and a
plain statement that no owner-filtered view exists, since contact visibility
follows the account anyway.
- **Quotes** — three views, none of them filtered, and why that works: status is
the filter (the nightly sweep keeps *Expired* honest) and Expiration Date is
sortable. A fresh org has no quotes at all until the first **Generate Quote**,
and these views declare no empty-state text, so the page says an empty grid is
expected there.

English pages use the metadata labels; the zh pages use the names from the
zh-CN locale bundle.

Fixes #758.
25 changes: 19 additions & 6 deletions content/docs/sales/accounts.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,25 @@ Admins can change these rules — see [Administration › Sharing](/docs/adminis

## Standard list views

- **My Accounts** — accounts you own.
- **All Customers** — active customers.
- **Top Accounts by Revenue** — biggest first.
- **Inactive Accounts** — `is_active = false`, for clean-up.
- **By Industry** — grouped.
- **Recently Updated** — what changed last.
Accounts opens on **All Accounts**, and the switcher along the top of the list carries seven saved views — these, and nothing else:

| View | What it shows |
| --- | --- |
| **All Accounts** *(the landing view)* | Every account whatever its type, highest **Annual Revenue** first. Annual Revenue carries a column total and **Employees** a column average, so the header line is the whole book at a glance. Rows are tinted by the **Active** flag — the grey rows are the inactive ones (`is_active = false`), which is where retired accounts stay visible instead of needing a list of their own. 50 rows a page, export to CSV or XLSX, and with rows selected: **Update Tier**, **Transfer Owner**, **Delete**. |
| **Account Cards** | The same accounts as branded cards — industry, annual revenue, employees, phone, website and owner under the account name. |
| **Accounts by Location** | Accounts plotted on a map. The pin comes from **Office Location**, not from the billing address, so an account that has a billing address but no office location is missing from this view — and only from this view. |
| **Enterprise Accounts** | Accounts with **Annual Revenue of $10M or more**, biggest first, with quick-filter dropdowns for **Industry** (with a count per value), **Type** and **Owner** above the grid. This is a revenue cut, not the **Customer Tier** field: an account you tiered *Enterprise* at $5M of revenue is not here. |
| **My Accounts** | The accounts you own, most recently active first (**Last Activity Date**, descending). |
| **🔄 Upcoming Renewals** | Customers that have a **Next Renewal Date**, soonest first. It is not windowed to a number of days — every customer with a renewal date on file is listed, and the sort is what puts the next few weeks on top. The columns are the renewal ones: tier, health score, renewal date, renewal owner (the CSM) and annual revenue. |
| **⚠️ At-Risk Accounts** | Customers whose **Health Score** is *At Risk* or *Churning* — the customer-success working queue, with segment, renewal owner and last activity date alongside. |

### Why the two customer-success queues can be empty

**Upcoming Renewals** and **At-Risk Accounts** both read the fields on the **Customer Success** section of the account form (Tier, Segment, Health Score, Renewal Owner, Next Renewal Date), and both are scoped to **Type = Customer** before anything else:

- A prospect or a partner never appears in either, however the renewal fields are filled in. Promote the account to *Customer* first — activating a contract does that for you.
- **Health Score** is maintained by hand by whoever owns the relationship and has no default value. On an org where nobody sets it, *At-Risk Accounts* is empty — that is missing data, not a broken filter.
- Likewise a customer with no **Next Renewal Date** is invisible to *Upcoming Renewals*. Both fields sit together on the same form section, so filling one is the moment to fill the other.

## Tips for sales reps

Expand Down
25 changes: 19 additions & 6 deletions content/docs/sales/accounts.zh-Hans.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -102,12 +102,25 @@ Acme Corp Global

## 标准列表视图

- **我的客户**——你负责的客户。
- **所有客户**——活跃的客户。
- **按营收排名的顶级客户**——最大的在前。
- **非活跃客户**——`is_active = false`,用于清理。
- **按行业**——分组。
- **最近更新**——上次更改的内容。
客户列表默认打开**全部客户**,列表顶部的视图切换器里就是下面这七个已保存视图——只有这七个:

| 视图 | 展示什么 |
| --- | --- |
| **全部客户**(默认打开) | 不分类型的完整台账,按**年营收**由高到低排列。**年营收**列带合计、**员工人数**列带平均值,抬头这一行就是整本账的概览。行按**是否活跃**着色——灰色的就是已停用(`is_active = false`)的客户;停用记录留在这里,不另设一张清理用的列表。每页 50 行,可导出 CSV / XLSX;勾选记录后可批量执行**更新客户分层**、**转移负责人**、**删除**。 |
| **客户卡片** | 同一批客户以品牌色卡片呈现——客户名下面是行业、年营收、员工人数、电话、网站和负责人。 |
| **客户地图** | 客户按地理位置落在地图上。图钉取自**办公地点**,而不是账单地址:只填了账单地址、没填办公地点的客户不会出现在这张图上——也只在这张图上缺席。 |
| **企业客户** | **年营收 ≥ 1000 万美元**的客户,金额大的在前;网格上方还有**行业**(带每个取值的记录数)、**类型**、**客户负责人**三个快捷筛选下拉。注意这是按营收切的,不是按**客户分层**字段:一个被标成"企业客户"分层、年营收却只有 500 万的客户不在这里。 |
| **我的客户** | 你负责的客户,按**最近活动日期**由近及远排列。 |
| **🔄 即将续约** | 填了**下次续约日期**的正式客户,最近到期的排在最上面。它没有按天数开窗——只要档案里有续约日期就会列出来,是排序把最近几周顶到了前面。列也都是续约要看的:客户分层、健康度、续约日期、续约负责人(CSM)、年营收。 |
| **⚠️ 风险客户** | **健康度**为*风险*或*流失中*的正式客户——客户成功团队的工作队列,同行还有客户细分、续约负责人和最近活动日期。 |

### 这两个客户成功队列为什么会是空的

**即将续约**和**风险客户**读的都是客户上那组客户成功字段(客户分层、客户细分、健康度、续约负责人、下次续约日期),而且都先按**类型 = 正式客户**过滤:

- 潜在客户和合作伙伴永远不会出现在这两张列表里,续约字段填得再全也一样。先把客户提升为*正式客户*——激活合同会自动做这件事。
- **健康度**由维护这段客户关系的人手工填写,没有默认值。组织里没人填过它,*风险客户*就是空的——那是数据缺口,不是过滤条件坏了。
- **下次续约日期**同理:没填的正式客户对*即将续约*而言并不存在。这两个字段就挨在一起,填一个的时候顺手把另一个也填上。

## 给销售代表的提示

Expand Down
25 changes: 19 additions & 6 deletions content/docs/sales/accounts.zh-Hant.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -102,12 +102,25 @@ Acme Corp Global

## 標準列表視圖

- **我的客戶**——你負責的客戶。
- **所有客戶**——活躍的客戶。
- **按營收排名的頂級客戶**——最大的在前。
- **非活躍客戶**——`is_active = false`,用於清理。
- **按產業**——分組。
- **最近更新**——上次更改的內容。
客戶列表預設打開**全部客戶**,列表頂部的視圖切換器裡就是下面這七個已儲存視圖——只有這七個:

| 視圖 | 展示什麼 |
| --- | --- |
| **全部客戶**(預設打開) | 不分類型的完整帳冊,按**年營收**由高到低排列。**年營收**欄帶合計、**員工人數**欄帶平均值,抬頭這一列就是整本帳的概覽。列按**是否活躍**著色——灰色的就是已停用(`is_active = false`)的客戶;停用記錄留在這裡,不另設一張清理用的列表。每頁 50 列,可匯出 CSV / XLSX;勾選記錄後可批次執行**更新客戶分層**、**轉移負責人**、**刪除**。 |
| **客戶卡片** | 同一批客戶以品牌色卡片呈現——客戶名下面是產業、年營收、員工人數、電話、網站和負責人。 |
| **客戶地圖** | 客戶按地理位置落在地圖上。圖釘取自**辦公地點**,而不是帳單地址:只填了帳單地址、沒填辦公地點的客戶不會出現在這張圖上——也只在這張圖上缺席。 |
| **企業客戶** | **年營收 ≥ 1000 萬美元**的客戶,金額大的在前;網格上方還有**產業**(帶每個取值的記錄數)、**類型**、**客戶負責人**三個快捷篩選下拉。注意這是按營收切的,不是按**客戶分層**欄位:一個被標成「企業客戶」分層、年營收卻只有 500 萬的客戶不在這裡。 |
| **我的客戶** | 你負責的客戶,按**最近活動日期**由近及遠排列。 |
| **🔄 即將續約** | 填了**下次續約日期**的正式客戶,最近到期的排在最上面。它沒有按天數開窗——只要檔案裡有續約日期就會列出來,是排序把最近幾週頂到了前面。欄位也都是續約要看的:客戶分層、健康度、續約日期、續約負責人(CSM)、年營收。 |
| **⚠️ 風險客戶** | **健康度**為*風險*或*流失中*的正式客戶——客戶成功團隊的工作佇列,同列還有客戶細分、續約負責人和最近活動日期。 |

### 這兩個客戶成功佇列為什麼會是空的

**即將續約**和**風險客戶**讀的都是客戶上那組客戶成功欄位(客戶分層、客戶細分、健康度、續約負責人、下次續約日期),而且都先按**類型 = 正式客戶**過濾:

- 潛在客戶和合作夥伴永遠不會出現在這兩張列表裡,續約欄位填得再全也一樣。先把客戶提升為*正式客戶*——啟用合約會自動做這件事。
- **健康度**由維護這段客戶關係的人手工填寫,沒有預設值。組織裡沒人填過它,*風險客戶*就是空的——那是資料缺口,不是過濾條件壞了。
- **下次續約日期**同理:沒填的正式客戶對*即將續約*而言並不存在。這兩個欄位就挨在一起,填一個的時候順手把另一個也填上。

## 給銷售代表的提示

Expand Down
14 changes: 9 additions & 5 deletions content/docs/sales/contacts.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,15 @@ This makes the security story simple: get the account-sharing right and contacts

## Standard list views

- **My Contacts** — contacts you own.
- **Primary Contacts** — `is_primary = true`.
- **Decision Makers** — title contains "VP", "Chief", or "Director".
- **By Title** — grouped.
- **Recently Added** — newest first.
Contacts opens on **All Contacts**, and the switcher carries three saved views — these, and nothing else:

| View | What it shows |
| --- | --- |
| **All Contacts** *(the landing view)* | Every contact, **grouped by account with the groups collapsed**: you expand the account you are working on instead of scrolling one flat roster. Inside a group, people are ordered by last name A→Z, with avatar, account, title, department, email, phone and owner on the row. 50 rows a page, export to CSV or XLSX. |
| **People Directory** | The same people as photo cards, each card fronted by the contact's avatar — the fastest way to put faces to an account team before a meeting. Name, title, department, email, phone and account are on the card. |
| **Primary Contacts** | Only the contacts flagged as primary — one per account, as described above — ordered by account. This is the list worth reviewing before a quote run or a mail-merge, because it is exactly the set every default draws from. |

There is no owner-filtered contact view, and none is needed for access: contacts are not shared on their own, they inherit the account's sharing (see above). To work "your" people, start from **My Accounts** on the [Accounts](./accounts) list and open the account, or expand your accounts' groups on **All Contacts**.

## How the AI Copilot uses contacts

Expand Down
14 changes: 9 additions & 5 deletions content/docs/sales/contacts.zh-Hans.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,15 @@ CEO

## 标准列表视图

- **我的联系人**——你负责的联系人。
- **主要联系人**——`is_primary = true`。
- **决策者**——职位包含 "VP"、"Chief" 或 "Director"。
- **按职位**——分组。
- **最近添加**——最新的在前。
联系人列表默认打开**全部联系人**,切换器里就是下面这三个已保存视图——只有这三个:

| 视图 | 展示什么 |
| --- | --- |
| **全部联系人**(默认打开) | 所有联系人,**按所属客户分组,分组默认折叠**:你展开正在跟的那个客户,而不是从一张平铺的大名单里翻。组内按姓氏 A→Z 排序,行上是头像、所属客户、职位、部门、邮箱、电话和负责人。每页 50 行,可导出 CSV / XLSX。 |
| **联系人目录** | 同一批人以照片卡片呈现,卡片正面就是联系人头像——开会前把人和脸对上最快的一屏。卡片上有姓名、职位、部门、邮箱、电话和所属客户。 |
| **主要联系人** | 只列被标记为**主要联系人**的人(每个客户一个,见上文),按所属客户排列。发报价或群发邮件之前值得过一遍这张表,因为各处的默认联系人正是从这一批里取的。 |

没有"我的联系人"这类按负责人过滤的视图;就可见性而言也不需要:联系人不单独共享,而是继承所属客户的共享(见上文)。想看"自己的人",从[客户](./accounts)列表的**我的客户**进入客户记录,或者在**全部联系人**里展开自己那几个客户的分组。

## AI Copilot 如何使用联系人

Expand Down
14 changes: 9 additions & 5 deletions content/docs/sales/contacts.zh-Hant.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,15 @@ CEO

## 標準列表視圖

- **我的聯絡人**——你負責的聯絡人。
- **主要聯絡人**——`is_primary = true`。
- **決策者**——職位包含 "VP"、"Chief" 或 "Director"。
- **按職位**——分組。
- **最近新增**——最新的在前。
聯絡人列表預設打開**全部聯絡人**,切換器裡就是下面這三個已儲存視圖——只有這三個:

| 視圖 | 展示什麼 |
| --- | --- |
| **全部聯絡人**(預設打開) | 所有聯絡人,**按所屬客戶分組,分組預設摺疊**:你展開正在跟的那個客戶,而不是從一張平鋪的大名單裡翻。組內按姓氏 A→Z 排序,列上是頭像、所屬客戶、職位、部門、郵箱、電話和負責人。每頁 50 列,可匯出 CSV / XLSX。 |
| **聯絡人目錄** | 同一批人以照片卡片呈現,卡片正面就是聯絡人頭像——開會前把人和臉對上最快的一屏。卡片上有姓名、職位、部門、郵箱、電話和所屬客戶。 |
| **主要聯絡人** | 只列被標記為**主要聯絡人**的人(每個客戶一個,見上文),按所屬客戶排列。發報價或群發郵件之前值得過一遍這張表,因為各處的預設聯絡人正是從這一批裡取的。 |

沒有「我的聯絡人」這類按負責人過濾的視圖;就可見性而言也不需要:聯絡人不單獨共享,而是繼承所屬客戶的共享(見上文)。想看「自己的人」,從[客戶](./accounts)列表的**我的客戶**進入客戶記錄,或者在**全部聯絡人**裡展開自己那幾個客戶的分組。

## AI Copilot 如何使用聯絡人

Expand Down
Loading
Loading