fix(strategy): 价位阵地归入第八章,与「为什么选品牌」解耦

底稿第四章仅保留承诺与信任;贴顶/卡腰等勾选移至 §8.2。前端表单项并入战术支柱分组;补充测试与 OpenAPI、规划表说明。

Made-with: Cursor
This commit is contained in:
hub-gif 2026-04-21 17:16:14 +08:00
parent 42caa06013
commit 44fa291eb3
5 changed files with 44 additions and 44 deletions

View File

@ -466,14 +466,15 @@ def build_strategy_draft_markdown(
if for_llm_input
else ["- *(成稿:评价、配料、可核验表述边界。)*", ""]
),
"**主定位(与表单一致)**",
"",
f"- {_pos_mark(pos, 'top')} **贴顶**:中高位或头部价位带。",
f"- {_pos_mark(pos, 'mid')} **卡腰**:围绕中位数一带。",
f"- {_pos_mark(pos, 'entry')} **下探**:贴近区间下限。",
f"- {_pos_mark(pos, 'different')} **另起带**:规格/组合/服务差异化。",
*(
[]
if for_llm_input
else [
"*本节写**用户为何信任、为何愿意选这个品牌**(承诺、证据、合规边界);**价位阵地**(表单勾选的四类取向)见 **§8.2 定价策略**,勿混写。*",
"",
]
),
]
)
conc = brief.get("concentration") or {}
@ -672,6 +673,13 @@ def build_strategy_draft_markdown(
"",
"### 8.2 定价策略",
"",
"**价位阵地取向(表单勾选;与监测价带可对读)**",
"",
f"- {_pos_mark(pos, 'top')} **贴顶**:中高位或头部价位带。",
f"- {_pos_mark(pos, 'mid')} **卡腰**:围绕中位数一带。",
f"- {_pos_mark(pos, 'entry')} **下探**:贴近区间下限。",
f"- {_pos_mark(pos, 'different')} **另起带**:规格/组合/服务差异化。",
"",
f"- *(表单价格支柱:{_pillar_cell(pr)}*",
"",
"### 8.3 促销与活动策略",

View File

@ -100,6 +100,13 @@ class StrategyDraftTests(SimpleTestCase):
self.assertIn("**总体策略**:先腰后顶", md)
self.assertIn("- [x] **卡腰**", md)
self.assertIn("- [ ] **贴顶**", md)
i4 = md.find("## 四、为什么要选")
i5 = md.find("## 五、与其它品牌")
self.assertGreater(i5, i4)
self.assertNotIn("贴顶", md[i4:i5])
i82 = md.find("### 8.2 定价策略")
self.assertGreater(i82, 0)
self.assertGreater(md.find("- [x] **卡腰**"), i82)
self.assertIn("侧翼切入", md)
self.assertIn("做低糖配方", md)
self.assertIn("### 7.1 品牌建设", md)

View File

@ -70,7 +70,7 @@ paths:
description: Not found
patch:
tags: [jobs]
summary: 仅更新 report_config报告关注词/场景/外部市场表等)
summary: 仅更新 report_config外部市场表等;预设关注词/场景已废弃的请求字段将被忽略
parameters:
- $ref: "#/components/parameters/JobId"
requestBody:
@ -367,23 +367,9 @@ components:
ReportConfig:
type: object
description: |
允许键仅限下列三项;可全部省略或 `{}` 表示使用脚本内置默认。
允许键以后端 ``validate_report_config_body`` 为准(含各 ``llm_*``、``chapter8_text_mining_probe*``、``external_market_table_rows`` 等)。
已废弃:``comment_focus_words``、``comment_scenario_groups``、``llm_scenario_group_summaries``(请求中若出现将被忽略)。
properties:
comment_focus_words:
type: array
items:
type: string
comment_scenario_groups:
type: array
items:
type: object
properties:
label:
type: string
triggers:
type: array
items:
type: string
external_market_table_rows:
type: array
items:
@ -533,7 +519,7 @@ components:
positioning_choice:
type: string
enum: ['', 'top', 'mid', 'entry', 'different']
description: 格带主定位;空字符串表示文稿中四项均为未勾选
description: 位阵地取向(贴顶/卡腰/下探/另起带),写入策略稿「八、战术支柱 · 8.2 定价策略」;与「四、为什么要选这个品牌」(承诺与信任)分离。空字符串表示文稿中四项均为未勾选
competitive_stance:
type: string
enum: ['', 'flank', 'head_on', 'both', 'undecided']

View File

