markform 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -70
- package/dist/ai-sdk.d.mts +2 -2
- package/dist/ai-sdk.mjs +5 -5
- package/dist/{apply-00UmzDKL.mjs → apply-BCCiJzQr.mjs} +371 -26
- package/dist/bin.mjs +6 -6
- package/dist/{cli-D--Lel-e.mjs → cli-D469amuk.mjs} +386 -96
- package/dist/cli.mjs +6 -6
- package/dist/{coreTypes-BXhhz9Iq.d.mts → coreTypes-9XZSNOv6.d.mts} +1878 -325
- package/dist/{coreTypes-Dful87E0.mjs → coreTypes-pyctKRgc.mjs} +79 -5
- package/dist/index.d.mts +142 -5
- package/dist/index.mjs +5 -5
- package/dist/session-B_stoXQn.mjs +4 -0
- package/dist/{session-Bqnwi9wp.mjs → session-uF0e6m6k.mjs} +9 -5
- package/dist/{shared-N_s1M-_K.mjs → shared-BqPnYXrn.mjs} +82 -1
- package/dist/shared-CZsyShck.mjs +3 -0
- package/dist/{src-Dm8jZ5dl.mjs → src-Df0XX7UB.mjs} +818 -125
- package/docs/markform-apis.md +194 -0
- package/{DOCS.md → docs/markform-reference.md} +130 -69
- package/{SPEC.md → docs/markform-spec.md} +359 -108
- package/examples/earnings-analysis/earnings-analysis.form.md +88 -800
- package/examples/earnings-analysis/earnings-analysis.valid.ts +16 -148
- package/examples/movie-research/movie-research-basic.form.md +41 -37
- package/examples/movie-research/movie-research-deep.form.md +110 -98
- package/examples/movie-research/movie-research-minimal.form.md +29 -15
- package/examples/simple/simple-mock-filled.form.md +105 -41
- package/examples/simple/simple-skipped-filled.form.md +103 -41
- package/examples/simple/simple-with-skips.session.yaml +93 -25
- package/examples/simple/simple.form.md +86 -32
- package/examples/simple/simple.session.yaml +98 -25
- package/examples/startup-deep-research/startup-deep-research.form.md +130 -103
- package/examples/startup-research/startup-research-mock-filled.form.md +55 -55
- package/examples/startup-research/startup-research.form.md +36 -36
- package/package.json +18 -19
- package/dist/session-DdAtY2Ni.mjs +0 -4
- package/dist/shared-D7gf27Tr.mjs +0 -3
- package/examples/celebrity-deep-research/celebrity-deep-research.form.md +0 -912
|
@@ -1,870 +1,158 @@
|
|
|
1
1
|
---
|
|
2
2
|
markform:
|
|
3
3
|
spec: MF/0.1
|
|
4
|
-
title:
|
|
5
|
-
description:
|
|
4
|
+
title: Earnings Analysis
|
|
5
|
+
description: Company earnings analysis with key metrics, outlook, and custom validators.
|
|
6
6
|
roles:
|
|
7
7
|
- user
|
|
8
8
|
- agent
|
|
9
9
|
role_instructions:
|
|
10
|
-
user: "Enter company
|
|
11
|
-
agent:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
max_patches_per_turn: 10
|
|
10
|
+
user: "Enter the company name and ticker symbol."
|
|
11
|
+
agent: |
|
|
12
|
+
Research the company and fill in the key financial metrics and analysis.
|
|
13
|
+
Focus on the most recent quarterly results and forward outlook.
|
|
15
14
|
---
|
|
15
|
+
{% form id="earnings_analysis" title="Earnings Analysis" %}
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
## Company Earnings Analysis
|
|
18
18
|
|
|
19
|
-
{%
|
|
20
|
-
This worksheet supports systematic research on a company for a given quarter.
|
|
21
|
-
It has two parts: a relatively static company profile, and a period-specific analysis section.
|
|
22
|
-
{% /description %}
|
|
19
|
+
{% group id="company_input" title="Company Identification" %}
|
|
23
20
|
|
|
24
|
-
|
|
25
|
-
**Part 1: Company Profile** — Foundational information that changes slowly.
|
|
26
|
-
Update as needed but expect most content to persist quarter-to-quarter.
|
|
21
|
+
Which company do you want to analyze? \[*This field is filled in by the user (`role="user"`).*\]
|
|
27
22
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
{% /documentation %}
|
|
23
|
+
{% field kind="string" id="company" label="Company" role="user" required=true minLength=1 maxLength=300 %}{% /field %}
|
|
24
|
+
{% instructions ref="company" %}Enter the company name and ticker symbol (e.g., "Apple (AAPL)" or "Microsoft MSFT").{% /instructions %}
|
|
31
25
|
|
|
32
|
-
|
|
26
|
+
{% /group %}
|
|
33
27
|
|
|
34
|
-
|
|
28
|
+
## Company Overview
|
|
35
29
|
|
|
36
|
-
{%
|
|
30
|
+
{% group id="company_overview" title="Company Overview" %}
|
|
37
31
|
|
|
38
|
-
|
|
32
|
+
**Company name:**
|
|
39
33
|
|
|
40
|
-
{%
|
|
41
|
-
|
|
42
|
-
{% /instructions %}
|
|
34
|
+
{% field kind="string" id="company_name" label="Company Name" role="agent" required=true %}{% /field %}
|
|
35
|
+
{% instructions ref="company_name" %}Official company name.{% /instructions %}
|
|
43
36
|
|
|
44
|
-
|
|
37
|
+
**Ticker symbol:**
|
|
45
38
|
|
|
46
|
-
{%
|
|
39
|
+
{% field kind="string" id="ticker" label="Ticker Symbol" role="agent" required=true %}{% /field %}
|
|
47
40
|
|
|
48
|
-
|
|
49
|
-
Enter month name (e.g., December) or MM-DD format (e.g., 12-31).
|
|
50
|
-
{% /instructions %}
|
|
41
|
+
**Exchange:**
|
|
51
42
|
|
|
52
|
-
{%
|
|
53
|
-
|
|
54
|
-
- [ ] Quarterly {% #quarterly %}
|
|
55
|
-
- [ ] Monthly {% #monthly %}
|
|
56
|
-
{% /single-select %}
|
|
43
|
+
{% field kind="string" id="exchange" label="Exchange" role="agent" %}{% /field %}
|
|
44
|
+
{% instructions ref="exchange" %}Primary stock exchange (e.g., NYSE, NASDAQ).{% /instructions %}
|
|
57
45
|
|
|
58
|
-
|
|
59
|
-
- [ ] One-time hardware {% #one_time_hardware %}
|
|
60
|
-
- [ ] Recurring subscription {% #recurring_subscription %}
|
|
61
|
-
- [ ] Usage-based {% #usage_based %}
|
|
62
|
-
- [ ] Advertising {% #advertising %}
|
|
63
|
-
- [ ] Marketplace / take rate {% #marketplace %}
|
|
64
|
-
- [ ] Licensing {% #licensing %}
|
|
65
|
-
- [ ] Services / consulting {% #services %}
|
|
66
|
-
- [ ] Financial / credit {% #financial %}
|
|
67
|
-
{% /multi-select %}
|
|
46
|
+
**Sector:**
|
|
68
47
|
|
|
69
|
-
{%
|
|
70
|
-
Check all that apply. At least one is required.
|
|
71
|
-
{% /instructions %}
|
|
48
|
+
{% field kind="string" id="sector" label="Sector" role="agent" %}{% /field %}
|
|
72
49
|
|
|
73
|
-
|
|
50
|
+
**Business summary:**
|
|
74
51
|
|
|
75
|
-
{%
|
|
76
|
-
|
|
77
|
-
{% /instructions %}
|
|
52
|
+
{% field kind="string" id="business_summary" label="Business Summary" role="agent" maxLength=500 validate=[{id: "min_words", min: 20}] %}{% /field %}
|
|
53
|
+
{% instructions ref="business_summary" %}Brief description of what the company does. Minimum 20 words.{% /instructions %}
|
|
78
54
|
|
|
79
|
-
|
|
55
|
+
**Revenue segments:**
|
|
80
56
|
|
|
81
|
-
{%
|
|
57
|
+
{% field kind="string_list" id="revenue_segments" label="Revenue Segments" role="agent" minItems=1 validate=[{id: "sum_to_percent_list", target: 100}] %}{% /field %}
|
|
58
|
+
{% instructions ref="revenue_segments" %}List each segment with percentage of revenue. Format: "Segment Name: XX%". Should sum to 100%.{% /instructions %}
|
|
82
59
|
|
|
83
|
-
{%
|
|
84
|
-
Provide a plain-English summary of what the company does. Minimum 100 words (approximately 400 characters).
|
|
85
|
-
{% /instructions %}
|
|
60
|
+
{% /group %}
|
|
86
61
|
|
|
87
|
-
|
|
62
|
+
## Recent Earnings
|
|
88
63
|
|
|
89
|
-
{%
|
|
64
|
+
{% group id="recent_earnings" title="Recent Earnings" %}
|
|
90
65
|
|
|
91
|
-
|
|
66
|
+
**Fiscal quarter:**
|
|
92
67
|
|
|
93
|
-
{%
|
|
94
|
-
|
|
95
|
-
{% /instructions %}
|
|
68
|
+
{% field kind="string" id="fiscal_quarter" label="Fiscal Quarter" role="agent" required=true %}{% /field %}
|
|
69
|
+
{% instructions ref="fiscal_quarter" %}Most recent reported quarter (e.g., "Q3 FY2024" or "Q4 2024").{% /instructions %}
|
|
96
70
|
|
|
97
|
-
|
|
71
|
+
**Revenue:**
|
|
98
72
|
|
|
99
|
-
{%
|
|
73
|
+
{% field kind="number" id="revenue" label="Revenue (millions)" role="agent" %}{% /field %}
|
|
74
|
+
{% instructions ref="revenue" %}Total revenue in millions USD.{% /instructions %}
|
|
100
75
|
|
|
101
|
-
|
|
76
|
+
**Revenue growth YoY:**
|
|
102
77
|
|
|
103
|
-
{%
|
|
78
|
+
{% field kind="number" id="revenue_growth" label="Revenue Growth YoY (%)" role="agent" min=-100 max=1000 %}{% /field %}
|
|
104
79
|
|
|
105
|
-
|
|
106
|
-
Analyst prompt: Explain the strategic move that best explains the current business model. Minimum 50 words.
|
|
107
|
-
{% /instructions %}
|
|
80
|
+
**EPS:**
|
|
108
81
|
|
|
109
|
-
{% /field
|
|
82
|
+
{% field kind="number" id="eps" label="Earnings Per Share" role="agent" %}{% /field %}
|
|
83
|
+
{% instructions ref="eps" %}Diluted EPS for the quarter.{% /instructions %}
|
|
110
84
|
|
|
111
|
-
|
|
85
|
+
**Beat/miss consensus:**
|
|
112
86
|
|
|
113
|
-
{%
|
|
87
|
+
{% field kind="single_select" id="beat_miss" label="Beat/Miss Consensus" role="agent" %}
|
|
88
|
+
- [ ] Beat {% #beat %}
|
|
89
|
+
- [ ] Met {% #met %}
|
|
90
|
+
- [ ] Missed {% #missed %}
|
|
91
|
+
{% /field %}
|
|
114
92
|
|
|
115
|
-
|
|
93
|
+
**Beat/miss details:**
|
|
116
94
|
|
|
117
|
-
{%
|
|
118
|
-
|
|
119
|
-
- [ ] Channel / resellers {% #channel %}
|
|
120
|
-
- [ ] Carrier / VARs {% #carrier_vars %}
|
|
121
|
-
- [ ] Marketplace / app store {% #marketplace_appstore %}
|
|
122
|
-
- [ ] OEM / embedded {% #oem_embedded %}
|
|
123
|
-
{% /multi-select %}
|
|
95
|
+
{% field kind="string" id="beat_miss_details" label="Beat/Miss Details" role="agent" validate=[{id: "required_if_set", when: "beat_miss"}] %}{% /field %}
|
|
96
|
+
{% instructions ref="beat_miss_details" %}Required if beat/miss is selected. Explain the variance from consensus.{% /instructions %}
|
|
124
97
|
|
|
125
|
-
{%
|
|
98
|
+
{% /group %}
|
|
126
99
|
|
|
127
|
-
|
|
100
|
+
## Key Metrics
|
|
128
101
|
|
|
129
|
-
{%
|
|
130
|
-
Enter percentages that should sum to 100% (e.g., "Direct: 60%, Indirect: 40%").
|
|
131
|
-
{% /instructions %}
|
|
102
|
+
{% group id="key_metrics" title="Key Metrics" %}
|
|
132
103
|
|
|
133
|
-
|
|
104
|
+
**Gross margin:**
|
|
134
105
|
|
|
135
|
-
{%
|
|
106
|
+
{% field kind="number" id="gross_margin" label="Gross Margin (%)" role="agent" min=0 max=100 %}{% /field %}
|
|
136
107
|
|
|
137
|
-
|
|
108
|
+
**Operating margin:**
|
|
138
109
|
|
|
139
|
-
{% field
|
|
110
|
+
{% field kind="number" id="operating_margin" label="Operating Margin (%)" role="agent" min=-100 max=100 %}{% /field %}
|
|
140
111
|
|
|
141
|
-
|
|
142
|
-
Tie every revenue line to something someone buys. Use "families," not SKUs.
|
|
143
|
-
This section ideally uses repeating groups (future feature). For now, model one offering family.
|
|
144
|
-
{% /description %}
|
|
112
|
+
**Market cap:**
|
|
145
113
|
|
|
146
|
-
{%
|
|
114
|
+
{% field kind="number" id="market_cap" label="Market Cap (billions)" role="agent" %}{% /field %}
|
|
115
|
+
{% instructions ref="market_cap" %}Current market capitalization in billions USD.{% /instructions %}
|
|
147
116
|
|
|
148
|
-
|
|
117
|
+
**P/E ratio:**
|
|
149
118
|
|
|
150
|
-
{%
|
|
151
|
-
|
|
152
|
-
{% /instructions %}
|
|
119
|
+
{% field kind="number" id="pe_ratio" label="P/E Ratio" role="agent" %}{% /field %}
|
|
120
|
+
{% instructions ref="pe_ratio" %}Trailing twelve month P/E ratio.{% /instructions %}
|
|
153
121
|
|
|
154
|
-
{%
|
|
155
|
-
- [ ] Physical {% #physical %}
|
|
156
|
-
- [ ] Digital {% #digital %}
|
|
157
|
-
- [ ] Hybrid {% #hybrid %}
|
|
158
|
-
{% /single-select %}
|
|
122
|
+
{% /group %}
|
|
159
123
|
|
|
160
|
-
|
|
161
|
-
- [ ] One-time {% #one_time %}
|
|
162
|
-
- [ ] Subscription {% #subscription %}
|
|
163
|
-
- [ ] Usage-based {% #usage %}
|
|
164
|
-
- [ ] Take-rate {% #take_rate %}
|
|
165
|
-
- [ ] Advertising {% #ads %}
|
|
166
|
-
{% /single-select %}
|
|
124
|
+
## Outlook
|
|
167
125
|
|
|
168
|
-
{%
|
|
126
|
+
{% group id="outlook" title="Outlook" %}
|
|
169
127
|
|
|
170
|
-
|
|
128
|
+
**Guidance:**
|
|
171
129
|
|
|
172
|
-
{% field
|
|
130
|
+
{% field kind="string" id="guidance" label="Forward Guidance" role="agent" maxLength=500 %}{% /field %}
|
|
131
|
+
{% instructions ref="guidance" %}Summary of company's forward guidance for next quarter/year.{% /instructions %}
|
|
173
132
|
|
|
174
|
-
|
|
133
|
+
**Key risks:**
|
|
175
134
|
|
|
176
|
-
{%
|
|
135
|
+
{% field kind="string_list" id="key_risks" label="Key Risks" role="agent" minItems=0 maxItems=5 %}{% /field %}
|
|
136
|
+
{% instructions ref="key_risks" %}Primary risks or concerns (up to 5).{% /instructions %}
|
|
177
137
|
|
|
178
|
-
|
|
138
|
+
**Analyst sentiment:**
|
|
179
139
|
|
|
180
|
-
{%
|
|
181
|
-
|
|
182
|
-
{% field-group id="pricing_structure" title="5.1 Pricing Structure" %}
|
|
183
|
-
|
|
184
|
-
{% description ref="pricing_structure" %}
|
|
185
|
-
Make "pricing power" concrete.
|
|
186
|
-
{% /description %}
|
|
187
|
-
|
|
188
|
-
{% string-field id="pricing_offering_name" label="Offering family" required=true %}{% /string-field %}
|
|
189
|
-
|
|
190
|
-
{% string-field id="list_price_range" label="List price / typical range" required=true %}{% /string-field %}
|
|
191
|
-
|
|
192
|
-
{% instructions ref="list_price_range" %}
|
|
193
|
-
Include currency and range (e.g., "$99-$499 USD" or "€50/month").
|
|
194
|
-
{% /instructions %}
|
|
195
|
-
|
|
196
|
-
{% multi-select id="discounting_norms" label="Discounting norms" %}
|
|
197
|
-
- [ ] None {% #none %}
|
|
198
|
-
- [ ] Seasonal {% #seasonal %}
|
|
199
|
-
- [ ] Channel promos {% #channel_promos %}
|
|
200
|
-
- [ ] Enterprise {% #enterprise %}
|
|
201
|
-
- [ ] Bundles {% #bundles %}
|
|
202
|
-
{% /multi-select %}
|
|
203
|
-
|
|
204
|
-
{% string-field id="contract_length" label="Contract length (B2B)" %}{% /string-field %}
|
|
205
|
-
|
|
206
|
-
{% string-field id="contract_renewal" label="Renewal terms" %}{% /string-field %}
|
|
207
|
-
|
|
208
|
-
{% string-field id="contract_escalators" label="Price escalators" %}{% /string-field %}
|
|
209
|
-
|
|
210
|
-
{% string-field id="payer_vs_user" label="Who pays vs who uses" %}{% /string-field %}
|
|
211
|
-
|
|
212
|
-
{% string-field id="arpu_asp_drivers" label="ARPU/ASP drivers" %}{% /string-field %}
|
|
213
|
-
|
|
214
|
-
{% string-field id="pricing_changes_recent" label="Pricing changes last 12-18 months" %}{% /string-field %}
|
|
215
|
-
|
|
216
|
-
{% /field-group %}
|
|
217
|
-
|
|
218
|
-
{% field-group id="pricing_margins" title="5.2 Margin and Cost Structure" %}
|
|
219
|
-
|
|
220
|
-
{% string-field id="primary_cost_drivers" label="Primary cost drivers (COGS, hosting, labor, content, etc.)" required=true %}{% /string-field %}
|
|
221
|
-
|
|
222
|
-
{% string-field id="gross_margin_drivers" label="Gross margin drivers (pricing, mix, utilization, scale, FX)" %}{% /string-field %}
|
|
223
|
-
|
|
224
|
-
{% string-field id="contribution_margin_framework" label="Contribution margin framework (if applicable)" %}{% /string-field %}
|
|
225
|
-
|
|
226
|
-
{% number-field id="cac" label="Customer Acquisition Cost (CAC)" %}{% /number-field %}
|
|
227
|
-
|
|
228
|
-
{% string-field id="payback_period" label="Payback period" %}{% /string-field %}
|
|
229
|
-
|
|
230
|
-
{% number-field id="ltv" label="Lifetime Value (LTV)" %}{% /number-field %}
|
|
231
|
-
|
|
232
|
-
{% number-field id="churn_rate" label="Churn rate (%)" min=0 max=100 %}{% /number-field %}
|
|
233
|
-
|
|
234
|
-
{% string-field id="operating_leverage" label="Operating leverage (fixed vs variable costs)" %}{% /string-field %}
|
|
235
|
-
|
|
236
|
-
{% string-field id="margin_risks" label="Biggest margin risks" %}{% /string-field %}
|
|
237
|
-
|
|
238
|
-
{% /field-group %}
|
|
239
|
-
|
|
240
|
-
{% field-group id="customers_segmentation" title="6.1 Customer Segmentation" %}
|
|
241
|
-
|
|
242
|
-
{% string-field id="segment_1" label="Segment 1 (size, needs, willingness to pay)" required=true %}{% /string-field %}
|
|
243
|
-
|
|
244
|
-
{% string-field id="segment_2" label="Segment 2" required=true %}{% /string-field %}
|
|
245
|
-
|
|
246
|
-
{% string-field id="segment_3" label="Segment 3" %}{% /string-field %}
|
|
247
|
-
|
|
248
|
-
{% string-field id="geography_mix" label="Geography mix" required=true %}{% /string-field %}
|
|
249
|
-
|
|
250
|
-
{% instructions ref="geography_mix" %}
|
|
251
|
-
Enter percentages that should sum to 100% (e.g., "Americas: 55%, EMEA: 30%, APAC: 15%").
|
|
252
|
-
{% /instructions %}
|
|
253
|
-
|
|
254
|
-
{% string-field id="buyer_user_influencer" label="Buyer vs user vs influencer" %}{% /string-field %}
|
|
255
|
-
|
|
256
|
-
{% /field-group %}
|
|
257
|
-
|
|
258
|
-
{% field-group id="customers_buying" title="6.2 Buying Motion" %}
|
|
259
|
-
|
|
260
|
-
{% string-field id="purchase_trigger" label="What triggers purchase?" required=true %}{% /string-field %}
|
|
261
|
-
|
|
262
|
-
{% string-field id="decision_cycle_length" label="Decision cycle length" %}{% /string-field %}
|
|
263
|
-
|
|
264
|
-
{% string-field id="replacement_upgrade_cycle" label="Replacement/upgrade cycle (if relevant)" %}{% /string-field %}
|
|
265
|
-
|
|
266
|
-
{% string-field id="retention_churn_drivers" label="Retention/churn drivers (if recurring)" %}{% /string-field %}
|
|
267
|
-
|
|
268
|
-
{% /field-group %}
|
|
269
|
-
|
|
270
|
-
{% field-group id="customers_concentration" title="6.3 Concentration and Notable Customers" %}
|
|
271
|
-
|
|
272
|
-
{% number-field id="top_customer_concentration" label="Customer concentration risk (top customer %)" min=0 max=100 %}{% /number-field %}
|
|
273
|
-
|
|
274
|
-
{% string-field id="notable_customers" label="Notable customers / logos (B2B)" %}{% /string-field %}
|
|
275
|
-
|
|
276
|
-
{% string-field id="channel_dependencies" label="Channel partner dependencies" %}{% /string-field %}
|
|
277
|
-
|
|
278
|
-
{% /field-group %}
|
|
279
|
-
|
|
280
|
-
{% field-group id="market_competition" title="7. Market and Competition" %}
|
|
281
|
-
|
|
282
|
-
{% string-field id="primary_markets" label="Primary markets competed in" required=true %}{% /string-field %}
|
|
283
|
-
|
|
284
|
-
{% string-field id="tam_sam_som" label="TAM/SAM/SOM (and confidence)" %}{% /string-field %}
|
|
285
|
-
|
|
286
|
-
{% instructions ref="tam_sam_som" %}
|
|
287
|
-
Include currency values with confidence level (e.g., "TAM: $50B (high), SAM: $10B (medium), SOM: $500M (low)").
|
|
288
|
-
{% /instructions %}
|
|
289
|
-
|
|
290
|
-
{% string-field id="market_growth_cyclicality" label="Market growth rate and cyclicality" %}{% /string-field %}
|
|
291
|
-
|
|
292
|
-
{% string-field id="competitors" label="Competitors by category (direct + substitutes)" required=true %}{% /string-field %}
|
|
293
|
-
|
|
294
|
-
{% string-list id="basis_of_competition" label="Basis of competition (ranked top 5)" required=true minItems=5 maxItems=5 %}{% /string-list %}
|
|
295
|
-
|
|
296
|
-
{% instructions ref="basis_of_competition" %}
|
|
297
|
-
List exactly 5 competitive factors, ranked by importance. First item is most important.
|
|
298
|
-
{% /instructions %}
|
|
299
|
-
|
|
300
|
-
{% multi-select id="moat_diagnosis" label="Moat diagnosis" %}
|
|
301
|
-
- [ ] Switching costs {% #switching_costs %}
|
|
302
|
-
- [ ] Network effects {% #network_effects %}
|
|
303
|
-
- [ ] Brand {% #brand %}
|
|
304
|
-
- [ ] Scale / cost advantage {% #scale %}
|
|
305
|
-
- [ ] IP {% #ip %}
|
|
306
|
-
- [ ] Regulatory barriers {% #regulatory %}
|
|
307
|
-
- [ ] Distribution advantage {% #distribution %}
|
|
308
|
-
- [ ] Ecosystem {% #ecosystem %}
|
|
309
|
-
- [ ] Data advantage {% #data %}
|
|
310
|
-
{% /multi-select %}
|
|
311
|
-
|
|
312
|
-
{% string-field id="moat_explanation" label="Moat explanation" validate=[{id: "required_if", when: "moat_diagnosis"}] %}{% /string-field %}
|
|
313
|
-
|
|
314
|
-
{% instructions ref="moat_explanation" %}
|
|
315
|
-
Required if any moat is checked above. Explain why these moats apply. Minimum 25 words.
|
|
316
|
-
{% /instructions %}
|
|
317
|
-
|
|
318
|
-
{% string-field id="competitive_risks" label="Competitive risks (price wars, bundling, platform shifts)" %}{% /string-field %}
|
|
319
|
-
|
|
320
|
-
{% /field-group %}
|
|
321
|
-
|
|
322
|
-
{% field-group id="supply_constraints" title="8.1 Supply Constraints" %}
|
|
323
|
-
|
|
324
|
-
{% string-field id="key_inputs_suppliers" label="Key inputs / suppliers / single-source dependencies" required=true %}{% /string-field %}
|
|
325
|
-
|
|
326
|
-
{% string-field id="manufacturing_model" label="Manufacturing/fulfillment model" %}{% /string-field %}
|
|
327
|
-
|
|
328
|
-
{% string-field id="critical_commodities" label="Critical commodities / bottlenecks" %}{% /string-field %}
|
|
329
|
-
|
|
330
|
-
{% string-field id="logistics_inventory_risks" label="Logistics and inventory risks" %}{% /string-field %}
|
|
331
|
-
|
|
332
|
-
{% string-field id="geopolitical_choke_points" label="Geopolitical choke points" %}{% /string-field %}
|
|
333
|
-
|
|
334
|
-
{% /field-group %}
|
|
335
|
-
|
|
336
|
-
{% field-group id="macro_sensitivity" title="8.2 Macro Sensitivity" %}
|
|
337
|
-
|
|
338
|
-
{% string-list id="macro_variables" label="Top 5 macro variables that historically mattered" required=true minItems=5 maxItems=5 %}{% /string-list %}
|
|
339
|
-
|
|
340
|
-
{% instructions ref="macro_variables" %}
|
|
341
|
-
List exactly 5 macro variables, ranked by importance.
|
|
342
|
-
{% /instructions %}
|
|
343
|
-
|
|
344
|
-
{% string-field id="transmission_mechanism" label="Transmission mechanism (how each impacts revenue/margin/cash)" required=true validate=[{id: "min_words", min: 50}] %}{% /string-field %}
|
|
345
|
-
|
|
346
|
-
{% instructions ref="transmission_mechanism" %}
|
|
347
|
-
Minimum 50 words. Explain how each macro variable impacts the business.
|
|
348
|
-
{% /instructions %}
|
|
349
|
-
|
|
350
|
-
{% string-field id="historical_episodes" label="Historical episodes (recession/inflation/FX/supply shock)" %}{% /string-field %}
|
|
351
|
-
|
|
352
|
-
{% string-field id="leading_indicators" label="Leading indicators to monitor pre-earnings" %}{% /string-field %}
|
|
353
|
-
|
|
354
|
-
{% /field-group %}
|
|
355
|
-
|
|
356
|
-
{% field-group id="financial_history" title="9. Financial History" %}
|
|
357
|
-
|
|
358
|
-
{% string-field id="trend_summary" label="3-5 year trend summary (revenue, margin, EPS, FCF)" required=true validate=[{id: "min_words", min: 75}] %}{% /string-field %}
|
|
359
|
-
|
|
360
|
-
{% instructions ref="trend_summary" %}
|
|
361
|
-
Minimum 75 words. Cover revenue, margin, EPS, and free cash flow trends.
|
|
362
|
-
{% /instructions %}
|
|
363
|
-
|
|
364
|
-
{% string-field id="capital_return_policy" label="Capital return policy (buybacks/dividends)" %}{% /string-field %}
|
|
365
|
-
|
|
366
|
-
{% string-field id="major_inflection_points" label="Major inflection points (product cycles, pricing shifts, regulation)" %}{% /string-field %}
|
|
367
|
-
|
|
368
|
-
{% string-field id="stock_performance_context" label="Stock performance context (vs index/peers)" %}{% /string-field %}
|
|
369
|
-
|
|
370
|
-
{% string-field id="multiples_vs_history" label="Multiples context vs history" %}{% /string-field %}
|
|
371
|
-
|
|
372
|
-
{% /field-group %}
|
|
373
|
-
|
|
374
|
-
{% field-group id="open_questions_profile" title="10. Open Questions" %}
|
|
375
|
-
|
|
376
|
-
{% string-list id="unanswered_questions" label="Top unanswered questions (ranked by impact)" minItems=0 maxItems=10 %}{% /string-list %}
|
|
377
|
-
|
|
378
|
-
{% string-field id="how_to_answer" label="How to answer (data / calls / sources)" %}{% /string-field %}
|
|
379
|
-
|
|
380
|
-
{% string-field id="deadline" label="Deadline (before earnings, next quarter, etc.)" pattern="^\\d{4}-\\d{2}-\\d{2}$|^[A-Za-z].*$" %}{% /string-field %}
|
|
381
|
-
|
|
382
|
-
{% instructions ref="deadline" %}
|
|
383
|
-
Enter a date (YYYY-MM-DD format) or descriptive text (e.g., "Before Q2 earnings").
|
|
384
|
-
{% /instructions %}
|
|
385
|
-
|
|
386
|
-
{% /field-group %}
|
|
387
|
-
|
|
388
|
-
<!-- PART 2: QUARTERLY ANALYSIS -->
|
|
389
|
-
|
|
390
|
-
{% field-group id="quarterly_cover" title="Q1. Cover Sheet" %}
|
|
391
|
-
|
|
392
|
-
{% description ref="quarterly_cover" %}
|
|
393
|
-
This section is period-specific. Complete fresh each quarter.
|
|
394
|
-
{% /description %}
|
|
395
|
-
|
|
396
|
-
{% instructions ref="quarterly_cover" %}
|
|
397
|
-
**Recommended Operating Cadence:**
|
|
398
|
-
- **T-21 to T-14:** Refresh model + read filings; pick "what matters this quarter"
|
|
399
|
-
- **T-14 to T-7:** Build expectations stack; peer read-across; gather alt data / checks
|
|
400
|
-
- **T-7 to T-2:** Base/Bull/Bear scenarios + probabilities; pre-mortem; draft trade structure
|
|
401
|
-
- **T-1:** Confirm options pricing + positioning; finalize risks and stops
|
|
402
|
-
- **Earnings day:** Watchlist + rapid interpretation plan
|
|
403
|
-
- **T+1 to T+2:** Post-mortem; update model; document learnings
|
|
404
|
-
{% /instructions %}
|
|
405
|
-
|
|
406
|
-
{% string-field id="pre_earnings_thesis" label="One-sentence thesis (pre-earnings)" required=true maxLength=250 %}{% /string-field %}
|
|
407
|
-
|
|
408
|
-
{% instructions ref="pre_earnings_thesis" %}
|
|
409
|
-
Maximum 50 words. State your core thesis before the earnings release.
|
|
410
|
-
{% /instructions %}
|
|
411
|
-
|
|
412
|
-
{% string-list id="what_matters_top_3" label="What matters this quarter (top 3 drivers)" required=true minItems=3 maxItems=3 %}{% /string-list %}
|
|
413
|
-
|
|
414
|
-
{% /field-group %}
|
|
415
|
-
|
|
416
|
-
{% field-group id="sources_log" title="Q2.1 Sourcing Log" %}
|
|
417
|
-
|
|
418
|
-
{% description ref="sources_log" %}
|
|
419
|
-
Check what you actually used. Fill the log as you go.
|
|
420
|
-
{% /description %}
|
|
421
|
-
|
|
422
|
-
{% instructions ref="sources_log" %}
|
|
423
|
-
Maintain a log of sources accessed. Record: Date accessed, Source name, Type/tier, Link or file path, Key takeaways. At least 3 sources required.
|
|
424
|
-
{% /instructions %}
|
|
425
|
-
|
|
426
|
-
{% string-list id="sources_accessed" label="Sources accessed (Date | Source | Type | Link | Takeaways)" required=true minItems=3 validate=[{id: "item_format", pattern: "^.+\\|.+\\|.+\\|.+\\|.+", example: "2024-01-15 | SEC Filing | 10-K | https://... | Key takeaway"}] %}{% /string-list %}
|
|
427
|
-
|
|
428
|
-
{% /field-group %}
|
|
429
|
-
|
|
430
|
-
{% field-group id="sources_sec" title="Q2.2 SEC / Regulatory Documents" %}
|
|
431
|
-
|
|
432
|
-
{% checkboxes id="sec_docs_reviewed" label="SEC documents reviewed" checkboxMode="simple" %}
|
|
433
|
-
- [ ] 10-K (latest) {% #ten_k %}
|
|
434
|
-
- [ ] 10-Q (latest) {% #ten_q %}
|
|
435
|
-
- [ ] 8-K earnings release (current quarter) {% #eight_k_current %}
|
|
436
|
-
- [ ] Prior quarter 8-K earnings release {% #eight_k_prior %}
|
|
437
|
-
- [ ] Proxy (DEF 14A) {% #proxy %}
|
|
438
|
-
- [ ] S-1 / 20-F / 6-K (if applicable) {% #s1_20f_6k %}
|
|
439
|
-
- [ ] Insider trading filings (Forms 3/4/5) {% #insider_filings %}
|
|
440
|
-
- [ ] 13D/13G {% #thirteen_d_g %}
|
|
441
|
-
- [ ] 13F read-through (if relevant) {% #thirteen_f %}
|
|
442
|
-
{% /checkboxes %}
|
|
443
|
-
|
|
444
|
-
{% /field-group %}
|
|
445
|
-
|
|
446
|
-
{% field-group id="sources_company" title="Q2.3 Company Communications" %}
|
|
447
|
-
|
|
448
|
-
{% checkboxes id="company_comms_reviewed" label="Company communications reviewed" checkboxMode="simple" %}
|
|
449
|
-
- [ ] Earnings press release {% #earnings_pr %}
|
|
450
|
-
- [ ] Earnings call webcast/transcript {% #earnings_call %}
|
|
451
|
-
- [ ] Prepared remarks + Q&A notes {% #prepared_remarks %}
|
|
452
|
-
- [ ] Investor presentation / slide deck {% #investor_deck %}
|
|
453
|
-
- [ ] Investor day materials (last 18 months) {% #investor_day %}
|
|
454
|
-
- [ ] Product announcements / pricing updates {% #product_announcements %}
|
|
455
|
-
- [ ] Guidance updates / pre-announcements {% #guidance_updates %}
|
|
456
|
-
{% /checkboxes %}
|
|
457
|
-
|
|
458
|
-
{% /field-group %}
|
|
459
|
-
|
|
460
|
-
{% field-group id="sources_external" title="Q2.4 External / Market Sources" %}
|
|
461
|
-
|
|
462
|
-
{% checkboxes id="external_sources_reviewed" label="External sources reviewed" checkboxMode="simple" %}
|
|
463
|
-
- [ ] Sell-side consensus snapshot {% #sellside_consensus %}
|
|
464
|
-
- [ ] Key sell-side notes {% #sellside_notes %}
|
|
465
|
-
- [ ] Relevant news (top 3 links) {% #relevant_news %}
|
|
466
|
-
- [ ] Industry data {% #industry_data %}
|
|
467
|
-
- [ ] Peer earnings read-across {% #peer_readacross %}
|
|
468
|
-
- [ ] Options market data (implied move/IV/skew) {% #options_data %}
|
|
469
|
-
- [ ] Short interest / borrow / CTB {% #short_interest %}
|
|
470
|
-
- [ ] Alternative data (traffic/app downloads/card spend) {% #alt_data %}
|
|
471
|
-
{% /checkboxes %}
|
|
472
|
-
|
|
473
|
-
{% string-field id="sellside_consensus_source" label="Sell-side consensus source" %}{% /string-field %}
|
|
474
|
-
|
|
475
|
-
{% string-field id="sellside_analyst_names" label="Key sell-side analyst names" %}{% /string-field %}
|
|
476
|
-
|
|
477
|
-
{% string-field id="news_links" label="Relevant news links (top 3)" %}{% /string-field %}
|
|
478
|
-
|
|
479
|
-
{% string-field id="industry_data_source" label="Industry data source" %}{% /string-field %}
|
|
480
|
-
|
|
481
|
-
{% string-field id="peer_tickers" label="Peer earnings tickers" %}{% /string-field %}
|
|
482
|
-
|
|
483
|
-
{% string-field id="options_data_source" label="Options market data source" %}{% /string-field %}
|
|
484
|
-
|
|
485
|
-
{% string-field id="short_interest_source" label="Short interest data source" %}{% /string-field %}
|
|
486
|
-
|
|
487
|
-
{% string-field id="alt_data_source" label="Alternative data source" %}{% /string-field %}
|
|
488
|
-
|
|
489
|
-
{% string-field id="other_sources" label="Other sources used" %}{% /string-field %}
|
|
490
|
-
|
|
491
|
-
{% /field-group %}
|
|
492
|
-
|
|
493
|
-
{% field-group id="sources_experts" title="Q2.5 Key Experts and Analysts" %}
|
|
494
|
-
|
|
495
|
-
{% string-list id="experts_list" label="Key experts (Name | Angle | Lead time | Hit rate | Tier)" minItems=0 validate=[{id: "item_format", pattern: "^.+\\|.+\\|.+\\|.+\\|.+", example: "Jane Doe | Supply chain | 2 weeks | High | Tier 1"}] %}{% /string-list %}
|
|
496
|
-
|
|
497
|
-
{% instructions ref="experts_list" %}
|
|
498
|
-
Format each entry as: Name | Angle | Typical lead time | Hit rate assessment | Tier
|
|
499
|
-
{% /instructions %}
|
|
500
|
-
|
|
501
|
-
{% /field-group %}
|
|
502
|
-
|
|
503
|
-
{% field-group id="business_snapshot" title="Q3. Business Model Snapshot" %}
|
|
504
|
-
|
|
505
|
-
{% string-field id="how_makes_money" label="How the company makes money" required=true validate=[{id: "min_words", min: 25}, {id: "max_words", max: 75}] %}{% /string-field %}
|
|
506
|
-
|
|
507
|
-
{% instructions ref="how_makes_money" %}
|
|
508
|
-
2-4 sentences; 25-75 words explaining how the company generates revenue.
|
|
509
|
-
{% /instructions %}
|
|
510
|
-
|
|
511
|
-
{% string-list id="revenue_segments" label="Revenue segments (Segment: X%)" required=true minItems=1 validate=[{id: "sum_to_percent_list", target: 100}] %}{% /string-list %}
|
|
512
|
-
|
|
513
|
-
{% instructions ref="revenue_segments" %}
|
|
514
|
-
List each segment with percentage of revenue. Format: "Segment Name: XX%". Percentages should sum to 100%.
|
|
515
|
-
{% /instructions %}
|
|
516
|
-
|
|
517
|
-
{% single-select id="price_changes_recently" label="Price changes recently?" required=true %}
|
|
518
|
-
- [ ] Yes {% #yes %}
|
|
519
|
-
- [ ] No {% #no %}
|
|
520
|
-
{% /single-select %}
|
|
521
|
-
|
|
522
|
-
{% string-field id="price_change_details" label="Price change details (if Yes)" validate=[{id: "required_if_equals", when: "price_changes_recently", equals: "yes"}] %}{% /string-field %}
|
|
523
|
-
|
|
524
|
-
{% string-field id="volume_demand_indicators" label="Volume/demand indicators" %}{% /string-field %}
|
|
525
|
-
|
|
526
|
-
{% string-field id="mix_shift_risk" label="Mix shift risk" %}{% /string-field %}
|
|
527
|
-
|
|
528
|
-
{% string-list id="key_kpis_quarterly" label="Key KPIs to track this quarter (KPI: why it matters)" required=true minItems=3 maxItems=8 validate=[{id: "item_format", pattern: "^.+:.+$", example: "Revenue Growth: tracks core business momentum"}] %}{% /string-list %}
|
|
529
|
-
|
|
530
|
-
{% instructions ref="key_kpis_quarterly" %}
|
|
531
|
-
Format: "KPI Name: Why it matters this quarter". 3-8 KPIs required.
|
|
532
|
-
{% /instructions %}
|
|
533
|
-
|
|
534
|
-
{% /field-group %}
|
|
535
|
-
|
|
536
|
-
{% field-group id="quant_income" title="Q4.1 Income Statement" %}
|
|
537
|
-
|
|
538
|
-
{% number-field id="revenue" label="Revenue" required=true %}{% /number-field %}
|
|
539
|
-
|
|
540
|
-
{% number-field id="revenue_yoy_pct" label="Revenue YoY %" %}{% /number-field %}
|
|
541
|
-
|
|
542
|
-
{% number-field id="revenue_qoq_pct" label="Revenue QoQ %" %}{% /number-field %}
|
|
543
|
-
|
|
544
|
-
{% number-field id="gross_margin_pct" label="Gross margin %" min=0 max=100 %}{% /number-field %}
|
|
545
|
-
|
|
546
|
-
{% number-field id="gross_margin_yoy_bps" label="Gross margin YoY (bps)" %}{% /number-field %}
|
|
547
|
-
|
|
548
|
-
{% number-field id="gross_margin_qoq_bps" label="Gross margin QoQ (bps)" %}{% /number-field %}
|
|
549
|
-
|
|
550
|
-
{% number-field id="op_margin_pct" label="Operating margin %" %}{% /number-field %}
|
|
551
|
-
|
|
552
|
-
{% number-field id="eps_diluted" label="Diluted EPS" required=true %}{% /number-field %}
|
|
553
|
-
|
|
554
|
-
{% string-field id="key_expense_drivers" label="Key expense drivers (R&D, SG&A)" %}{% /string-field %}
|
|
555
|
-
|
|
556
|
-
{% string-field id="one_time_items" label="One-time items / adjustments" %}{% /string-field %}
|
|
557
|
-
|
|
558
|
-
{% /field-group %}
|
|
559
|
-
|
|
560
|
-
{% field-group id="quant_balance" title="Q4.2 Balance Sheet / Liquidity" %}
|
|
561
|
-
|
|
562
|
-
{% number-field id="cash_equivalents" label="Cash & equivalents" %}{% /number-field %}
|
|
563
|
-
|
|
564
|
-
{% number-field id="net_debt" label="Net debt (negative for net cash)" %}{% /number-field %}
|
|
565
|
-
|
|
566
|
-
{% string-field id="working_capital_changes" label="Working capital changes affecting earnings quality" %}{% /string-field %}
|
|
567
|
-
|
|
568
|
-
{% string-field id="covenant_refinancing" label="Covenant / refinancing / maturity wall" %}{% /string-field %}
|
|
569
|
-
|
|
570
|
-
{% /field-group %}
|
|
571
|
-
|
|
572
|
-
{% field-group id="quant_cashflow" title="Q4.3 Cash Flow and Capital Return" %}
|
|
573
|
-
|
|
574
|
-
{% number-field id="operating_cash_flow" label="Operating cash flow" %}{% /number-field %}
|
|
575
|
-
|
|
576
|
-
{% number-field id="free_cash_flow" label="Free cash flow" %}{% /number-field %}
|
|
577
|
-
|
|
578
|
-
{% string-field id="fcf_definition" label="FCF definition used" %}{% /string-field %}
|
|
579
|
-
|
|
580
|
-
{% string-field id="buybacks" label="Buybacks (amount or share count)" %}{% /string-field %}
|
|
581
|
-
|
|
582
|
-
{% string-field id="dividends" label="Dividends (amount or per-share)" %}{% /string-field %}
|
|
583
|
-
|
|
584
|
-
{% string-field id="sbc_trend" label="Stock-based comp trend" %}{% /string-field %}
|
|
585
|
-
|
|
586
|
-
{% /field-group %}
|
|
587
|
-
|
|
588
|
-
{% field-group id="quant_quality" title="Q4.4 Quality Checks" %}
|
|
589
|
-
|
|
590
|
-
{% single-select id="unusual_accruals" label="Unusual accruals / reserve releases?" required=true %}
|
|
591
|
-
- [ ] Yes {% #yes %}
|
|
592
|
-
- [ ] No {% #no %}
|
|
593
|
-
{% /single-select %}
|
|
594
|
-
|
|
595
|
-
{% single-select id="working_capital_pullforward" label="Working capital pull-forward?" required=true %}
|
|
596
|
-
- [ ] Yes {% #yes %}
|
|
597
|
-
- [ ] No {% #no %}
|
|
598
|
-
{% /single-select %}
|
|
599
|
-
|
|
600
|
-
{% multi-select id="margin_change_drivers" label="Margin change drivers" %}
|
|
601
|
-
- [ ] Mix {% #mix %}
|
|
602
|
-
- [ ] Cost {% #cost %}
|
|
603
|
-
- [ ] FX {% #fx %}
|
|
604
|
-
- [ ] Other {% #other %}
|
|
605
|
-
{% /multi-select %}
|
|
606
|
-
|
|
607
|
-
{% string-field id="margin_change_notes" label="Margin change notes" %}{% /string-field %}
|
|
608
|
-
|
|
609
|
-
{% /field-group %}
|
|
610
|
-
|
|
611
|
-
{% field-group id="expect_guidance" title="Q5.1 Company Guidance" %}
|
|
612
|
-
|
|
613
|
-
{% string-field id="guidance_revenue" label="Revenue guidance" %}{% /string-field %}
|
|
614
|
-
|
|
615
|
-
{% string-field id="guidance_margin" label="Margin guidance" %}{% /string-field %}
|
|
616
|
-
|
|
617
|
-
{% string-field id="guidance_eps" label="EPS/Op income guidance" %}{% /string-field %}
|
|
618
|
-
|
|
619
|
-
{% string-field id="guidance_kpi" label="KPI guidance" %}{% /string-field %}
|
|
620
|
-
|
|
621
|
-
{% string-field id="guidance_qualitative" label="Qualitative guidance" %}{% /string-field %}
|
|
622
|
-
|
|
623
|
-
{% /field-group %}
|
|
624
|
-
|
|
625
|
-
{% field-group id="expect_consensus" title="Q5.2 Street Consensus" %}
|
|
626
|
-
|
|
627
|
-
{% string-field id="consensus_as_of" label="Consensus as-of date" required=true pattern="^\\d{4}-\\d{2}-\\d{2}$" %}{% /string-field %}
|
|
628
|
-
|
|
629
|
-
{% string-field id="consensus_source" label="Consensus source" required=true %}{% /string-field %}
|
|
630
|
-
|
|
631
|
-
{% number-field id="consensus_revenue" label="Consensus revenue" %}{% /number-field %}
|
|
632
|
-
|
|
633
|
-
{% number-field id="consensus_eps" label="Consensus EPS" %}{% /number-field %}
|
|
634
|
-
|
|
635
|
-
{% string-field id="consensus_kpis" label="Consensus key KPIs" %}{% /string-field %}
|
|
636
|
-
|
|
637
|
-
{% /field-group %}
|
|
638
|
-
|
|
639
|
-
{% field-group id="expect_estimate" title="Q5.3 Your Estimate (Base)" %}
|
|
640
|
-
|
|
641
|
-
{% number-field id="estimate_revenue" label="Your revenue estimate" required=true %}{% /number-field %}
|
|
642
|
-
|
|
643
|
-
{% number-field id="estimate_eps" label="Your EPS estimate" required=true %}{% /number-field %}
|
|
644
|
-
|
|
645
|
-
{% string-field id="estimate_kpis" label="Your KPI estimates" %}{% /string-field %}
|
|
646
|
-
|
|
647
|
-
{% number-field id="variance_vs_consensus" label="Variance vs consensus (%)" %}{% /number-field %}
|
|
648
|
-
|
|
649
|
-
{% /field-group %}
|
|
650
|
-
|
|
651
|
-
{% field-group id="expect_whisper" title="Q5.4 Whisper / Buyside Bar" %}
|
|
652
|
-
|
|
653
|
-
{% instructions ref="expect_whisper" %}
|
|
654
|
-
Only fill if evidence-based.
|
|
655
|
-
{% /instructions %}
|
|
656
|
-
|
|
657
|
-
{% number-field id="whisper_revenue" label="Whisper revenue" %}{% /number-field %}
|
|
658
|
-
|
|
659
|
-
{% number-field id="whisper_eps" label="Whisper EPS" %}{% /number-field %}
|
|
660
|
-
|
|
661
|
-
{% string-field id="whisper_evidence" label="Whisper evidence" validate=[{id: "required_if", when: "whisper_revenue"}, {id: "required_if", when: "whisper_eps"}] %}{% /string-field %}
|
|
662
|
-
|
|
663
|
-
{% instructions ref="whisper_evidence" %}
|
|
664
|
-
Required if whisper values are provided. Explain the source of whisper estimates.
|
|
665
|
-
{% /instructions %}
|
|
666
|
-
|
|
667
|
-
{% /field-group %}
|
|
668
|
-
|
|
669
|
-
{% field-group id="expect_market" title="Q5.5 Market-Implied" %}
|
|
670
|
-
|
|
671
|
-
{% number-field id="options_implied_move" label="Options implied move 1-day (%)" %}{% /number-field %}
|
|
672
|
-
|
|
673
|
-
{% single-select id="skew_indicates" label="Skew indicates" %}
|
|
674
|
-
- [ ] Upside pay-up {% #upside %}
|
|
675
|
-
- [ ] Downside pay-up {% #downside %}
|
|
140
|
+
{% field kind="single_select" id="analyst_sentiment" label="Analyst Sentiment" role="agent" %}
|
|
141
|
+
- [ ] Bullish {% #bullish %}
|
|
676
142
|
- [ ] Neutral {% #neutral %}
|
|
677
|
-
{%
|
|
678
|
-
|
|
679
|
-
{% string-field id="unusual_oi_flows" label="Unusual open interest / flows" %}{% /string-field %}
|
|
680
|
-
|
|
681
|
-
{% /field-group %}
|
|
682
|
-
|
|
683
|
-
{% field-group id="driver_1" title="Q6.1 Driver Model - Driver 1" %}
|
|
684
|
-
|
|
685
|
-
{% description ref="driver_1" %}
|
|
686
|
-
Simple, explicit, testable assumptions. At least 2 drivers required.
|
|
687
|
-
{% /description %}
|
|
688
|
-
|
|
689
|
-
{% string-field id="driver_1_name" label="Driver name" required=true %}{% /string-field %}
|
|
690
|
-
|
|
691
|
-
{% string-field id="driver_1_indicators" label="Leading indicators observed (what/when/source)" required=true %}{% /string-field %}
|
|
692
|
-
|
|
693
|
-
{% string-field id="driver_1_assumption" label="Assumption (base)" required=true %}{% /string-field %}
|
|
694
|
-
|
|
695
|
-
{% string-field id="driver_1_sensitivity" label="Sensitivity: if +/-X%, EPS impact = Y" %}{% /string-field %}
|
|
696
|
-
|
|
697
|
-
{% string-field id="driver_1_what_breaks" label="What breaks this assumption" %}{% /string-field %}
|
|
698
|
-
|
|
699
|
-
{% /field-group %}
|
|
700
|
-
|
|
701
|
-
{% field-group id="driver_2" title="Q6.2 Driver Model - Driver 2" %}
|
|
702
|
-
|
|
703
|
-
{% string-field id="driver_2_name" label="Driver name" required=true %}{% /string-field %}
|
|
704
|
-
|
|
705
|
-
{% string-field id="driver_2_indicators" label="Leading indicators observed" required=true %}{% /string-field %}
|
|
706
|
-
|
|
707
|
-
{% string-field id="driver_2_assumption" label="Assumption (base)" required=true %}{% /string-field %}
|
|
708
|
-
|
|
709
|
-
{% string-field id="driver_2_sensitivity" label="Sensitivity" %}{% /string-field %}
|
|
710
|
-
|
|
711
|
-
{% string-field id="driver_2_what_breaks" label="What breaks this assumption" %}{% /string-field %}
|
|
712
|
-
|
|
713
|
-
{% /field-group %}
|
|
714
|
-
|
|
715
|
-
{% field-group id="driver_3" title="Q6.3 Driver Model - Driver 3 (optional)" %}
|
|
716
|
-
|
|
717
|
-
{% string-field id="driver_3_name" label="Driver name" %}{% /string-field %}
|
|
718
|
-
|
|
719
|
-
{% string-field id="driver_3_indicators" label="Leading indicators observed" %}{% /string-field %}
|
|
720
|
-
|
|
721
|
-
{% string-field id="driver_3_assumption" label="Assumption (base)" %}{% /string-field %}
|
|
722
|
-
|
|
723
|
-
{% string-field id="driver_3_sensitivity" label="Sensitivity" %}{% /string-field %}
|
|
724
|
-
|
|
725
|
-
{% string-field id="driver_3_what_breaks" label="What breaks this assumption" %}{% /string-field %}
|
|
726
|
-
|
|
727
|
-
{% /field-group %}
|
|
728
|
-
|
|
729
|
-
{% field-group id="driver_margin_bridge" title="Q6.4 Margin Bridge" %}
|
|
730
|
-
|
|
731
|
-
{% instructions ref="driver_margin_bridge" %}
|
|
732
|
-
All margin impacts should sum to total margin change.
|
|
733
|
-
{% /instructions %}
|
|
734
|
-
|
|
735
|
-
{% number-field id="margin_mix_bps" label="Mix impact (bps)" %}{% /number-field %}
|
|
736
|
-
|
|
737
|
-
{% number-field id="margin_pricing_bps" label="Pricing impact (bps)" %}{% /number-field %}
|
|
738
|
-
|
|
739
|
-
{% number-field id="margin_input_costs_bps" label="Input costs impact (bps)" %}{% /number-field %}
|
|
740
|
-
|
|
741
|
-
{% number-field id="margin_fx_bps" label="FX impact (bps)" %}{% /number-field %}
|
|
742
|
-
|
|
743
|
-
{% number-field id="margin_one_offs_bps" label="One-offs impact (bps)" %}{% /number-field %}
|
|
744
|
-
|
|
745
|
-
{% /field-group %}
|
|
746
|
-
|
|
747
|
-
{% field-group id="scenario_base" title="Q7.1 Scenarios - Base Case" validate=[{id: "sum_to", fields: ["base_probability", "bull_probability", "bear_probability"], target: 100}] %}
|
|
748
|
-
|
|
749
|
-
{% instructions ref="scenario_base" %}
|
|
750
|
-
Probabilities across Base/Bull/Bear should sum to 100%.
|
|
751
|
-
{% /instructions %}
|
|
752
|
-
|
|
753
|
-
{% number-field id="base_probability" label="Probability (%)" required=true min=0 max=100 %}{% /number-field %}
|
|
754
|
-
|
|
755
|
-
{% number-field id="base_revenue" label="Revenue" required=true %}{% /number-field %}
|
|
756
|
-
|
|
757
|
-
{% number-field id="base_eps" label="EPS" required=true %}{% /number-field %}
|
|
758
|
-
|
|
759
|
-
{% string-field id="base_key_kpi" label="Key KPI" %}{% /string-field %}
|
|
760
|
-
|
|
761
|
-
{% string-field id="base_narrative" label="Narrative (1-2 sentences)" required=true maxLength=250 %}{% /string-field %}
|
|
762
|
-
|
|
763
|
-
{% string-field id="base_stock_reaction" label="Expected stock reaction and why" required=true %}{% /string-field %}
|
|
764
|
-
|
|
765
|
-
{% /field-group %}
|
|
766
|
-
|
|
767
|
-
{% field-group id="scenario_bull" title="Q7.2 Scenarios - Bull Case" %}
|
|
768
|
-
|
|
769
|
-
{% number-field id="bull_probability" label="Probability (%)" required=true min=0 max=100 %}{% /number-field %}
|
|
770
|
-
|
|
771
|
-
{% number-field id="bull_revenue" label="Revenue" required=true %}{% /number-field %}
|
|
772
|
-
|
|
773
|
-
{% number-field id="bull_eps" label="EPS" required=true %}{% /number-field %}
|
|
774
|
-
|
|
775
|
-
{% string-field id="bull_key_kpi" label="Key KPI" %}{% /string-field %}
|
|
776
|
-
|
|
777
|
-
{% string-field id="bull_what_surprises" label="What surprises?" required=true %}{% /string-field %}
|
|
778
|
-
|
|
779
|
-
{% string-field id="bull_reaction" label="Expected reaction" required=true %}{% /string-field %}
|
|
780
|
-
|
|
781
|
-
{% /field-group %}
|
|
782
|
-
|
|
783
|
-
{% field-group id="scenario_bear" title="Q7.3 Scenarios - Bear Case" %}
|
|
784
|
-
|
|
785
|
-
{% number-field id="bear_probability" label="Probability (%)" required=true min=0 max=100 %}{% /number-field %}
|
|
786
|
-
|
|
787
|
-
{% number-field id="bear_revenue" label="Revenue" required=true %}{% /number-field %}
|
|
788
|
-
|
|
789
|
-
{% number-field id="bear_eps" label="EPS" required=true %}{% /number-field %}
|
|
790
|
-
|
|
791
|
-
{% string-field id="bear_key_kpi" label="Key KPI" %}{% /string-field %}
|
|
792
|
-
|
|
793
|
-
{% string-field id="bear_what_breaks" label="What breaks?" required=true %}{% /string-field %}
|
|
794
|
-
|
|
795
|
-
{% string-field id="bear_reaction" label="Expected reaction" required=true %}{% /string-field %}
|
|
796
|
-
|
|
797
|
-
{% /field-group %}
|
|
798
|
-
|
|
799
|
-
{% field-group id="scenario_triggers" title="Q7.4 Surprise Triggers" %}
|
|
800
|
-
|
|
801
|
-
{% string-list id="surprise_triggers" label="Key surprise triggers (ranked)" required=true minItems=2 %}{% /string-list %}
|
|
802
|
-
|
|
803
|
-
{% /field-group %}
|
|
804
|
-
|
|
805
|
-
{% field-group id="mgmt_risks" title="Q8. Management and Risks" %}
|
|
806
|
-
|
|
807
|
-
{% single-select id="management_tone" label="Management tone last quarter" required=true %}
|
|
808
|
-
- [ ] Confident {% #confident %}
|
|
809
|
-
- [ ] Cautious {% #cautious %}
|
|
810
|
-
- [ ] Defensive {% #defensive %}
|
|
811
|
-
- [ ] Mixed {% #mixed %}
|
|
812
|
-
{% /single-select %}
|
|
813
|
-
|
|
814
|
-
{% string-list id="key_commitments" label="Key commitments/promises to track" required=true minItems=1 %}{% /string-list %}
|
|
815
|
-
|
|
816
|
-
{% string-list id="top_5_risks" label="Top 5 risks into this print (specific, not generic)" required=true minItems=5 maxItems=5 %}{% /string-list %}
|
|
817
|
-
|
|
818
|
-
{% string-field id="regulatory_legal_watch" label="Regulatory/legal watch items" %}{% /string-field %}
|
|
819
|
-
|
|
820
|
-
{% string-field id="competitive_threats" label="Competitive threats / share shifts" %}{% /string-field %}
|
|
821
|
-
|
|
822
|
-
{% string-field id="macro_sensitivities" label="Macro sensitivities (rates, FX, commodities, consumer)" %}{% /string-field %}
|
|
823
|
-
|
|
824
|
-
{% /field-group %}
|
|
825
|
-
|
|
826
|
-
{% field-group id="valuation" title="Q9. Valuation and Reaction" %}
|
|
827
|
-
|
|
828
|
-
{% multi-select id="valuation_metrics" label="Valuation metrics used" required=true minSelections=1 %}
|
|
829
|
-
- [ ] P/E {% #pe %}
|
|
830
|
-
- [ ] EV/EBITDA {% #ev_ebitda %}
|
|
831
|
-
- [ ] EV/Sales {% #ev_sales %}
|
|
832
|
-
- [ ] FCF yield {% #fcf_yield %}
|
|
833
|
-
- [ ] SOTP {% #sotp %}
|
|
834
|
-
{% /multi-select %}
|
|
835
|
-
|
|
836
|
-
{% string-field id="valuation_other" label="Other valuation metric" %}{% /string-field %}
|
|
837
|
-
|
|
838
|
-
{% single-select id="valuation_vs_history" label="Current vs historical range" required=true %}
|
|
839
|
-
- [ ] Cheap {% #cheap %}
|
|
840
|
-
- [ ] Mid {% #mid %}
|
|
841
|
-
- [ ] Expensive {% #expensive %}
|
|
842
|
-
{% /single-select %}
|
|
843
|
-
|
|
844
|
-
{% string-field id="valuation_why" label="Why (valuation rationale)" required=true minLength=60 %}{% /string-field %}
|
|
845
|
-
|
|
846
|
-
{% instructions ref="valuation_why" %}
|
|
847
|
-
Required. Explain your valuation assessment. Minimum 15 words.
|
|
848
|
-
{% /instructions %}
|
|
849
|
-
|
|
850
|
-
{% number-field id="avg_earnings_move" label="Avg earnings move last 8 quarters (%)" %}{% /number-field %}
|
|
851
|
-
|
|
852
|
-
{% multi-select id="reaction_drivers" label="What typically drives reaction" %}
|
|
853
|
-
- [ ] Revenue {% #revenue %}
|
|
854
|
-
- [ ] Margin {% #margin %}
|
|
855
|
-
- [ ] Guidance {% #guidance %}
|
|
856
|
-
- [ ] KPI {% #kpi %}
|
|
857
|
-
- [ ] Other {% #other %}
|
|
858
|
-
{% /multi-select %}
|
|
143
|
+
- [ ] Bearish {% #bearish %}
|
|
144
|
+
{% /field %}
|
|
859
145
|
|
|
860
|
-
|
|
146
|
+
**Sentiment rationale:**
|
|
861
147
|
|
|
862
|
-
{%
|
|
148
|
+
{% field kind="string" id="sentiment_rationale" label="Sentiment Rationale" role="agent" validate=[{id: "required_if_set", when: "analyst_sentiment"}, {id: "min_words", min: 10}] %}{% /field %}
|
|
149
|
+
{% instructions ref="sentiment_rationale" %}Required if sentiment is selected. Explain why (minimum 10 words).{% /instructions %}
|
|
863
150
|
|
|
864
|
-
|
|
151
|
+
**Summary:**
|
|
865
152
|
|
|
866
|
-
{%
|
|
153
|
+
{% field kind="string" id="summary" label="One-Line Summary" role="agent" maxLength=300 validate=[{id: "min_words", min: 10}, {id: "max_words", max: 50}] %}{% /field %}
|
|
154
|
+
{% instructions ref="summary" %}Brief overall assessment (10-50 words).{% /instructions %}
|
|
867
155
|
|
|
868
|
-
{% /
|
|
156
|
+
{% /group %}
|
|
869
157
|
|
|
870
158
|
{% /form %}
|