earnings-preview-single
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSingle-Company Earnings Preview
单一公司盈利预览
Generate a concise, professional equity research earnings preview for a single company. The output is a self-contained HTML file targeting 4-5 printed pages. The report is dense with figures and data, with tight narrative that gets straight to the point.
Data Sources (ZERO EXCEPTIONS): The ONLY permitted data sources are Kensho Grounding MCP () and S&P Global MCP (). Absolutely NO other tools, data sources, or web access of any kind. Specifically:
searchkfinance- Do NOT use ,
WebSearch,WebFetch,web_search,brave_search, or ANY generic web/internet search tool — even if Kensho is slow, returns no results, or is temporarily unavailable.google_search - Do NOT use any browser, URL fetch, or web scraping tool.
- If Kensho Grounding returns no results for a query, try rephrasing the query or note "data not available" in the report. NEVER fall back to web search as an alternative.
- Every piece of information in the report must be traceable to either a MCP function call or a Kensho
kfinancecall. If it cannot be sourced to one of these two, it must not appear in the report.search
Critical Rule: You MUST complete ALL research and data collection (Phases 1-5) BEFORE writing any part of the report.
Intermediate File Rule: All raw data from MCP tool calls MUST be written to files in immediately after each tool call returns — before moving to the next call. This protects data from context window compression. Do NOT hold data only in memory. At the start of Phase 1, run to create the directory. Before generating the HTML report (Phase 7), you MUST read ALL intermediate files back into context using commands. The files — not your memory of earlier conversation — are the single source of truth for every number, quote, and source URL in the report. If you skip reading the files, the report WILL contain errors.
/tmp/earnings-preview/mkdir -p /tmp/earnings-previewcatFiscal Quarter Rule: NEVER infer the fiscal quarter from the calendar report date. Many companies have non-standard fiscal years (e.g., Walmart's FY ends Jan 31, so a Feb 2026 report covers Q4 FY2026, not Q4 2025 or Q1 2026). Always use the fiscal quarter and fiscal year exactly as stated in the earnings call name returned by or (e.g., "Walmart Q4 FY2026 Earnings Call" means the quarter is Q4 FY2026). Use that verbatim in the report title, headers, tables, and all references. If the call name is ambiguous, cross-reference with period labels.
get_next_earnings_from_identifiersget_earnings_from_identifiersget_financial_line_item_from_identifiersLength Rule: The report must be concise. Target 4-5 pages when printed. Do NOT write long multi-paragraph narratives. Use tight, punchy bullet points. Every sentence must earn its place. If you can say it in fewer words, do so.
Verbatim Quote Rule: When quoting management in tags, the text MUST be copied exactly from the transcript — word for word, including filler words and sentence fragments. Do NOT paraphrase, rearrange, combine sentences from different parts of the transcript, or "clean up" quotes. If you cannot find the exact phrase in the transcript, do NOT present it as a direct quote. Instead, paraphrase in your own narrative voice without blockquote formatting (e.g., "Management noted that data center demand remains significant"). Every blockquote must be a verbatim, copy-paste excerpt that can be verified against the transcript.
<blockquote>Calculation Integrity Rule: For any multi-step calculation (implied quarterly figures from annual guidance, LTM P/E, y/y growth rates, segment y/y changes), write out each step explicitly and verify intermediate results before using them in the next step. If you state A + B + C = X, verify X is arithmetically correct before using X in a subsequent formula. If the appendix shows a sum that does not equal its stated components, the report is wrong. When in doubt, recompute from raw data rather than reusing a previously calculated intermediate.
Ratio Nomenclature Rule: All valuation ratios must be explicitly labeled as LTM (Last Twelve Months) or NTM (Next Twelve Months). Never use "trailing" or "forward" — always use LTM or NTM. LTM ratios use the sum of the most recent 4 reported quarters. NTM ratios use the sum of the next 4 quarterly consensus mean EPS estimates from — NOT a single annual figure. Both LTM and NTM P/E must be computed and displayed in the competitor comparison table.
get_consensus_estimates_from_identifiersHyperlink Rule (STRICTLY ENFORCED): Every claim in the report — numeric AND non-numeric — MUST be wrapped in an hyperlink pointing to the corresponding entry in the Appendix. This is not optional. Every single number in the report must be a clickable link. This includes: revenue figures, EPS, margins, growth rates, market caps, P/E ratios, stock returns, price targets, segment revenue, and any other financial metric. It also includes qualitative claims from transcripts or Kensho searches. If you state it as fact, it must link to a source. Assign each unique claim a sequential reference ID (, , etc.). The hyperlink style is subtle — navy color, no underline, dotted underline on hover. Do NOT write any number in the report body without wrapping it in an tag. Example: write , NEVER write as plain text.
<a href="#ref-N" class="data-ref">ref-1ref-2<a><a href="#ref-1" class="data-ref">$152.3B</a>$152.3B生成针对单一公司的简洁、专业股票研究盈利预览报告。输出为独立的HTML文件,打印后约4-5页。报告包含丰富图表与数据,叙述简洁直接,直击要点。
数据来源(零例外): 仅允许使用 Kensho Grounding MCP()和 S&P Global MCP()作为数据来源。绝对禁止使用任何其他工具、数据源或网络访问。具体要求:
searchkfinance- 禁止使用、
WebSearch、WebFetch、web_search、brave_search或任何通用网络搜索工具——即使Kensho响应缓慢、无结果或暂时不可用。google_search - 禁止使用任何浏览器、URL获取或网页抓取工具。
- 如果Kensho Grounding查询无结果,尝试重新表述查询或在报告中注明“数据不可用”。绝对不能退而求其次使用网络搜索。
- 报告中的每一条信息都必须可追溯至MCP函数调用或Kensho
kfinance调用。若无法溯源至这两者之一,则不得出现在报告中。search
关键规则: 必须完成所有研究与数据收集(第1-5阶段)之后,才能开始撰写报告的任何部分。
中间文件规则: 所有来自MCP工具调用的原始数据必须在每次工具调用返回后立即写入目录下的文件——再进行下一次调用。这能避免数据因上下文窗口压缩丢失。不得仅将数据保存在内存中。在第1阶段开始时,执行创建目录。在生成HTML报告(第7阶段)之前,必须使用命令将所有中间文件读回上下文。文件——而非你对之前对话的记忆——是报告中所有数字、引用和来源URL的唯一真实依据。若跳过读取文件,报告必然会包含错误。
/tmp/earnings-preview/mkdir -p /tmp/earnings-previewcat财季规则: 绝不能从日历报告日期推断财季。许多公司采用非标准财年(例如,沃尔玛财年截止于1月31日,因此2026年2月的报告涵盖2026财年第4季度,而非2025年第4季度或2026年第1季度)。必须完全按照或返回的盈利会议名称中的财季和财年表述(例如,“Walmart Q4 FY2026 Earnings Call”指的是2026财年第4季度)。在报告标题、页眉、表格及所有引用中均需原样使用该表述。若会议名称存在歧义,需与返回的期间标签交叉验证。
get_next_earnings_from_identifiersget_earnings_from_identifiersget_financial_line_item_from_identifiers篇幅规则: 报告必须简洁。目标为打印后4-5页。不得撰写冗长的多段落叙述。使用简洁有力的项目符号。每一句话都必须有存在的价值。能用更少的字表达,就尽量精简。
原文引用规则: 使用标签引用管理层发言时,文本必须完全从会议记录中复制——一字不差,包括填充词和不完整句子。不得改写、重组、合并不同部分的句子或“整理”引用内容。若无法在会议记录中找到确切表述,不得将其作为直接引用呈现。取而代之的是,用你自己的叙述语气改写,不使用blockquote格式(例如:“管理层指出数据中心需求依然旺盛”)。每一处blockquote都必须是可对照会议记录验证的逐字复制摘录。
<blockquote>计算完整性规则: 对于任何多步骤计算(从年度指引推导季度数据、LTM市盈率、同比增长率、部门同比变化),必须明确写出每一步骤,并在下一步使用前验证中间结果。若你表述A+B+C=X,需在后续公式使用X之前验证X的算术正确性。若附录显示的总和与所列成分不符,报告即为错误。如有疑问,从原始数据重新计算,而非复用之前计算的中间值。
比率命名规则: 所有估值比率必须明确标注为LTM(过去12个月)或NTM(未来12个月)。绝不能使用“ trailing”或“forward”——必须始终使用LTM或NTM。LTM比率使用最近4个已报告季度的总和。NTM比率使用返回的未来4个季度共识平均EPS预期总和——而非单一年度数值。竞争对手对比表中必须计算并显示LTM和NTM市盈率。
get_consensus_estimates_from_identifiers超链接规则(严格执行): 报告中的每一项声明——数值型和非数值型——都必须包裹在超链接中,指向附录中对应的条目。此要求为强制性,无例外。报告中的每一个数字都必须是可点击的链接。 包括:收入数据、EPS、利润率、增长率、市值、市盈率、股票回报率、目标价、部门收入及其他任何财务指标。同时也包括来自会议记录或Kensho搜索的定性声明。只要你将其作为事实陈述,就必须链接到来源。为每个唯一声明分配连续的引用ID(、等)。超链接样式需低调——深蓝色,无下划线, hover时显示点状下划线。不得在报告正文中以纯文本形式书写任何数字。 示例:应写,绝不能写。
<a href="#ref-N" class="data-ref">ref-1ref-2<a href="#ref-1" class="data-ref">$152.3B</a>$152.3BPhase 1: Company Profile & Setup
第1阶段:公司概况与准备
- Parse the single company ticker from (strip whitespace).
$ARGUMENTS - Run to create the working directory.
mkdir -p /tmp/earnings-preview - Call to establish current reporting period context.
get_latest() - Call — record market cap, industry.
get_info_from_identifiers - Call — record business description.
get_company_summary_from_identifiers - Call — record upcoming earnings date and fiscal quarter name.
get_next_earnings_from_identifiers
Immediately write :
/tmp/earnings-preview/company-info.txtTICKER: [ticker]
COMPANY: [full name]
INDUSTRY: [industry]
MARKET_CAP: [value] (as of [date])
NEXT_EARNINGS_DATE: [date]
NEXT_EARNINGS_QUARTER: [Q# FY#### exactly as returned by API]
BUSINESS_DESCRIPTION: [2-3 sentence summary]- 从中解析出单一公司股票代码(去除空格)。
$ARGUMENTS - 执行创建工作目录。
mkdir -p /tmp/earnings-preview - 调用确定当前报告期间上下文。
get_latest() - 调用——记录市值、行业。
get_info_from_identifiers - 调用——记录业务描述。
get_company_summary_from_identifiers - 调用——记录即将到来的盈利日期和财季名称。
get_next_earnings_from_identifiers
立即写入 :
/tmp/earnings-preview/company-info.txtTICKER: [股票代码]
COMPANY: [全称]
INDUSTRY: [行业]
MARKET_CAP: [数值] (截至 [日期])
NEXT_EARNINGS_DATE: [日期]
NEXT_EARNINGS_QUARTER: [API返回的Q# FY####原样内容]
BUSINESS_DESCRIPTION: [2-3句摘要]Phase 2: Earnings Transcript Analysis (MANDATORY — COMPLETE BEFORE WRITING)
第2阶段:盈利会议记录分析(强制性——必须在撰写前完成)
- Call to get the most recent completed earnings call
get_latest_earnings_from_identifiers.key_dev_id - Call for that transcript.
get_transcript_from_key_dev_id - Immediately write with the following sections. Write this file WHILE you still have the transcript in context — do not wait:
/tmp/earnings-preview/transcript-extracts.txt
TRANSCRIPT_SOURCE: [Call Name, e.g., "Q3 2025 Earnings Call"]
KEY_DEV_ID: [key_dev_id]
CALL_DATE: [date]
FISCAL_QUARTER: [Q# FY####]
=== VERBATIM QUOTES (copy-paste exactly — do NOT paraphrase) ===
QUOTE_1: "[exact text from transcript]"
SPEAKER_1: [Name], [Title]
CONTEXT_1: [1 sentence on where this appeared — prepared remarks or Q&A]
QUOTE_2: "[exact text from transcript]"
SPEAKER_2: [Name], [Title]
CONTEXT_2: [context]
QUOTE_3: "[exact text from transcript]"
SPEAKER_3: [Name], [Title]
CONTEXT_3: [context]
QUOTE_4: "[exact text from transcript]"
SPEAKER_4: [Name], [Title]
CONTEXT_4: [context]
=== GUIDANCE (quantitative only) ===
- [metric]: [range or point estimate as stated by management]
- [metric]: [range or point estimate]
=== KEY DRIVERS ===
- [driver 1 with supporting data point]
- [driver 2 with supporting data point]
- [driver 3 with supporting data point]
=== HEADWINDS & RISKS ===
- [risk 1 with quantification if available]
- [risk 2]
=== ANALYST Q&A THEMES ===
- [theme 1: what analysts pushed on]
- [theme 2]
- [theme 3]
=== SYNTHESIS: THEMES TO WATCH NEXT QUARTER ===
- [theme 1]
- [theme 2]
- [theme 3]- 调用获取最近一次已完成盈利会议的
get_latest_earnings_from_identifiers。key_dev_id - 调用获取该会议记录。
get_transcript_from_key_dev_id - 立即写入 ,包含以下部分。需在会议记录仍在上下文时写入此文件——不得等待:
/tmp/earnings-preview/transcript-extracts.txt
TRANSCRIPT_SOURCE: [会议名称,例如:"Q3 2025 Earnings Call"]
KEY_DEV_ID: [key_dev_id]
CALL_DATE: [日期]
FISCAL_QUARTER: [Q# FY####]
=== 原文引用(逐字复制——不得改写) ===
QUOTE_1: "[会议记录中的确切文本]"
SPEAKER_1: [姓名], [职位]
CONTEXT_1: [1句话说明出处——准备发言或问答环节]
QUOTE_2: "[会议记录中的确切文本]"
SPEAKER_2: [姓名], [职位]
CONTEXT_2: [上下文]
QUOTE_3: "[会议记录中的确切文本]"
SPEAKER_3: [姓名], [职位]
CONTEXT_3: [上下文]
QUOTE_4: "[会议记录中的确切文本]"
SPEAKER_4: [姓名], [职位]
CONTEXT_4: [上下文]
=== 指引(仅量化内容) ===
- [指标]: [管理层声明的区间或点估计]
- [指标]: [区间或点估计]
=== 关键驱动因素 ===
- [驱动因素1及支持数据点]
- [驱动因素2及支持数据点]
- [驱动因素3及支持数据点]
=== 不利因素与风险 ===
- [风险1及可用量化数据]
- [风险2]
=== 分析师问答主题 ===
- [主题1:分析师关注的重点]
- [主题2]
- [主题3]
=== 总结:下一季度需关注的主题 ===
- [主题1]
- [主题2]
- [主题3]Phase 3: Competitor Analysis
第3阶段:竞争对手分析
- Call with
get_competitors_from_identifiers.competitor_source="all" - Select top 5-7 most relevant public competitors.
- For the company AND all selected competitors, gather:
- with
get_prices_from_identifiers, last 12 monthsperiodicity="day" - for
get_financial_line_item_from_identifiers,diluted_eps,period_type="quarterly"num_periods=8 - with
get_capitalization_from_identifiers(latest)capitalization="market_cap" - with
get_consensus_estimates_from_identifiers,period_type="quarterly"— this returns consensus mean EPS estimates for the next 4 quarters, which are summed to compute NTM EPSnum_periods_forward=4
After each tool call returns, immediately append the raw data to the appropriate intermediate file:
Write — one row per (ticker, date, close). Include the column with the exact MCP function call. Write the subject company's prices first, then each competitor's as you fetch them:
/tmp/earnings-preview/prices.csvsourceticker,date,close,source
D,2025-02-19,55.67,get_prices_from_identifiers(identifier='D',periodicity='day')
D,2025-02-20,55.82,get_prices_from_identifiers(identifier='D',periodicity='day')
...
DUK,2025-02-19,111.79,get_prices_from_identifiers(identifier='DUK',periodicity='day')
...Note: the value is the same for all rows from a single call — write it on every row so it's always available.
sourceWrite — one row per (ticker, period, eps). Write immediately after each call:
/tmp/earnings-preview/peer-eps.csvdiluted_epsticker,period,diluted_eps,source
D,Q4 2024,1.09,get_financial_line_item_from_identifiers(identifier='D',line_item='diluted_eps',period_type='quarterly')
D,Q1 2025,-0.11,get_financial_line_item_from_identifiers(identifier='D',line_item='diluted_eps',period_type='quarterly')
...
DUK,Q4 2024,1.52,get_financial_line_item_from_identifiers(identifier='DUK',line_item='diluted_eps',period_type='quarterly')
...Write — one row per ticker. Write immediately after each call:
/tmp/earnings-preview/peer-market-caps.csvmarket_capticker,market_cap,retrieval_date,source
D,55900000000,2026-02-19,get_capitalization_from_identifiers(identifier='D',capitalization='market_cap')
DUK,98300000000,2026-02-19,get_capitalization_from_identifiers(identifier='DUK',capitalization='market_cap')
...Write — one row per (ticker, period, consensus mean EPS). Write immediately after each call:
/tmp/earnings-preview/consensus-eps.csvget_consensus_estimates_from_identifiersticker,period,consensus_mean_eps,num_estimates,source
D,Q4 2025,0.88,12,get_consensus_estimates_from_identifiers(identifier='D',period_type='quarterly',num_periods_forward=4)
D,Q1 2026,0.72,10,get_consensus_estimates_from_identifiers(identifier='D',period_type='quarterly',num_periods_forward=4)
D,Q2 2026,0.91,9,get_consensus_estimates_from_identifiers(identifier='D',period_type='quarterly',num_periods_forward=4)
D,Q3 2026,1.05,8,get_consensus_estimates_from_identifiers(identifier='D',period_type='quarterly',num_periods_forward=4)
DUK,Q4 2025,1.48,14,get_consensus_estimates_from_identifiers(identifier='DUK',period_type='quarterly',num_periods_forward=4)
...- Do NOT calculate P/E or returns yet. The raw data is now on disk. Calculations happen in Phase 6 (Verification), reading from these files.
Date Consistency Rule (stock returns): When computing comparative stock returns (YTD %, 1-yr %, 30d %, 90d %), ALL tickers MUST use the exact same start and end dates. After writing all price data to , identify the first trading date that appears in ALL tickers' data and use that as the common base date. Do NOT use different base dates for different tickers (e.g., the subject from Feb 19 and peers from Feb 28). If a ticker's data starts later than others, use the first overlapping date for ALL calculations. State the common base date in the appendix for every return calculation.
prices.csvP/E Currency Rule (LTM P/E): When computing LTM P/E for each company, use that company's most recent 4 reported quarters from — not a fixed calendar window applied to all. If a peer has already reported Q4 2025 while the subject company has only reported through Q3 2025, the peer's LTM EPS should include Q4 2025. Check the latest reported period for each company and use the 4 most recent periods per company. Note in the appendix which 4 quarters were used for each P/E calculation.
peer-eps.csvMarket Cap Date-Stamp: When reporting market cap, use the from . If it differs from the report date, note this in the appendix.
retrieval_datepeer-market-caps.csv- 调用,参数
get_competitors_from_identifiers。competitor_source="all" - 选择5-7家最相关的上市竞争对手。
- 针对目标公司及所有选定的竞争对手,收集以下数据:
- ,参数
get_prices_from_identifiers,获取过去12个月数据periodicity="day" - ,参数
get_financial_line_item_from_identifiers、diluted_eps、period_type="quarterly"num_periods=8 - ,参数
get_capitalization_from_identifiers(最新数据)capitalization="market_cap" - ,参数
get_consensus_estimates_from_identifiers、period_type="quarterly"——返回未来4个季度的共识平均EPS预期,求和后计算NTM EPSnum_periods_forward=4
每次工具调用返回后,立即将原始数据追加到相应的中间文件:
写入 ——每行对应(股票代码、日期、收盘价)。包含列,内容为确切的MCP函数调用。先写入目标公司的价格数据,再依次写入各竞争对手的数据:
/tmp/earnings-preview/prices.csvsourceticker,date,close,source
D,2025-02-19,55.67,get_prices_from_identifiers(identifier='D',periodicity='day')
D,2025-02-20,55.82,get_prices_from_identifiers(identifier='D',periodicity='day')
...
DUK,2025-02-19,111.79,get_prices_from_identifiers(identifier='DUK',periodicity='day')
...注意:单次调用返回的所有行的值相同——需为每行都写入该值,确保随时可用。
source写入 ——每行对应(股票代码、期间、eps)。每次调用后立即写入:
/tmp/earnings-preview/peer-eps.csvdiluted_epsticker,period,diluted_eps,source
D,Q4 2024,1.09,get_financial_line_item_from_identifiers(identifier='D',line_item='diluted_eps',period_type='quarterly')
D,Q1 2025,-0.11,get_financial_line_item_from_identifiers(identifier='D',line_item='diluted_eps',period_type='quarterly')
...
DUK,Q4 2024,1.52,get_financial_line_item_from_identifiers(identifier='DUK',line_item='diluted_eps',period_type='quarterly')
...写入 ——每行对应一个股票代码。每次调用后立即写入:
/tmp/earnings-preview/peer-market-caps.csvmarket_capticker,market_cap,retrieval_date,source
D,55900000000,2026-02-19,get_capitalization_from_identifiers(identifier='D',capitalization='market_cap')
DUK,98300000000,2026-02-19,get_capitalization_from_identifiers(identifier='DUK',capitalization='market_cap')
...写入 ——每行对应(股票代码、期间、共识平均EPS)。每次调用后立即写入:
/tmp/earnings-preview/consensus-eps.csvget_consensus_estimates_from_identifiersticker,period,consensus_mean_eps,num_estimates,source
D,Q4 2025,0.88,12,get_consensus_estimates_from_identifiers(identifier='D',period_type='quarterly',num_periods_forward=4)
D,Q1 2026,0.72,10,get_consensus_estimates_from_identifiers(identifier='D',period_type='quarterly',num_periods_forward=4)
D,Q2 2026,0.91,9,get_consensus_estimates_from_identifiers(identifier='D',period_type='quarterly',num_periods_forward=4)
D,Q3 2026,1.05,8,get_consensus_estimates_from_identifiers(identifier='D',period_type='quarterly',num_periods_forward=4)
DUK,Q4 2025,1.48,14,get_consensus_estimates_from_identifiers(identifier='DUK',period_type='quarterly',num_periods_forward=4)
...- 暂不计算市盈率或回报率。原始数据已存储在磁盘上,计算将在第6阶段(验证)进行,读取这些文件中的数据。
日期一致性规则(股票回报率): 计算对比股票回报率(年初至今百分比、1年百分比、30天百分比、90天百分比)时,所有股票代码必须使用完全相同的起止日期。将所有价格数据写入后,确定所有股票代码数据中都存在的首个交易日,将其作为共同基准日期。不得为不同股票代码使用不同基准日期(例如,目标公司使用2月19日,竞争对手使用2月28日)。若某股票代码的数据起始日期晚于其他,所有计算均使用首个重叠日期。在附录中注明每次回报率计算使用的共同基准日期。
prices.csv市盈率货币规则(LTM市盈率): 计算每家公司的LTM市盈率时,使用中该公司最近4个已报告季度的数据——而非对所有公司应用固定日历窗口。若某竞争对手已发布2025年第4季度报告,而目标公司仅发布至2025年第3季度,则该竞争对手的LTM EPS应包含2025年第4季度数据。检查每家公司的最新报告期间,为每家公司使用最近4个期间的数据。在附录中注明每项市盈率计算使用了哪4个季度。
peer-eps.csv市值日期戳: 报告市值时,使用中的。若该日期与报告日期不同,需在附录中注明。
peer-market-caps.csvretrieval_datePhase 4: News, Estimates & Sector Intelligence (via Kensho Grounding)
第4阶段:新闻、预期与行业情报(通过Kensho Grounding)
Run these queries for each category below. Do NOT skip any.
searchCRITICAL — Capture Source URLs: Every Kensho result includes a source URL for the underlying article, report, or data page. You MUST record the URL alongside each finding.
searchAfter EACH search call, immediately append the results to using the format below. Do NOT wait until all searches are done — write after each one:
/tmp/earnings-preview/kensho-findings.txt=== SEARCH: "[query used]" ===
DATE_RUN: [today's date]
CATEGORY: [estimates|analyst_ratings|risks|news|sector]
FINDING_1: [key finding or excerpt]
URL_1: [source URL from search result]
SOURCE_1: [publication name, date if available]
FINDING_2: [key finding or excerpt]
URL_2: [source URL]
SOURCE_2: [publication name, date]
[...continue for all relevant results from this search...]Earnings estimates & analyst sentiment:
- for "[TICKER] earnings estimates consensus EPS revenue upcoming quarter"
search- Record: consensus EPS, consensus revenue, estimate revision direction over last 90 days.
- Append to kensho-findings.txt immediately.
- for "[TICKER] analyst ratings price target upgrades downgrades"
search- Record: recent upgrades/downgrades, price target range, bull/bear thesis summaries.
- Append to kensho-findings.txt immediately.
- for "[TICKER] risks bear case concerns investors"
search- Record: key debates, bear arguments, swing factors for the upcoming print.
- Append to kensho-findings.txt immediately.
Recent news (MANDATORY — do not skip):
4. for "[TICKER] [company name] recent news developments"
search- Record: material news from the last 60 days — M&A, product launches, executive changes, regulatory actions, partnerships, legal developments, tariffs, or any event that could affect the upcoming earnings print or forward guidance.
- For each item, note the date, headline, potential earnings impact.
- Append to kensho-findings.txt immediately.
Sector context:
5. for "[company industry/sector] sector outlook trends"
search- Record: sector-level tailwinds/headwinds, macro data, competitive dynamics.
- Append to kensho-findings.txt immediately.
针对以下每个类别运行查询。不得跳过任何类别。
search关键要求——捕获来源URL: 每个Kensho 结果都包含基础文章、报告或数据页面的来源URL。必须随每个发现记录该URL。
search每次搜索调用后,立即将结果追加到 ,使用以下格式。不得等待所有搜索完成后再写入——每次调用后立即写入:
/tmp/earnings-preview/kensho-findings.txt=== 搜索查询:"[使用的查询词]" ===
DATE_RUN: [今日日期]
CATEGORY: [estimates|analyst_ratings|risks|news|sector]
FINDING_1: [关键发现或摘录]
URL_1: [搜索结果中的来源URL]
SOURCE_1: [出版物名称,如有日期请注明]
FINDING_2: [关键发现或摘录]
URL_2: [来源URL]
SOURCE_2: [出版物名称,日期]
[...继续记录本次搜索的所有相关结果...]盈利预期与分析师情绪:
- 查询词:"[股票代码] earnings estimates consensus EPS revenue upcoming quarter"
search- 记录:共识EPS、共识收入、过去90天预期修正方向。
- 立即追加到kensho-findings.txt。
- 查询词:"[股票代码] analyst ratings price target upgrades downgrades"
search- 记录:近期评级上调/下调、目标价区间、多空论点摘要。
- 立即追加到kensho-findings.txt。
- 查询词:"[股票代码] risks bear case concerns investors"
search- 记录:关键争议、看空论点、即将发布报告的摇摆因素。
- 立即追加到kensho-findings.txt。
近期新闻(强制性——不得跳过):
4. 查询词:"[股票代码] [公司名称] recent news developments"
search- 记录:过去60天内的重大新闻——并购、产品发布、高管变动、监管行动、合作、法律进展、关税或任何可能影响即将发布的盈利报告或未来指引的事件。
- 每项新闻需注明日期、标题、对盈利的潜在影响。
- 立即追加到kensho-findings.txt。
行业背景:
5. 查询词:"[公司行业/板块] sector outlook trends"
search- 记录:行业层面的有利/不利因素、宏观数据、竞争动态。
- 立即追加到kensho-findings.txt。
Phase 5: Financial Data Collection
第5阶段:财务数据收集
Quarterly financials (last 8 quarters):
with , for:
, , , , ,
get_financial_line_item_from_identifiersperiod_type="quarterly"num_periods=8revenuegross_profitoperating_incomeebitdanet_incomediluted_epsAfter each line item call returns, immediately append to . Write the raw values exactly as returned — do NOT round or convert yet. Include the column with the exact MCP function call and parameters:
/tmp/earnings-preview/financials.csvsourceticker,period,line_item,value,source
D,Q4 2024,revenue,3941000000,get_financial_line_item_from_identifiers(identifier='D',line_item='revenue',period_type='quarterly')
D,Q1 2025,revenue,3400000000,get_financial_line_item_from_identifiers(identifier='D',line_item='revenue',period_type='quarterly')
D,Q2 2025,revenue,4076000000,get_financial_line_item_from_identifiers(identifier='D',line_item='revenue',period_type='quarterly')
D,Q3 2025,revenue,3810000000,get_financial_line_item_from_identifiers(identifier='D',line_item='revenue',period_type='quarterly')
D,Q4 2024,diluted_eps,1.09,get_financial_line_item_from_identifiers(identifier='D',line_item='diluted_eps',period_type='quarterly')
D,Q1 2025,diluted_eps,-0.11,get_financial_line_item_from_identifiers(identifier='D',line_item='diluted_eps',period_type='quarterly')
...Do NOT calculate margins or growth rates yet. Write raw data only. Calculations happen in Phase 6.
Segment data:
- with
get_segments_from_identifiers,segment_type="business",period_type="quarterly"num_periods=8 - You need 8 quarters (not 4) so you have the year-ago quarter for y/y comparisons. To calculate y/y for Q3 2025, you need Q3 2024 — which is the 5th quarter back. If the prior-year quarter's segment data is not available in the API response, do NOT estimate or fabricate it. State "y/y not available" in the report.
Immediately write :
/tmp/earnings-preview/segments.csvticker,period,segment_name,revenue,source
D,Q3 2024,Dominion Energy Virginia,2762000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2024,Dominion Energy South Carolina,848000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2024,Contracted Energy,260000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2025,Dominion Energy Virginia,3311000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2025,Dominion Energy South Carolina,945000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2025,Contracted Energy,297000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
...Earnings history (for stock chart annotations):
- — collect past earnings dates within the 12-month price window.
get_earnings_from_identifiers - Immediately write :
/tmp/earnings-preview/earnings-dates.csv
ticker,earnings_date,call_name,source
D,2025-05-02,Q1 2025 Earnings Call,get_earnings_from_identifiers(identifier='D')
D,2025-08-01,Q2 2025 Earnings Call,get_earnings_from_identifiers(identifier='D')
D,2025-10-31,Q3 2025 Earnings Call,get_earnings_from_identifiers(identifier='D')
...季度财务数据(过去8个季度):
调用,参数、,获取以下数据:
、、、、、
get_financial_line_item_from_identifiersperiod_type="quarterly"num_periods=8revenuegross_profitoperating_incomeebitdanet_incomediluted_eps每次科目调用返回后,立即追加到 。原样写入原始数值——暂不四舍五入或转换。包含列,内容为确切的MCP函数调用及参数:
/tmp/earnings-preview/financials.csvsourceticker,period,line_item,value,source
D,Q4 2024,revenue,3941000000,get_financial_line_item_from_identifiers(identifier='D',line_item='revenue',period_type='quarterly')
D,Q1 2025,revenue,3400000000,get_financial_line_item_from_identifiers(identifier='D',line_item='revenue',period_type='quarterly')
D,Q2 2025,revenue,4076000000,get_financial_line_item_from_identifiers(identifier='D',line_item='revenue',period_type='quarterly')
D,Q3 2025,revenue,3810000000,get_financial_line_item_from_identifiers(identifier='D',line_item='revenue',period_type='quarterly')
D,Q4 2024,diluted_eps,1.09,get_financial_line_item_from_identifiers(identifier='D',line_item='diluted_eps',period_type='quarterly')
D,Q1 2025,diluted_eps,-0.11,get_financial_line_item_from_identifiers(identifier='D',line_item='diluted_eps',period_type='quarterly')
...暂不计算利润率或增长率。仅写入原始数据。计算将在第6阶段进行。
部门数据:
- 调用,参数
get_segments_from_identifiers、segment_type="business"、period_type="quarterly"num_periods=8 - 需要8个季度数据(而非4个),以便获取去年同期数据用于同比比较。计算2025年第3季度的同比数据时,需要2024年第3季度的数据——即倒数第5个季度。若API响应中无去年同期的部门数据,不得估算或编造。需在报告中注明“同比数据不可用”。
立即写入 :
/tmp/earnings-preview/segments.csvticker,period,segment_name,revenue,source
D,Q3 2024,Dominion Energy Virginia,2762000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2024,Dominion Energy South Carolina,848000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2024,Contracted Energy,260000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2025,Dominion Energy Virginia,3311000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2025,Dominion Energy South Carolina,945000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2025,Contracted Energy,297000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
...盈利历史(用于股价图表标注):
- 调用——收集12个月价格窗口内的过往盈利日期。
get_earnings_from_identifiers - 立即写入 :
/tmp/earnings-preview/earnings-dates.csv
ticker,earnings_date,call_name,source
D,2025-05-02,Q1 2025 Earnings Call,get_earnings_from_identifiers(identifier='D')
D,2025-08-01,Q2 2025 Earnings Call,get_earnings_from_identifiers(identifier='D')
D,2025-10-31,Q3 2025 Earnings Call,get_earnings_from_identifiers(identifier='D')
...Phase 6: Verification & Calculations (MANDATORY — DO NOT SKIP)
第6阶段:验证与计算(强制性——不得跳过)
Before generating the report, read back ALL intermediate files and perform calculations from the clean data. This phase ensures data integrity by working from files rather than compressed conversation context.
-
Read all intermediate files using bashcommands:
catcat /tmp/earnings-preview/company-info.txtcat /tmp/earnings-preview/transcript-extracts.txtcat /tmp/earnings-preview/financials.csvcat /tmp/earnings-preview/segments.csvcat /tmp/earnings-preview/prices.csvcat /tmp/earnings-preview/peer-eps.csvcat /tmp/earnings-preview/peer-market-caps.csvcat /tmp/earnings-preview/consensus-eps.csvcat /tmp/earnings-preview/kensho-findings.txtcat /tmp/earnings-preview/earnings-dates.csv
-
Calculate derived metrics from the raw data now in context:
- Gross margin % = gross_profit / revenue (per quarter)
- Operating margin % = operating_income / revenue (per quarter)
- Revenue y/y growth % = (current Q revenue - year-ago Q revenue) / year-ago Q revenue
- EPS y/y growth % = same logic; use "n.m." if base is negative
- Segment y/y growth % = match segment by name to year-ago Q; if missing, note "y/y not available"
- LTM P/E per company = latest price / sum of most recent 4 quarterly EPS (check which 4 quarters are available per ticker using )
peer-eps.csv - NTM P/E per company = latest price / NTM EPS, where NTM EPS = sum of the next 4 quarterly consensus mean EPS estimates from . Add all 4 quarters' consensus_mean_eps values for each ticker. If fewer than 4 forward quarters are available for a peer, mark NTM P/E as "n/a". Note in the appendix which 4 quarters were summed.
consensus-eps.csv - Stock returns (YTD, 1-yr, 30d, 90d) = find the common first date across all tickers in , then compute returns from that date
prices.csv
-
Cross-check:
- Verify every segment y/y has the actual prior-year row in . If not, mark "y/y not available."
segments.csv - Verify all stock return base dates are identical across tickers.
- Verify any multi-step calculation by re-summing components (e.g., LTM EPS sum matches the 4 quarterly values).
- Verify all verbatim quotes in are exact copy-pastes (not paraphrases).
transcript-extracts.txt
- Verify every segment y/y has the actual prior-year row in
-
Writewith all derived values:
/tmp/earnings-preview/calculations.csv
ticker,metric,value,formula,components
D,gross_margin_Q3_2025,32.5%,gross_profit/revenue,"gross_profit=1238100000,revenue=3810000000"
D,revenue_yoy_Q3_2025,+9.3%,(Q3_2025-Q3_2024)/Q3_2024,"Q3_2025=3810000000,Q3_2024=3486000000"
D,ltm_pe,24.2x,price/ltm_eps,"price=65.46,ltm_eps=2.70,quarters=Q4_2024+Q1_2025+Q2_2025+Q3_2025"
D,ntm_pe,18.5x,price/ntm_eps,"price=65.46,ntm_eps=3.56,quarters=Q4_2025(0.88)+Q1_2026(0.72)+Q2_2026(0.91)+Q3_2026(1.05),source=get_consensus_estimates_from_identifiers"
D,yoy_return,+17.6%,(end-start)/start,"end=65.46,start=55.67,base_date=2025-02-19"
DUK,yoy_return,+13.0%,(end-start)/start,"end=126.32,start=111.79,base_date=2025-02-19"
...This file becomes the single source of truth for all numbers in the report.
生成报告前,读回所有中间文件并从干净数据中执行计算。此阶段通过文件而非压缩的对话上下文工作,确保数据完整性。
-
使用bash命令读取所有中间文件:
catcat /tmp/earnings-preview/company-info.txtcat /tmp/earnings-preview/transcript-extracts.txtcat /tmp/earnings-preview/financials.csvcat /tmp/earnings-preview/segments.csvcat /tmp/earnings-preview/prices.csvcat /tmp/earnings-preview/peer-eps.csvcat /tmp/earnings-preview/peer-market-caps.csvcat /tmp/earnings-preview/consensus-eps.csvcat /tmp/earnings-preview/kensho-findings.txtcat /tmp/earnings-preview/earnings-dates.csv
-
从当前上下文中的原始数据计算派生指标:
- 毛利率% = 毛利润 / 收入(按季度)
- 营业利润率% = 营业收入 / 收入(按季度)
- 收入同比增长率% = (当期季度收入 - 去年同期季度收入) / 去年同期季度收入
- EPS同比增长率% = 相同逻辑;若基数为负则使用"n.m."
- 部门同比增长率% = 按名称匹配去年同期季度数据;若缺失则注明“同比数据不可用”
- 每家公司的LTM市盈率 = 最新股价 / 最近4个季度EPS总和(使用检查每家股票代码可用的4个季度)
peer-eps.csv - 每家公司的NTM市盈率 = 最新股价 / NTM EPS,其中NTM EPS = 中未来4个季度共识平均EPS预期总和。将每家股票代码的4个季度consensus_mean_eps值相加。若某竞争对手的未来季度数据不足4个,则标记NTM市盈率为"n/a"。在附录中注明相加的是哪4个季度。
consensus-eps.csv - 股票回报率(年初至今、1年、30天、90天) = 在中找到所有股票代码共有的首个日期,然后计算从该日期开始的回报率
prices.csv
-
交叉验证:
- 验证每个部门同比数据在中都有对应的去年同期行。若无,则标记“同比数据不可用”。
segments.csv - 验证所有股票回报率的基准日期在各股票代码间完全一致。
- 通过重新求和组件验证任何多步骤计算(例如,LTM EPS总和与4个季度数值匹配)。
- 验证中的所有原文引用均为逐字复制(而非改写)。
transcript-extracts.txt
- 验证每个部门同比数据在
-
写入,包含所有派生值:
/tmp/earnings-preview/calculations.csv
ticker,metric,value,formula,components
D,gross_margin_Q3_2025,32.5%,gross_profit/revenue,"gross_profit=1238100000,revenue=3810000000"
D,revenue_yoy_Q3_2025,+9.3%,(Q3_2025-Q3_2024)/Q3_2024,"Q3_2025=3810000000,Q3_2024=3486000000"
D,ltm_pe,24.2x,price/ltm_eps,"price=65.46,ltm_eps=2.70,quarters=Q4_2024+Q1_2025+Q2_2025+Q3_2025"
D,ntm_pe,18.5x,price/ntm_eps,"price=65.46,ntm_eps=3.56,quarters=Q4_2025(0.88)+Q1_2026(0.72)+Q2_2026(0.91)+Q3_2026(1.05),source=get_consensus_estimates_from_identifiers"
D,yoy_return,+17.6%,(end-start)/start,"end=65.46,start=55.67,base_date=2025-02-19"
DUK,yoy_return,+13.0%,(end-start)/start,"end=126.32,start=111.79,base_date=2025-02-19"
...此文件将作为报告中所有数字的唯一真实依据。
Phase 7: Generate the HTML Report
第7阶段:生成HTML报告
STOP — BEFORE WRITING ANY HTML, YOU MUST READ ALL INTERMEDIATE FILES. THIS IS A BLOCKING PREREQUISITE.
This is not optional. You MUST run each command below as a separate bash tool call (not combined into one). This ensures each file's contents are individually loaded and visible in the conversation. Do NOT combine them into a single command. Do NOT skip any file.
catRun these commands one at a time, each as its own bash call:
cat /tmp/earnings-preview/company-info.txtcat /tmp/earnings-preview/transcript-extracts.txtcat /tmp/earnings-preview/financials.csvcat /tmp/earnings-preview/segments.csvcat /tmp/earnings-preview/prices.csvcat /tmp/earnings-preview/peer-eps.csvcat /tmp/earnings-preview/peer-market-caps.csvcat /tmp/earnings-preview/consensus-eps.csvcat /tmp/earnings-preview/kensho-findings.txtcat /tmp/earnings-preview/earnings-dates.csvcat /tmp/earnings-preview/calculations.csv
After reading ALL files, you MUST print a summary message to the user that lists every file and its status. Use exactly this format:
--- DATA FILE VERIFICATION ---
1. company-info.txt ✓ loaded ([N] lines)
2. transcript-extracts.txt ✓ loaded ([N] lines)
3. financials.csv ✓ loaded ([N] rows)
4. segments.csv ✓ loaded ([N] rows)
5. prices.csv ✓ loaded ([N] rows)
6. peer-eps.csv ✓ loaded ([N] rows)
7. peer-market-caps.csv ✓ loaded ([N] rows)
8. consensus-eps.csv ✓ loaded ([N] rows)
9. kensho-findings.txt ✓ loaded ([N] lines)
10. earnings-dates.csv ✓ loaded ([N] rows)
11. calculations.csv ✓ loaded ([N] rows)
All intermediate data files loaded successfully.
Generating report using file data as the single source of truth.
---If any file is missing or empty, STOP and tell the user which file failed. Do NOT proceed to generate the report with missing data.
Every number, quote, source URL, and MCP function call reference in the HTML report must come from these files — not from your memory of earlier conversation turns. The files are the single source of truth. Earlier conversation context may have been compressed or summarized and WILL contain errors if relied upon. If a data point is not in the files, it should not appear in the report.
See report-template.md for the complete HTML template, CSS, and Chart.js configuration.
MANDATORY — Use Template Helper Functions for Charts:
The report-template.md provides pre-built, debugged Chart.js helper functions. You MUST use these exact functions to create charts. Do NOT write custom inline Chart.js code. The helpers are:
- — for Figure 1
createRevEpsChart(canvasId, labels, revenueData, epsData, revLabel) - — for Figure 2
createMarginChart(canvasId, labels, grossMargins, opMargins) - — for Figure 3
createRevGrowthChart(canvasId, labels, growthData) - — for Figure 5
createAnnotatedPriceChart(canvasId, labels, prices, earningsDates, ticker) - — for Figure 6
createCompPerfChart(canvasId, labels, datasets) - — for Figure 7
createPEChart(canvasId, companies)
Each chart call MUST be in its own tag wrapped in a try-catch block. This ensures a bug in one chart does not prevent other charts from rendering. Example:
<script>html
<script>
try {
createRevEpsChart('chart-rev-eps', [...], [...], [...], 'Revenue ($B)');
} catch(e) { console.error('Figure 1 error:', e); }
</script>
<script>
try {
createMarginChart('chart-margins', [...], [...], [...]);
} catch(e) { console.error('Figure 2 error:', e); }
</script>暂停——在撰写任何HTML之前,必须读取所有中间文件。这是强制性前置要求。
此要求无例外。必须将以下每个命令作为单独的bash工具调用执行(不得合并为一个命令)。这确保每个文件的内容都被单独加载并在对话中可见。不得合并命令。不得跳过任何文件。
cat依次执行以下命令,每个命令作为单独的bash调用:
cat /tmp/earnings-preview/company-info.txtcat /tmp/earnings-preview/transcript-extracts.txtcat /tmp/earnings-preview/financials.csvcat /tmp/earnings-preview/segments.csvcat /tmp/earnings-preview/prices.csvcat /tmp/earnings-preview/peer-eps.csvcat /tmp/earnings-preview/peer-market-caps.csvcat /tmp/earnings-preview/consensus-eps.csvcat /tmp/earnings-preview/kensho-findings.txtcat /tmp/earnings-preview/earnings-dates.csvcat /tmp/earnings-preview/calculations.csv
读取所有文件后,必须向用户打印一条汇总消息,列出每个文件及其状态。使用以下精确格式:
--- 数据文件验证 ---
1. company-info.txt ✓ 已加载 ([N] 行)
2. transcript-extracts.txt ✓ 已加载 ([N] 行)
3. financials.csv ✓ 已加载 ([N] 行)
4. segments.csv ✓ 已加载 ([N] 行)
5. prices.csv ✓ 已加载 ([N] 行)
6. peer-eps.csv ✓ 已加载 ([N] 行)
7. peer-market-caps.csv ✓ 已加载 ([N] 行)
8. consensus-eps.csv ✓ 已加载 ([N] 行)
9. kensho-findings.txt ✓ 已加载 ([N] 行)
10. earnings-dates.csv ✓ 已加载 ([N] 行)
11. calculations.csv ✓ 已加载 ([N] 行)
所有中间数据文件加载成功。
将使用文件数据作为唯一真实依据生成报告。
---若任何文件缺失或为空,需停止操作并告知用户哪个文件加载失败。不得在数据缺失的情况下继续生成报告。
HTML报告中的每个数字、引用、来源URL和MCP函数调用引用都必须来自这些文件——而非你对之前对话回合的记忆。文件是唯一真实依据。之前的对话上下文可能已被压缩或总结,若依赖必然会出现错误。若某数据点未在文件中出现,则不得出现在报告中。
完整的HTML模板、CSS和Chart.js配置请参考report-template.md。
强制性要求——使用模板辅助函数创建图表:
report-template.md提供了预构建、已调试的Chart.js辅助函数。必须使用这些精确函数创建图表。不得编写自定义内联Chart.js代码。辅助函数包括:
- — 用于图1
createRevEpsChart(canvasId, labels, revenueData, epsData, revLabel) - — 用于图2
createMarginChart(canvasId, labels, grossMargins, opMargins) - — 用于图3
createRevGrowthChart(canvasId, labels, growthData) - — 用于图5
createAnnotatedPriceChart(canvasId, labels, prices, earningsDates, ticker) - — 用于图6
createCompPerfChart(canvasId, labels, datasets) - — 用于图7
createPEChart(canvasId, companies)
每个图表调用必须放在单独的标签中,并包裹在try-catch块内。这确保单个图表的错误不会影响其他图表的渲染。示例:
<script>html
<script>
try {
createRevEpsChart('chart-rev-eps', [...], [...], [...], 'Revenue ($B)');
} catch(e) { console.error('Figure 1 error:', e); }
</script>
<script>
try {
createMarginChart('chart-margins', [...], [...], [...]);
} catch(e) { console.error('Figure 2 error:', e); }
</script>Report Structure (4-5 pages total)
报告结构(共4-5页)
The report has two halves: narrative (pages 1-2) and figures (pages 3-5). Keep these tightly integrated.
AI DISCLAIMER (MANDATORY — must appear in 3 places):
You MUST include the following disclaimer text in the report HTML. This is not optional — the report is incomplete without it:
"Analysis is AI-generated — please confirm all outputs"
It must appear in exactly these 3 locations:
- Header banner — immediately before the cover header, as a centered yellow banner:
<div class="ai-disclaimer">Analysis is AI-generated — please confirm all outputs</div> - Footer — inside the page-footer div, as a prominent yellow banner:
<div class="footer-disclaimer">Analysis is AI-generated — please confirm all outputs</div> - Appendix — as the first line of the appendix section, before the table:
<div class="ai-disclaimer">Analysis is AI-generated — please confirm all outputs</div>
PAGE 1: Cover & Thesis
- AI disclaimer banner (yellow, centered — see AI DISCLAIMER rule above)
- Header: Company name (TICKER) | Industry | Report date
- Title: Thematic, specific to the quarter (e.g., "Walmart Inc. (WMT) Q4 FY2026 Earnings Preview: Holiday Harvest — Can Furner's First Print Confirm the $1T Thesis?")
- Executive thesis (2-3 short paragraphs max with bullet points):
- What we expect from this print in 1-2 sentences
- 4-6 bullet points covering: our EPS estimate vs consensus, guidance expectations, key metrics to watch, what would move the stock, key debates
- Keep it direct and opinionated — take a view, don't hedge everything
- Key management quotes from the most recent earnings call woven into the narrative where relevant. Do NOT put these under a separate heading. Integrate them naturally as supporting evidence for your thesis points. Format as indented blockquotes.
PAGE 2: Estimates, Themes & News
-
Consensus Estimates Table (single table, labeled as a figure):
- Columns: Metric | Consensus | Our Estimate | y/y Change
- Rows: Revenue, EPS, Gross Margin, Operating Income, and 2-3 company-specific KPIs that matter (e.g., comp sales, eComm growth, membership revenue — whatever the Street cares about for THIS company)
- Color-coding is strictly mechanical: If the y/y change value is negative, use (red). If positive, use
class="neg"(green). If zero or N/A, useclass="pos". The sign of the number determines the class — do NOT override based on interpretation. A -1.1% is ALWAYS red, even if the decline is small.class="neutral" - This is the ONLY guidance/estimates section. Do not repeat estimate data elsewhere.
-
Key Metrics Beyond Headline EPS (bulleted list, 3-5 items):
- The specific metrics that will determine if this is a good or bad quarter beyond the EPS number
- For each: what the metric is, what consensus/management expects, why it matters
- Be specific: "Walmart Connect ad revenue growth (consensus ~30% y/y, 3Q was 33%)"
-
Themes to Watch (3-5 bullets):
- Forward-looking items for the upcoming report
- What management needs to deliver on, what could surprise, what the bears are focused on
- Each theme: 1-2 sentences max
-
Recent News & Developments (3-5 bullets):
- Material news from the last 60 days, one line each
- Date + headline + brief impact assessment
- Only include items that could affect the upcoming print or guidance
PAGES 3-5: Figures (all charts and tables)
All figures are numbered sequentially. Every figure has a title and source line.
- Figure 1: Quarterly Revenue & Diluted EPS — Bar/line combo, 8 quarters
- Figure 2: Margin Trends (Gross & Operating %) — Dual line chart, 8 quarters
- Figure 3: Revenue Growth y/y % — Bar chart with green/red conditional coloring. Only include quarters where both current and year-ago data exist (typically the most recent 4 quarters from the 8 fetched). Do NOT include quarters where y/y cannot be computed — the chart should have 4 bars, not 8.
- Figure 4: Business Segment Revenue — Table: Segment | Latest Q Rev ($M) | % of Total | y/y Change
- Figure 5: 1-Year Stock Price with Earnings Dates — Price line with vertical annotation lines at earnings dates, labeled with quarter and 1-day post-earnings move
- Figure 6: Stock Performance vs. Competitors (Indexed to 100) — Multi-line chart, subject company as thick solid line, competitors as thinner dashed lines
- Figure 7: LTM P/E vs. Competitors — Horizontal bar chart, subject company highlighted in navy
- Figure 8: Competitor Comparison Table — Ticker | Company | Mkt Cap | LTM P/E | NTM P/E | YTD % | 1-Yr %
APPENDIX: Data Sources & Calculations (MANDATORY — DO NOT SKIP OR ABBREVIATE)
The appendix MUST begin with the AI disclaimer banner:
<div class="ai-disclaimer">Analysis is AI-generated — please confirm all outputs</div>The final page(s) of the report MUST include an Appendix table that documents every claim — numeric and non-numeric — cited in the report. Every number that appears in the report body must have a corresponding row in this appendix, and every such number in the report body must be a clickable hyperlink that scrolls to its appendix row. If a number appears in the report without a hyperlink to the appendix, the report is incomplete.
<a href="#ref-N">-
Table columns: Ref # | Fact | Value | Source & Derivation
-
Ref #: Sequential ID matching the hyperlink anchors in the report body (,
ref-1, etc.). Each row has anref-2attribute so hyperlinks scroll to it.id="ref-N" -
Fact: Human-readable label (e.g., "Q3 FY2026 Revenue", "LTM P/E — WMT", "Management flagged tariff headwinds", "Barclays upgraded to Overweight")
-
Value: The exact figure as displayed in the report (e.g., "$152.3B", "24.5%", "28.1x"). For non-numeric facts, leave blank or write "N/A".
-
Source & Derivation: This is the critical column. Every row must have a specific, detailed source — not just a label. Follow these rules strictly:For raw financial data from S&P Capital IQ (revenue, EPS, gross profit, operating income, net income, EBITDA, prices, market cap, etc.):
- State the MCP function used and its key parameters. Format:
S&P Capital IQ — [function_name](identifier='[TICKER]', line_item='[item]', period_type='[type]', period='[Q# FY####]') - Examples:
S&P Capital IQ — get_financial_line_item_from_identifiers(identifier='WMT', line_item='revenue', period_type='quarterly', period='Q3 FY2026')S&P Capital IQ — get_financial_line_item_from_identifiers(identifier='WMT', line_item='diluted_eps', period_type='quarterly', period='Q3 FY2026')S&P Capital IQ — get_prices_from_identifiers(identifier='WMT', periodicity='day')S&P Capital IQ — get_capitalization_from_identifiers(identifier='WMT', capitalization='market_cap')
- Do NOT just write "S&P Capital IQ" with no detail. The reader must know exactly which data point from which tool call produced this number.
For calculated values (margins, growth rates, P/E, returns, y/y changes):- Show the full formula with hyperlinked components — each component must be an link back to the appendix row for that raw data point. This is critical: the reader must be able to click through from the calculated value to each of its inputs.
<a href="#ref-N"> - Example:
Gross Margin = <a href='#ref-5'>Gross Profit $37.2B</a> / <a href='#ref-1'>Revenue $152.3B</a> = 24.4%. Source: S&P Capital IQ (calculated) - Example:
LTM P/E = <a href='#ref-20'>Price $172.35</a> / (<a href='#ref-8'>Q1 EPS $1.47</a> + <a href='#ref-9'>Q2 EPS $1.84</a> + <a href='#ref-10'>Q3 EPS $1.53</a> + <a href='#ref-11'>Q4 EPS $1.80</a>) = $172.35 / $6.64 = 25.9x - Example:
Revenue y/y growth = (<a href='#ref-12'>Q3 FY26 Rev $165.8B</a> - <a href='#ref-3'>Q3 FY25 Rev $160.8B</a>) / <a href='#ref-3'>Q3 FY25 Rev $160.8B</a> = +3.1% - Every formula component must be a clickable hyperlink. Do NOT write formulas with plain-text numbers.
For transcript-sourced claims (quotes, management commentary, guidance):- Write the verbatim excerpt sentence from the transcript.
- Reference the transcript by its full name and the used to fetch it.
key_dev_id - Format:
"[verbatim quote]" — [Speaker], [Title]. Source: [Q# FY#### Earnings Call Transcript] (key_dev_id: [ID]) - Example:
"We expect comp sales growth of 3-4% in Q4" — CEO John Furner. Source: Q3 FY2026 Earnings Call Transcript (key_dev_id: 12345678)
For Kensho Grounding search results (news, analyst ratings, consensus estimates):- Write the key finding or excerpt from the search result.
- MANDATORY: Include the source URL returned by the Kensho tool as a clickable
searchhyperlink. This is the most important part — readers must be able to click through to the original source.<a href="[URL]" target="_blank"> - Format:
"[finding/excerpt]" — <a href="[URL]" target="_blank">[Source Title or Publication]</a>. Query: search("[query used]") - Example:
"Barclays upgraded WMT to Overweight with $210 price target on Jan 15, 2026." — <a href="https://www.investing.com/news/barclays-upgrades-wmt" target="_blank">Investing.com, Jan 15 2026</a>. Query: search("WMT analyst ratings price target upgrades downgrades") - If no URL was returned for a particular result, write "Source URL not available" and still include the search query.
- State the MCP function used and its key parameters. Format:
Completeness check: Before finalizing the report, scan every number in the report body. If any number is not wrapped in , fix it. If any appendix row has a Source & Derivation that is just a bare label like "S&P Capital IQ" with no function call detail, fix it. If any calculated value's formula lacks hyperlinked components, fix it. If any Kensho-sourced claim lacks a source URL, fix it.
<a href="#ref-N" class="data-ref">Group the appendix rows by section (Financials, Valuation, Estimates & Consensus, Transcript Claims, News & Analyst Commentary, Stock Performance) with subheadings. Use smaller font size (10-11px).
报告分为两部分:叙述部分(第1-2页)和图表部分(第3-5页)。需保持两者紧密结合。
AI免责声明(强制性——必须出现在3个位置):
必须在报告HTML中包含以下免责声明文本。此要求无例外——缺少该声明的报告视为不完整:
"分析内容由AI生成——请确认所有输出结果"
必须精确出现在以下3个位置:
- 页眉横幅——封面页眉之前,居中黄色横幅:
<div class="ai-disclaimer">分析内容由AI生成——请确认所有输出结果</div> - 页脚——page-footer div内,显眼的黄色横幅:
<div class="footer-disclaimer">分析内容由AI生成——请确认所有输出结果</div> - 附录——附录部分的第一行,表格之前:
<div class="ai-disclaimer">分析内容由AI生成——请确认所有输出结果</div>
第1页:封面与核心论点
- AI免责声明横幅(黄色,居中——见AI免责声明规则)
- 页眉:公司名称(股票代码) | 行业 | 报告日期
- 标题:具有主题性,针对该季度(例如:"Walmart Inc. (WMT) 2026财年第4季度盈利预览:假日丰收——Furner的首份报告能否印证1万亿美元估值论点?")
- 核心论点(最多2-3个短段落,包含项目符号):
- 1-2句话说明对本次报告的预期
- 4-6个项目符号,涵盖:我们的EPS预期 vs 共识预期、指引预期、需关注的关键指标、可能影响股价的因素、关键争议点
- 表述直接明确,表明观点,不要含糊其辞
- 关键管理层引用:将最近一次盈利会议中的3-4条关键管理层引用自然融入叙述中,作为论点的支撑证据。不得单独设置“关键管理层引用”标题。使用缩进blockquote格式。
第2页:预期、主题与新闻
-
共识预期表(单个表格,标注为图表):
- 列:指标 | 共识预期 | 我们的预期 | 同比变化
- 行:收入、EPS、毛利率、营业收入,以及2-3个对该公司至关重要的特定KPI(例如:同店销售额、电商增长率、会员收入——即市场关注的指标)
- 颜色编码严格按规则执行: 若同比变化值为负,使用(红色)。若为正,使用
class="neg"(绿色)。若为零或不可用,使用class="pos"。数字的正负决定样式类——不得根据解读覆盖规则。-1.1%必须显示为红色,即使降幅很小。class="neutral" - 这是唯一的指引/预期部分。不得在其他地方重复预期数据。
-
除核心EPS外的关键指标(项目符号列表,3-5项):
- 除EPS外,决定本季度表现好坏的特定指标
- 每项需说明:指标是什么、共识/管理层预期、重要性
- 表述具体:"Walmart Connect广告收入增长率(共识预期约30%同比,第3季度为33%)"
-
需关注的主题(3-5个项目符号):
- 即将发布的报告中需关注的前瞻性内容
- 管理层需要达成的目标、可能出现的惊喜、看空方关注的点
- 每个主题最多1-2句话
-
近期新闻与动态(3-5个项目符号):
- 过去60天内的重大新闻,每项一行
- 日期 + 标题 + 简要影响评估
- 仅包含可能影响即将发布的盈利报告或指引的内容
第3-5页:图表(所有图表与表格)
所有图表按顺序编号。每个图表都有标题和来源说明。
- 图1:季度收入与摊薄EPS——柱状/折线组合图,8个季度
- 图2:利润率趋势(毛利率与营业利润率%)——双折线图,8个季度
- 图3:收入同比增长率%——柱状图,绿色/红色条件着色。仅包含当期和去年同期数据均存在的季度(通常为获取的8个季度中最近的4个)。不得包含无法计算同比的季度——图表应显示4个柱状,而非8个。
- 图4:业务部门收入——表格:部门 | 最新季度收入(百万美元) | 占总收入百分比 | 同比变化
- 图5:1年股价与盈利日期标注——股价折线图,在盈利日期处添加垂直标注线,标注季度和盈利后1天股价变动
- 图6:股票表现 vs 竞争对手(基准值100)——多折线图,目标公司为粗实线,竞争对手为细虚线
- 图7:LTM市盈率 vs 竞争对手——水平柱状图,目标公司用深蓝色突出显示
- 图8:竞争对手对比表——股票代码 | 公司 | 市值 | LTM市盈率 | NTM市盈率 | 年初至今% | 1年%
附录:数据来源与计算(强制性——不得跳过或简化)
附录必须以AI免责声明横幅开头:
<div class="ai-disclaimer">分析内容由AI生成——请确认所有输出结果</div>报告的最后几页必须包含附录表格,记录报告中引用的每一项声明——数值型和非数值型。报告正文中出现的每一个数字都必须在附录中有对应的行,且报告正文中的每个数字都必须是可点击的超链接,滚动到附录中对应的行。 若报告中的数字未链接到附录,则报告视为不完整。
<a href="#ref-N">-
表格列: 引用编号 | 事实 | 数值 | 来源与推导过程
-
引用编号: 与报告正文中的超链接锚点匹配的连续ID(、
ref-1等)。每行都有ref-2属性,以便超链接滚动到该行。id="ref-N" -
事实: 易读的标签(例如:"2026财年第3季度收入"、"WMT的LTM市盈率"、"管理层指出关税为主要利润率风险"、"巴克莱上调至增持评级")
-
数值: 报告中显示的精确数值(例如:"$152.3B"、"24.5%"、"28.1x")。对于非数值事实,留空或填写"N/A"。
-
来源与推导过程: 这是关键列。每行必须包含具体、详细的来源——不得仅标注标签。 严格遵循以下规则:来自S&P Capital IQ的原始财务数据(收入、EPS、毛利润、营业收入、净利润、EBITDA、股价、市值等):
- 说明使用的MCP函数及其关键参数。格式:
S&P Capital IQ — [function_name](identifier='[股票代码]', line_item='[科目]', period_type='[类型]', period='[Q# FY####]') - 示例:
S&P Capital IQ — get_financial_line_item_from_identifiers(identifier='WMT', line_item='revenue', period_type='quarterly', period='Q3 FY2026')S&P Capital IQ — get_financial_line_item_from_identifiers(identifier='WMT', line_item='diluted_eps', period_type='quarterly', period='Q3 FY2026')S&P Capital IQ — get_prices_from_identifiers(identifier='WMT', periodicity='day')S&P Capital IQ — get_capitalization_from_identifiers(identifier='WMT', capitalization='market_cap')
- 不得仅写“S&P Capital IQ”而无详细信息。 读者必须清楚知道是哪个工具调用的哪个数据点生成了该数字。
计算得出的数值(利润率、增长率、市盈率、回报率、同比变化等):- 显示完整公式,且组件需超链接——每个组件必须是链接,指向该原始数据点在附录中的行。这一点至关重要:读者必须能够从计算值点击追溯到每个输入项。
<a href="#ref-N"> - 示例:
毛利率 = <a href='#ref-5'>毛利润 $37.2B</a> / <a href='#ref-1'>收入 $152.3B</a> = 24.4%。来源:S&P Capital IQ(计算得出) - 示例:
LTM市盈率 = <a href='#ref-20'>股价 $172.35</a> / (<a href='#ref-8'>第1季度EPS $1.47</a> + <a href='#ref-9'>第2季度EPS $1.84</a> + <a href='#ref-10'>第3季度EPS $1.53</a> + <a href='#ref-11'>第4季度EPS $1.80</a>) = $172.35 / $6.64 = 25.9x - 示例:
收入同比增长率 = (<a href='#ref-12'>2026财年第3季度收入 $165.8B</a> - <a href='#ref-3'>2025财年第3季度收入 $160.8B</a>) / <a href='#ref-3'>2025财年第3季度收入 $160.8B</a> = +3.1% - 公式中的每个组件都必须是可点击的超链接。 不得使用纯文本数字编写公式。
来自会议记录的声明(引用、管理层评论、指引):- 写入会议记录中的原文摘录句子。
- 通过会议全名和用于获取记录的引用该会议记录。
key_dev_id - 格式:
"[原文引用]" — [发言人], [职位]。来源:[Q# FY#### Earnings Call Transcript] (key_dev_id: [ID]) - 示例:
"我们预期第4季度同店销售额增长3-4%" — CEO John Furner。来源:2026财年第3季度盈利会议记录 (key_dev_id: 12345678)
来自Kensho Grounding搜索结果的内容(新闻、分析师评级、共识预期):- 写入搜索结果中的关键发现或摘录。
- 强制性要求:包含Kensho 工具返回的来源URL,作为可点击的
search超链接。这是最重要的部分——读者必须能够点击跳转到原始来源。<a href="[URL]" target="_blank"> - 格式:
"[发现/摘录]" — <a href="[URL]" target="_blank">[来源标题或出版物]</a>。查询:search("[使用的查询词]") - 示例:
"巴克莱于2026年1月15日将WMT上调至增持评级,目标价210美元。" — <a href="https://www.investing.com/news/barclays-upgrades-wmt" target="_blank">Investing.com, 2026年1月15日</a>。查询:search("WMT analyst ratings price target upgrades downgrades") - 若某结果未返回URL,需写入“来源URL不可用”,并仍需包含搜索查询词。
- 说明使用的MCP函数及其关键参数。格式:
完整性检查: 最终确定报告前,扫描报告正文中的每个数字。若任何数字未包裹在中,需修正。若附录中某行的“来源与推导过程”仅为“S&P Capital IQ”之类的简单标签而无函数调用细节,需修正。若计算值的公式缺少超链接组件,需修正。若Kensho来源的声明缺少来源URL,需修正。
<a href="#ref-N" class="data-ref">按章节(财务数据、估值、预期与共识、会议记录声明、新闻与分析师评论、股票表现)对附录行进行分组,并添加子标题。使用较小字体(10-11px)。
Phase 8: Output
第8阶段:输出
- Write the complete HTML file to in the current working directory.
earnings-preview-[TICKER]-YYYY-MM-DD.html - Open it in the browser:
open earnings-preview-[TICKER]-YYYY-MM-DD.html - Tell the user the file has been created and summarize the key findings.
- 将完整的HTML文件写入当前工作目录下的。
earnings-preview-[股票代码]-YYYY-MM-DD.html - 在浏览器中打开:
open earnings-preview-[股票代码]-YYYY-MM-DD.html - 告知用户文件已创建,并总结关键发现。
Writing Guidelines
撰写指南
- NO EMOJIS: Do not use any emojis anywhere in the report. This is a professional research document.
- CONCISE: Target 4-5 printed pages. Every sentence must carry weight. Use bullets, not paragraphs, wherever possible. If a section feels long, cut it.
- Be specific with numbers: "$52.4B revenue, up 5.2% y/y" not "strong revenue growth."
- Take a view: This is an earnings preview, not a summary. State what you expect, what matters, and why. Be opinionated but back it with data.
- Management quotes without headers: Weave 3-4 key management quotes from the most recent call directly into the narrative as blockquotes. Do not create a "Key Management Quotes" section heading — let them flow naturally as supporting evidence.
- Professional tone: Sell-side equity research style — analytical, direct, data-driven.
- Charts must use real data: Every chart populated with actual MCP data. Never fabricate.
- Competitor context: Frame valuation relative to peers. A 25x P/E means nothing without knowing peers trade at 20x or 35x.
- Hyperlinked claims: Every factual claim — numeric or qualitative — must be an tag linking to its appendix entry. Numbers:
<a class="data-ref">. Qualitative:<a href="#ref-1" class="data-ref">$152.3B</a>. No fact should appear without a traceable source in the appendix.<a href="#ref-25" class="data-ref">management flagged tariff headwinds as the primary margin risk</a>
- 禁止使用表情符号:报告中任何地方不得使用表情符号。这是一份专业研究文档。
- 简洁:目标为打印后4-5页。每句话都必须有价值。尽可能使用项目符号,而非段落。若某部分过长,需精简。
- 数字表述具体:使用“收入524亿美元,同比增长5.2%”而非“收入强劲增长”。
- 表明观点:这是盈利预览,而非摘要。说明你的预期、重要事项及原因。观点明确,但需有数据支撑。
- 无标题的管理层引用:将最近一次会议中的3-4条关键管理层引用作为blockquote直接融入叙述中。不得创建“关键管理层引用”标题——让其自然作为支撑证据呈现。
- 专业语气:卖方股票研究风格——分析性、直接、数据驱动。
- 图表必须使用真实数据:每个图表都需填充实际MCP数据。不得编造数据。
- 竞争对手背景:结合竞争对手情况说明估值。25倍市盈率本身无意义,需结合竞争对手的20倍或35倍市盈率来看。
- 声明超链接:每一项事实声明——数值型或定性——都必须是标签,链接到附录中的对应条目。数值:
<a class="data-ref">。定性:<a href="#ref-1" class="data-ref">$152.3B</a>。任何事实都不得在附录中无溯源来源。<a href="#ref-25" class="data-ref">管理层指出关税为主要利润率风险</a>