@ -99,11 +99,11 @@
| 1 | **一、顾客是谁** | 1.1 人群与路径 · 1.2 细类/评论侧归纳 · 1.3 本品聚焦(表单:角色、客群、对标) |
| 2 | **二、产品价值与用户痛点** | **仅 §2.1** 表:「类目/细类 → 痛点简述 → 动作 → 落地 → 验证」;多细类**分行**,不确定则「待业务定类」+ 假设 |
| 3 | **三、为什么要买「这款产品」** | **仅 §3.1** 品类与时机、购买理由;**无 §3.2**(与 §二 不重复写障碍与应对) |
| 4 | **四、为什么要选「这个品牌」** | 承诺与调性 · 信任与证据 · 主定位(表单勾选 |
| 4 | **四、为什么要选「这个品牌」** | 承诺与调性 · 信任与证据**价位阵地**不在本章,见 **§8.2** |
| 5 | **五、与其它品牌有何不同** | 对比对象 · 差异化 · **竞争应对须写可执行应对**(不主动价格战 / 跟价时如何说明等) |
| 6 | **六、阶段目标与路径** | 时间 / 成功标准 · **营销与总体策略须写成动作句**(与痛点挂钩) |
| 7 | **七、品牌四线** | 建设 · 打造 · 运营 · 体验(与表单 4P 支柱对应,**每条线至少一条「怎么做」** |
| 8 | **八、战术支柱** | 产品 / 定价 / 促销 / 渠道:**每支柱下写 针对哪条痛点、做什么、怎么落地** |
| 8 | **八、战术支柱** | **§8.2 定价**含**价位阵地取向**(表单贴顶/卡腰/下探/另起带勾选)与定价支柱叙述;其余:产品 / 促销 / 渠道:**每支柱下写 针对哪条痛点、做什么、怎么落地** |
| 9 | **九、风险、假设与待验证** | 含表单风险勾选 |
| 10 | **十、下一步与节奏** | 含业务备注;**下一步**为可执行任务,非口号 |
| 11 | **附录** | 关键数据一览(与 brief 同源) |

View File

@ -240,7 +240,7 @@ watch(
<strong>已填项</strong>写入底稿并由大模型落实<strong>未填项</strong>可由大模型结合监测数据推断仍受禁止编造约束
</p>
<p class="hint-top hint-flow">
<strong>与成稿目录对齐</strong>对应下载策略稿 Markdown策略范围与前提摘要顾客是谁针对痛点要怎么做主要由数据与模型归纳购买理由 / 品牌 / 竞品 / 阶段路径 / 品牌四线 / 战术支柱风险下一步业务约束与备注附录下方表单按<strong>同一条目顺序</strong>分组便于逐项填写
<strong>与成稿目录对齐</strong>对应下载策略稿 Markdown策略范围与前提摘要顾客是谁针对痛点要怎么做主要由数据与模型归纳为什么要买这款产品为什么要选这个品牌承诺与信任底稿占位为主竞品 / 阶段路径 / 品牌四线战术支柱<strong>价位阵地</strong>勾选与 4P风险下一步业务约束与备注附录第四章叙事本页不设表单项<strong>贴顶/卡腰等价位取向</strong>归入第八章定价见下方战术支柱分组
</p>
<div class="toolbar">
@ -345,19 +345,6 @@ watch(
</label>
</fieldset>
<fieldset class="fieldset">
<legend>为什么要选这个品牌 主定位</legend>
<p class="fieldset-hint">对应成稿<strong>为什么要选这个品牌</strong>中与价位带相关的定位勾选</p>
<label class="fld fld-block">
<span>主定位选一条</span>
<select v-model="decisions.positioning_choice" class="job-select full">
<option v-for="o in positioningOptions" :key="o.value || 'empty'" :value="o.value">
{{ o.label }}
</option>
</select>
</label>
</fieldset>
<fieldset class="fieldset">
<legend>与其它品牌有何不同 竞争倾向</legend>
<p class="fieldset-hint">对应成稿<strong>与其它品牌有何不同 · 竞争应对</strong></p>
@ -397,15 +384,27 @@ watch(
<fieldset class="fieldset">
<legend> · 品牌四线与战术支柱4P</legend>
<p class="fieldset-hint">
对应成稿<strong>品牌四线</strong><strong>战术支柱</strong>产品 / 定价 / 渠道与传播
对应成稿<strong>品牌四线</strong><strong>战术支柱</strong>其中<strong>价位阵地</strong>贴顶/卡腰/下探/另起带写入 <strong>§8.2 定价策略</strong>回答的是在什么价位带上打不是用户为什么选这个品牌后者在第四章由承诺证据与调性承载底稿占位可由大模型补全
</p>
<label class="fld fld-block">
<span>产品</span>
<textarea v-model="decisions.pillar_product" rows="2" placeholder="产品侧动作或差异(可选)" />
</label>
<label class="fld fld-block">
<span>定价</span>
<textarea v-model="decisions.pillar_price" rows="2" placeholder="价格与价值呈现(可选)" />
<span>价位阵地选一条</span>
<select v-model="decisions.positioning_choice" class="job-select full">
<option v-for="o in positioningOptions" :key="o.value || 'empty'" :value="o.value">
{{ o.label }}
</option>
</select>
</label>
<label class="fld fld-block">
<span>定价战术支柱 · 补充叙述</span>
<textarea
v-model="decisions.pillar_price"
rows="2"
placeholder="除价位阵地外,价格与价值呈现、跟价原则等(可选)"
/>
</label>
<label class="fld fld-block">
<span>渠道与触点</span>