markform 0.1.4 → 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 +40 -53
- package/dist/ai-sdk.d.mts +1 -1
- package/dist/ai-sdk.mjs +1 -1
- package/dist/{apply-C54EMAJ1.mjs → apply-BCCiJzQr.mjs} +3 -3
- package/dist/bin.mjs +3 -3
- package/dist/{cli-BhWhn6L9.mjs → cli-D469amuk.mjs} +5 -11
- package/dist/cli.mjs +3 -3
- package/dist/{coreTypes-cbNTYAcb.d.mts → coreTypes-9XZSNOv6.d.mts} +2 -2
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +2 -2
- package/dist/{src-BNh7Cx9P.mjs → src-Df0XX7UB.mjs} +19 -6
- package/docs/markform-reference.md +19 -19
- package/docs/markform-spec.md +20 -20
- package/examples/earnings-analysis/earnings-analysis.form.md +86 -808
- package/examples/earnings-analysis/earnings-analysis.valid.ts +16 -148
- package/examples/movie-research/movie-research-basic.form.md +16 -16
- package/examples/movie-research/movie-research-deep.form.md +36 -36
- package/examples/movie-research/movie-research-minimal.form.md +4 -4
- package/examples/simple/simple-mock-filled.form.md +16 -16
- package/examples/simple/simple-skipped-filled.form.md +16 -16
- package/examples/simple/simple-with-skips.session.yaml +3 -3
- package/examples/simple/simple.form.md +16 -16
- package/examples/simple/simple.session.yaml +3 -3
- package/examples/startup-deep-research/startup-deep-research.form.md +22 -22
- package/examples/startup-research/startup-research-mock-filled.form.md +12 -12
- package/examples/startup-research/startup-research.form.md +12 -12
- package/package.json +1 -1
- package/examples/celebrity-deep-research/celebrity-deep-research.form.md +0 -967
|
@@ -1,880 +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
|
-
{% field kind="string" id="
|
|
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
|
-
{% field kind="
|
|
53
|
-
|
|
54
|
-
- [ ] Quarterly {% #quarterly %}
|
|
55
|
-
- [ ] Monthly {% #monthly %}
|
|
56
|
-
{% /field %}
|
|
57
|
-
|
|
58
|
-
{% field kind="multi_select" id="business_model_type" label="Business model type" required=true minSelections=1 %}
|
|
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
|
-
{% /field %}
|
|
68
|
-
|
|
69
|
-
{% instructions ref="business_model_type" %}
|
|
70
|
-
Check all that apply. At least one is required.
|
|
71
|
-
{% /instructions %}
|
|
72
|
-
|
|
73
|
-
{% field kind="string" id="business_model_other" label="Other business model (if applicable)" %}{% /field %}
|
|
43
|
+
{% field kind="string" id="exchange" label="Exchange" role="agent" %}{% /field %}
|
|
44
|
+
{% instructions ref="exchange" %}Primary stock exchange (e.g., NYSE, NASDAQ).{% /instructions %}
|
|
74
45
|
|
|
75
|
-
|
|
76
|
-
Describe any other business model types not covered above.
|
|
77
|
-
{% /instructions %}
|
|
46
|
+
**Sector:**
|
|
78
47
|
|
|
79
|
-
{% field kind="
|
|
48
|
+
{% field kind="string" id="sector" label="Sector" role="agent" %}{% /field %}
|
|
80
49
|
|
|
81
|
-
|
|
50
|
+
**Business summary:**
|
|
82
51
|
|
|
83
|
-
{%
|
|
84
|
-
|
|
85
|
-
{% /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 %}
|
|
86
54
|
|
|
87
|
-
|
|
55
|
+
**Revenue segments:**
|
|
88
56
|
|
|
89
|
-
{% field
|
|
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 %}
|
|
90
59
|
|
|
91
|
-
{%
|
|
60
|
+
{% /group %}
|
|
92
61
|
|
|
93
|
-
|
|
94
|
-
List 8-12 key pivotal moments in the company's history. One event per line.
|
|
95
|
-
{% /instructions %}
|
|
62
|
+
## Recent Earnings
|
|
96
63
|
|
|
97
|
-
{%
|
|
64
|
+
{% group id="recent_earnings" title="Recent Earnings" %}
|
|
98
65
|
|
|
99
|
-
|
|
66
|
+
**Fiscal quarter:**
|
|
100
67
|
|
|
101
|
-
{% field kind="string" id="
|
|
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 %}
|
|
102
70
|
|
|
103
|
-
|
|
71
|
+
**Revenue:**
|
|
104
72
|
|
|
105
|
-
{%
|
|
106
|
-
|
|
107
|
-
{% /instructions %}
|
|
73
|
+
{% field kind="number" id="revenue" label="Revenue (millions)" role="agent" %}{% /field %}
|
|
74
|
+
{% instructions ref="revenue" %}Total revenue in millions USD.{% /instructions %}
|
|
108
75
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
{% field-group id="operations_distribution" title="3. Operations and Distribution" %}
|
|
112
|
-
|
|
113
|
-
{% field kind="string" id="core_operating_activities" label="Core operating activities (R&D, manufacturing, distribution)" required=true %}{% /field %}
|
|
114
|
-
|
|
115
|
-
{% field kind="string" id="key_locations" label="Key locations (R&D hubs, manufacturing, data centers)" %}{% /field %}
|
|
116
|
-
|
|
117
|
-
{% field kind="multi_select" id="distribution_model" label="Distribution model" required=true minSelections=1 %}
|
|
118
|
-
- [ ] Direct (online / retail / salesforce) {% #direct %}
|
|
119
|
-
- [ ] Channel / resellers {% #channel %}
|
|
120
|
-
- [ ] Carrier / VARs {% #carrier_vars %}
|
|
121
|
-
- [ ] Marketplace / app store {% #marketplace_appstore %}
|
|
122
|
-
- [ ] OEM / embedded {% #oem_embedded %}
|
|
123
|
-
{% /field %}
|
|
76
|
+
**Revenue growth YoY:**
|
|
124
77
|
|
|
125
|
-
{% field kind="
|
|
78
|
+
{% field kind="number" id="revenue_growth" label="Revenue Growth YoY (%)" role="agent" min=-100 max=1000 %}{% /field %}
|
|
126
79
|
|
|
127
|
-
|
|
80
|
+
**EPS:**
|
|
128
81
|
|
|
129
|
-
{%
|
|
130
|
-
|
|
131
|
-
{% /instructions %}
|
|
82
|
+
{% field kind="number" id="eps" label="Earnings Per Share" role="agent" %}{% /field %}
|
|
83
|
+
{% instructions ref="eps" %}Diluted EPS for the quarter.{% /instructions %}
|
|
132
84
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
{% field kind="string" id="capacity_constraints" label="Capacity constraints / bottlenecks" %}{% /field %}
|
|
136
|
-
|
|
137
|
-
{% /field-group %}
|
|
138
|
-
|
|
139
|
-
{% field-group id="offerings_primary" title="4.1 Offerings - Primary Family" %}
|
|
140
|
-
|
|
141
|
-
{% description ref="offerings_primary" %}
|
|
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 %}
|
|
145
|
-
|
|
146
|
-
{% field kind="string" id="offering_1_name" label="Offering family name" required=true %}{% /field %}
|
|
147
|
-
|
|
148
|
-
{% field kind="string" id="offering_1_value_prop" label="Value proposition (1 sentence)" required=true maxLength=250 %}{% /field %}
|
|
149
|
-
|
|
150
|
-
{% instructions ref="offering_1_value_prop" %}
|
|
151
|
-
Maximum 50 words. Describe the core value in one sentence.
|
|
152
|
-
{% /instructions %}
|
|
153
|
-
|
|
154
|
-
{% field kind="single_select" id="offering_1_delivery" label="Delivery type" required=true %}
|
|
155
|
-
- [ ] Physical {% #physical %}
|
|
156
|
-
- [ ] Digital {% #digital %}
|
|
157
|
-
- [ ] Hybrid {% #hybrid %}
|
|
158
|
-
{% /field %}
|
|
85
|
+
**Beat/miss consensus:**
|
|
159
86
|
|
|
160
|
-
{% field kind="single_select" id="
|
|
161
|
-
- [ ]
|
|
162
|
-
- [ ]
|
|
163
|
-
- [ ]
|
|
164
|
-
- [ ] Take-rate {% #take_rate %}
|
|
165
|
-
- [ ] Advertising {% #ads %}
|
|
87
|
+
{% field kind="single_select" id="beat_miss" label="Beat/Miss Consensus" role="agent" %}
|
|
88
|
+
- [ ] Beat {% #beat %}
|
|
89
|
+
- [ ] Met {% #met %}
|
|
90
|
+
- [ ] Missed {% #missed %}
|
|
166
91
|
{% /field %}
|
|
167
92
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
{% /field-group %}
|
|
171
|
-
|
|
172
|
-
{% field-group id="offerings_bundles" title="4.2 Offerings - Bundles and Cross-Sell" %}
|
|
173
|
-
|
|
174
|
-
{% field kind="string" id="what_is_bundled" label="What is bundled?" %}{% /field %}
|
|
175
|
-
|
|
176
|
-
{% field kind="string" id="attach_paths" label="Attach paths (what gets added after first purchase)" %}{% /field %}
|
|
177
|
-
|
|
178
|
-
{% field kind="string" id="cannibalization_risks" label="Cannibalization risks" %}{% /field %}
|
|
179
|
-
|
|
180
|
-
{% /field-group %}
|
|
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
|
-
{% field kind="string" id="pricing_offering_name" label="Offering family" required=true %}{% /field %}
|
|
189
|
-
|
|
190
|
-
{% field kind="string" id="list_price_range" label="List price / typical range" required=true %}{% /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
|
-
{% field kind="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
|
-
{% /field %}
|
|
203
|
-
|
|
204
|
-
{% field kind="string" id="contract_length" label="Contract length (B2B)" %}{% /field %}
|
|
205
|
-
|
|
206
|
-
{% field kind="string" id="contract_renewal" label="Renewal terms" %}{% /field %}
|
|
207
|
-
|
|
208
|
-
{% field kind="string" id="contract_escalators" label="Price escalators" %}{% /field %}
|
|
209
|
-
|
|
210
|
-
{% field kind="string" id="payer_vs_user" label="Who pays vs who uses" %}{% /field %}
|
|
211
|
-
|
|
212
|
-
{% field kind="string" id="arpu_asp_drivers" label="ARPU/ASP drivers" %}{% /field %}
|
|
93
|
+
**Beat/miss details:**
|
|
213
94
|
|
|
214
|
-
{% field kind="string" id="
|
|
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 %}
|
|
215
97
|
|
|
216
|
-
{% /
|
|
98
|
+
{% /group %}
|
|
217
99
|
|
|
218
|
-
|
|
100
|
+
## Key Metrics
|
|
219
101
|
|
|
220
|
-
{%
|
|
102
|
+
{% group id="key_metrics" title="Key Metrics" %}
|
|
221
103
|
|
|
222
|
-
|
|
104
|
+
**Gross margin:**
|
|
223
105
|
|
|
224
|
-
{% field kind="
|
|
225
|
-
|
|
226
|
-
{% field kind="number" id="cac" label="Customer Acquisition Cost (CAC)" %}{% /field %}
|
|
227
|
-
|
|
228
|
-
{% field kind="string" id="payback_period" label="Payback period" %}{% /field %}
|
|
229
|
-
|
|
230
|
-
{% field kind="number" id="ltv" label="Lifetime Value (LTV)" %}{% /field %}
|
|
231
|
-
|
|
232
|
-
{% field kind="number" id="churn_rate" label="Churn rate (%)" min=0 max=100 %}{% /field %}
|
|
233
|
-
|
|
234
|
-
{% field kind="string" id="operating_leverage" label="Operating leverage (fixed vs variable costs)" %}{% /field %}
|
|
235
|
-
|
|
236
|
-
{% field kind="string" id="margin_risks" label="Biggest margin risks" %}{% /field %}
|
|
237
|
-
|
|
238
|
-
{% /field-group %}
|
|
239
|
-
|
|
240
|
-
{% field-group id="customers_segmentation" title="6.1 Customer Segmentation" %}
|
|
241
|
-
|
|
242
|
-
{% field kind="string" id="segment_1" label="Segment 1 (size, needs, willingness to pay)" required=true %}{% /field %}
|
|
243
|
-
|
|
244
|
-
{% field kind="string" id="segment_2" label="Segment 2" required=true %}{% /field %}
|
|
245
|
-
|
|
246
|
-
{% field kind="string" id="segment_3" label="Segment 3" %}{% /field %}
|
|
247
|
-
|
|
248
|
-
{% field kind="string" id="geography_mix" label="Geography mix" required=true %}{% /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
|
-
{% field kind="string" id="buyer_user_influencer" label="Buyer vs user vs influencer" %}{% /field %}
|
|
255
|
-
|
|
256
|
-
{% /field-group %}
|
|
257
|
-
|
|
258
|
-
{% field-group id="customers_buying" title="6.2 Buying Motion" %}
|
|
259
|
-
|
|
260
|
-
{% field kind="string" id="purchase_trigger" label="What triggers purchase?" required=true %}{% /field %}
|
|
261
|
-
|
|
262
|
-
{% field kind="string" id="decision_cycle_length" label="Decision cycle length" %}{% /field %}
|
|
263
|
-
|
|
264
|
-
{% field kind="string" id="replacement_upgrade_cycle" label="Replacement/upgrade cycle (if relevant)" %}{% /field %}
|
|
265
|
-
|
|
266
|
-
{% field kind="string" id="retention_churn_drivers" label="Retention/churn drivers (if recurring)" %}{% /field %}
|
|
267
|
-
|
|
268
|
-
{% /field-group %}
|
|
269
|
-
|
|
270
|
-
{% field-group id="customers_concentration" title="6.3 Concentration and Notable Customers" %}
|
|
271
|
-
|
|
272
|
-
{% field kind="number" id="top_customer_concentration" label="Customer concentration risk (top customer %)" min=0 max=100 %}{% /field %}
|
|
273
|
-
|
|
274
|
-
{% field kind="string" id="notable_customers" label="Notable customers / logos (B2B)" %}{% /field %}
|
|
275
|
-
|
|
276
|
-
{% field kind="string" id="channel_dependencies" label="Channel partner dependencies" %}{% /field %}
|
|
277
|
-
|
|
278
|
-
{% /field-group %}
|
|
279
|
-
|
|
280
|
-
{% field-group id="market_competition" title="7. Market and Competition" %}
|
|
281
|
-
|
|
282
|
-
{% field kind="string" id="primary_markets" label="Primary markets competed in" required=true %}{% /field %}
|
|
283
|
-
|
|
284
|
-
{% field kind="string" id="tam_sam_som" label="TAM/SAM/SOM (and confidence)" %}{% /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
|
-
{% field kind="string" id="market_growth_cyclicality" label="Market growth rate and cyclicality" %}{% /field %}
|
|
291
|
-
|
|
292
|
-
{% field kind="string" id="competitors" label="Competitors by category (direct + substitutes)" required=true %}{% /field %}
|
|
293
|
-
|
|
294
|
-
{% field kind="string_list" id="basis_of_competition" label="Basis of competition (ranked top 5)" required=true minItems=5 maxItems=5 %}{% /field %}
|
|
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
|
-
{% field kind="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
|
-
{% /field %}
|
|
106
|
+
{% field kind="number" id="gross_margin" label="Gross Margin (%)" role="agent" min=0 max=100 %}{% /field %}
|
|
311
107
|
|
|
312
|
-
|
|
108
|
+
**Operating margin:**
|
|
313
109
|
|
|
314
|
-
{%
|
|
315
|
-
Required if any moat is checked above. Explain why these moats apply. Minimum 25 words.
|
|
316
|
-
{% /instructions %}
|
|
110
|
+
{% field kind="number" id="operating_margin" label="Operating Margin (%)" role="agent" min=-100 max=100 %}{% /field %}
|
|
317
111
|
|
|
318
|
-
|
|
112
|
+
**Market cap:**
|
|
319
113
|
|
|
320
|
-
{% /field
|
|
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 %}
|
|
321
116
|
|
|
322
|
-
|
|
117
|
+
**P/E ratio:**
|
|
323
118
|
|
|
324
|
-
{% field kind="
|
|
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 %}
|
|
325
121
|
|
|
326
|
-
{%
|
|
122
|
+
{% /group %}
|
|
327
123
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
{% field kind="string" id="logistics_inventory_risks" label="Logistics and inventory risks" %}{% /field %}
|
|
331
|
-
|
|
332
|
-
{% field kind="string" id="geopolitical_choke_points" label="Geopolitical choke points" %}{% /field %}
|
|
333
|
-
|
|
334
|
-
{% /field-group %}
|
|
335
|
-
|
|
336
|
-
{% field-group id="macro_sensitivity" title="8.2 Macro Sensitivity" %}
|
|
337
|
-
|
|
338
|
-
{% field kind="string_list" id="macro_variables" label="Top 5 macro variables that historically mattered" required=true minItems=5 maxItems=5 %}{% /field %}
|
|
339
|
-
|
|
340
|
-
{% instructions ref="macro_variables" %}
|
|
341
|
-
List exactly 5 macro variables, ranked by importance.
|
|
342
|
-
{% /instructions %}
|
|
343
|
-
|
|
344
|
-
{% field kind="string" id="transmission_mechanism" label="Transmission mechanism (how each impacts revenue/margin/cash)" required=true validate=[{id: "min_words", min: 50}] %}{% /field %}
|
|
345
|
-
|
|
346
|
-
{% instructions ref="transmission_mechanism" %}
|
|
347
|
-
Minimum 50 words. Explain how each macro variable impacts the business.
|
|
348
|
-
{% /instructions %}
|
|
349
|
-
|
|
350
|
-
{% field kind="string" id="historical_episodes" label="Historical episodes (recession/inflation/FX/supply shock)" %}{% /field %}
|
|
351
|
-
|
|
352
|
-
{% field kind="string" id="leading_indicators" label="Leading indicators to monitor pre-earnings" %}{% /field %}
|
|
353
|
-
|
|
354
|
-
{% /field-group %}
|
|
355
|
-
|
|
356
|
-
{% field-group id="financial_history" title="9. Financial History" %}
|
|
357
|
-
|
|
358
|
-
{% field kind="string" id="trend_summary" label="3-5 year trend summary (revenue, margin, EPS, FCF)" required=true validate=[{id: "min_words", min: 75}] %}{% /field %}
|
|
359
|
-
|
|
360
|
-
{% instructions ref="trend_summary" %}
|
|
361
|
-
Minimum 75 words. Cover revenue, margin, EPS, and free cash flow trends.
|
|
362
|
-
{% /instructions %}
|
|
363
|
-
|
|
364
|
-
{% field kind="string" id="capital_return_policy" label="Capital return policy (buybacks/dividends)" %}{% /field %}
|
|
365
|
-
|
|
366
|
-
{% field kind="string" id="major_inflection_points" label="Major inflection points (product cycles, pricing shifts, regulation)" %}{% /field %}
|
|
367
|
-
|
|
368
|
-
{% field kind="string" id="stock_performance_context" label="Stock performance context (vs index/peers)" %}{% /field %}
|
|
369
|
-
|
|
370
|
-
{% field kind="string" id="multiples_vs_history" label="Multiples context vs history" %}{% /field %}
|
|
371
|
-
|
|
372
|
-
{% /field-group %}
|
|
373
|
-
|
|
374
|
-
{% field-group id="open_questions_profile" title="10. Open Questions" %}
|
|
375
|
-
|
|
376
|
-
{% field kind="string_list" id="unanswered_questions" label="Top unanswered questions (ranked by impact)" minItems=0 maxItems=10 %}{% /field %}
|
|
377
|
-
|
|
378
|
-
{% field kind="string" id="how_to_answer" label="How to answer (data / calls / sources)" %}{% /field %}
|
|
379
|
-
|
|
380
|
-
{% field kind="string" id="deadline" label="Deadline (before earnings, next quarter, etc.)" pattern="^\\d{4}-\\d{2}-\\d{2}$|^[A-Za-z].*$" %}{% /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
|
-
{% field kind="string" id="pre_earnings_thesis" label="One-sentence thesis (pre-earnings)" required=true maxLength=250 %}{% /field %}
|
|
407
|
-
|
|
408
|
-
{% instructions ref="pre_earnings_thesis" %}
|
|
409
|
-
Maximum 50 words. State your core thesis before the earnings release.
|
|
410
|
-
{% /instructions %}
|
|
411
|
-
|
|
412
|
-
{% field kind="string_list" id="what_matters_top_3" label="What matters this quarter (top 3 drivers)" required=true minItems=3 maxItems=3 %}{% /field %}
|
|
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
|
-
{% field kind="table" id="sources_accessed" label="Sources Accessed" required=true minRows=3
|
|
427
|
-
columnIds=["date", "source", "type", "link", "takeaways"]
|
|
428
|
-
columnTypes=[{type: "date", required: true}, {type: "string", required: true}, {type: "string", required: true}, {type: "url", required: true}, {type: "string", required: true}] %}
|
|
429
|
-
| Date | Source | Type | Link | Takeaways |
|
|
430
|
-
|------|--------|------|------|-----------|
|
|
431
|
-
{% /field %}
|
|
432
|
-
|
|
433
|
-
{% /field-group %}
|
|
434
|
-
|
|
435
|
-
{% field-group id="sources_sec" title="Q2.2 SEC / Regulatory Documents" %}
|
|
436
|
-
|
|
437
|
-
{% field kind="checkboxes" id="sec_docs_reviewed" label="SEC documents reviewed" checkboxMode="simple" %}
|
|
438
|
-
- [ ] 10-K (latest) {% #ten_k %}
|
|
439
|
-
- [ ] 10-Q (latest) {% #ten_q %}
|
|
440
|
-
- [ ] 8-K earnings release (current quarter) {% #eight_k_current %}
|
|
441
|
-
- [ ] Prior quarter 8-K earnings release {% #eight_k_prior %}
|
|
442
|
-
- [ ] Proxy (DEF 14A) {% #proxy %}
|
|
443
|
-
- [ ] S-1 / 20-F / 6-K (if applicable) {% #s1_20f_6k %}
|
|
444
|
-
- [ ] Insider trading filings (Forms 3/4/5) {% #insider_filings %}
|
|
445
|
-
- [ ] 13D/13G {% #thirteen_d_g %}
|
|
446
|
-
- [ ] 13F read-through (if relevant) {% #thirteen_f %}
|
|
447
|
-
{% /field %}
|
|
448
|
-
|
|
449
|
-
{% /field-group %}
|
|
450
|
-
|
|
451
|
-
{% field-group id="sources_company" title="Q2.3 Company Communications" %}
|
|
452
|
-
|
|
453
|
-
{% field kind="checkboxes" id="company_comms_reviewed" label="Company communications reviewed" checkboxMode="simple" %}
|
|
454
|
-
- [ ] Earnings press release {% #earnings_pr %}
|
|
455
|
-
- [ ] Earnings call webcast/transcript {% #earnings_call %}
|
|
456
|
-
- [ ] Prepared remarks + Q&A notes {% #prepared_remarks %}
|
|
457
|
-
- [ ] Investor presentation / slide deck {% #investor_deck %}
|
|
458
|
-
- [ ] Investor day materials (last 18 months) {% #investor_day %}
|
|
459
|
-
- [ ] Product announcements / pricing updates {% #product_announcements %}
|
|
460
|
-
- [ ] Guidance updates / pre-announcements {% #guidance_updates %}
|
|
461
|
-
{% /field %}
|
|
462
|
-
|
|
463
|
-
{% /field-group %}
|
|
464
|
-
|
|
465
|
-
{% field-group id="sources_external" title="Q2.4 External / Market Sources" %}
|
|
466
|
-
|
|
467
|
-
{% field kind="checkboxes" id="external_sources_reviewed" label="External sources reviewed" checkboxMode="simple" %}
|
|
468
|
-
- [ ] Sell-side consensus snapshot {% #sellside_consensus %}
|
|
469
|
-
- [ ] Key sell-side notes {% #sellside_notes %}
|
|
470
|
-
- [ ] Relevant news (top 3 links) {% #relevant_news %}
|
|
471
|
-
- [ ] Industry data {% #industry_data %}
|
|
472
|
-
- [ ] Peer earnings read-across {% #peer_readacross %}
|
|
473
|
-
- [ ] Options market data (implied move/IV/skew) {% #options_data %}
|
|
474
|
-
- [ ] Short interest / borrow / CTB {% #short_interest %}
|
|
475
|
-
- [ ] Alternative data (traffic/app downloads/card spend) {% #alt_data %}
|
|
476
|
-
{% /field %}
|
|
477
|
-
|
|
478
|
-
{% field kind="string" id="sellside_consensus_source" label="Sell-side consensus source" %}{% /field %}
|
|
479
|
-
|
|
480
|
-
{% field kind="string" id="sellside_analyst_names" label="Key sell-side analyst names" %}{% /field %}
|
|
481
|
-
|
|
482
|
-
{% field kind="string" id="news_links" label="Relevant news links (top 3)" %}{% /field %}
|
|
483
|
-
|
|
484
|
-
{% field kind="string" id="industry_data_source" label="Industry data source" %}{% /field %}
|
|
485
|
-
|
|
486
|
-
{% field kind="string" id="peer_tickers" label="Peer earnings tickers" %}{% /field %}
|
|
487
|
-
|
|
488
|
-
{% field kind="string" id="options_data_source" label="Options market data source" %}{% /field %}
|
|
489
|
-
|
|
490
|
-
{% field kind="string" id="short_interest_source" label="Short interest data source" %}{% /field %}
|
|
491
|
-
|
|
492
|
-
{% field kind="string" id="alt_data_source" label="Alternative data source" %}{% /field %}
|
|
493
|
-
|
|
494
|
-
{% field kind="string" id="other_sources" label="Other sources used" %}{% /field %}
|
|
495
|
-
|
|
496
|
-
{% /field-group %}
|
|
497
|
-
|
|
498
|
-
{% field-group id="sources_experts" title="Q2.5 Key Experts and Analysts" %}
|
|
499
|
-
|
|
500
|
-
{% field kind="table" id="experts_list" label="Key Experts" minRows=0
|
|
501
|
-
columnIds=["name", "angle", "lead_time", "hit_rate", "tier"]
|
|
502
|
-
columnTypes=["string", "string", "string", "string", "string"] %}
|
|
503
|
-
| Name | Angle | Lead Time | Hit Rate | Tier |
|
|
504
|
-
|------|-------|-----------|----------|------|
|
|
505
|
-
{% /field %}
|
|
506
|
-
|
|
507
|
-
{% instructions ref="experts_list" %}
|
|
508
|
-
Track key experts covering this company with their specialization and track record.
|
|
509
|
-
{% /instructions %}
|
|
510
|
-
|
|
511
|
-
{% /field-group %}
|
|
512
|
-
|
|
513
|
-
{% field-group id="business_snapshot" title="Q3. Business Model Snapshot" %}
|
|
514
|
-
|
|
515
|
-
{% field kind="string" id="how_makes_money" label="How the company makes money" required=true validate=[{id: "min_words", min: 25}, {id: "max_words", max: 75}] %}{% /field %}
|
|
516
|
-
|
|
517
|
-
{% instructions ref="how_makes_money" %}
|
|
518
|
-
2-4 sentences; 25-75 words explaining how the company generates revenue.
|
|
519
|
-
{% /instructions %}
|
|
520
|
-
|
|
521
|
-
{% field kind="string_list" id="revenue_segments" label="Revenue segments (Segment: X%)" required=true minItems=1 validate=[{id: "sum_to_percent_list", target: 100}] %}{% /field %}
|
|
522
|
-
|
|
523
|
-
{% instructions ref="revenue_segments" %}
|
|
524
|
-
List each segment with percentage of revenue. Format: "Segment Name: XX%". Percentages should sum to 100%.
|
|
525
|
-
{% /instructions %}
|
|
526
|
-
|
|
527
|
-
{% field kind="single_select" id="price_changes_recently" label="Price changes recently?" required=true %}
|
|
528
|
-
- [ ] Yes {% #yes %}
|
|
529
|
-
- [ ] No {% #no %}
|
|
530
|
-
{% /field %}
|
|
124
|
+
## Outlook
|
|
531
125
|
|
|
532
|
-
{%
|
|
126
|
+
{% group id="outlook" title="Outlook" %}
|
|
533
127
|
|
|
534
|
-
|
|
128
|
+
**Guidance:**
|
|
535
129
|
|
|
536
|
-
{% field kind="string" id="
|
|
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 %}
|
|
537
132
|
|
|
538
|
-
|
|
133
|
+
**Key risks:**
|
|
539
134
|
|
|
540
|
-
{%
|
|
541
|
-
|
|
542
|
-
{% /instructions %}
|
|
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 %}
|
|
543
137
|
|
|
544
|
-
|
|
138
|
+
**Analyst sentiment:**
|
|
545
139
|
|
|
546
|
-
{% field
|
|
547
|
-
|
|
548
|
-
{% field kind="number" id="revenue" label="Revenue" required=true %}{% /field %}
|
|
549
|
-
|
|
550
|
-
{% field kind="number" id="revenue_yoy_pct" label="Revenue YoY %" %}{% /field %}
|
|
551
|
-
|
|
552
|
-
{% field kind="number" id="revenue_qoq_pct" label="Revenue QoQ %" %}{% /field %}
|
|
553
|
-
|
|
554
|
-
{% field kind="number" id="gross_margin_pct" label="Gross margin %" min=0 max=100 %}{% /field %}
|
|
555
|
-
|
|
556
|
-
{% field kind="number" id="gross_margin_yoy_bps" label="Gross margin YoY (bps)" %}{% /field %}
|
|
557
|
-
|
|
558
|
-
{% field kind="number" id="gross_margin_qoq_bps" label="Gross margin QoQ (bps)" %}{% /field %}
|
|
559
|
-
|
|
560
|
-
{% field kind="number" id="op_margin_pct" label="Operating margin %" %}{% /field %}
|
|
561
|
-
|
|
562
|
-
{% field kind="number" id="eps_diluted" label="Diluted EPS" required=true %}{% /field %}
|
|
563
|
-
|
|
564
|
-
{% field kind="string" id="key_expense_drivers" label="Key expense drivers (R&D, SG&A)" %}{% /field %}
|
|
565
|
-
|
|
566
|
-
{% field kind="string" id="one_time_items" label="One-time items / adjustments" %}{% /field %}
|
|
567
|
-
|
|
568
|
-
{% /field-group %}
|
|
569
|
-
|
|
570
|
-
{% field-group id="quant_balance" title="Q4.2 Balance Sheet / Liquidity" %}
|
|
571
|
-
|
|
572
|
-
{% field kind="number" id="cash_equivalents" label="Cash & equivalents" %}{% /field %}
|
|
573
|
-
|
|
574
|
-
{% field kind="number" id="net_debt" label="Net debt (negative for net cash)" %}{% /field %}
|
|
575
|
-
|
|
576
|
-
{% field kind="string" id="working_capital_changes" label="Working capital changes affecting earnings quality" %}{% /field %}
|
|
577
|
-
|
|
578
|
-
{% field kind="string" id="covenant_refinancing" label="Covenant / refinancing / maturity wall" %}{% /field %}
|
|
579
|
-
|
|
580
|
-
{% /field-group %}
|
|
581
|
-
|
|
582
|
-
{% field-group id="quant_cashflow" title="Q4.3 Cash Flow and Capital Return" %}
|
|
583
|
-
|
|
584
|
-
{% field kind="number" id="operating_cash_flow" label="Operating cash flow" %}{% /field %}
|
|
585
|
-
|
|
586
|
-
{% field kind="number" id="free_cash_flow" label="Free cash flow" %}{% /field %}
|
|
587
|
-
|
|
588
|
-
{% field kind="string" id="fcf_definition" label="FCF definition used" %}{% /field %}
|
|
589
|
-
|
|
590
|
-
{% field kind="string" id="buybacks" label="Buybacks (amount or share count)" %}{% /field %}
|
|
591
|
-
|
|
592
|
-
{% field kind="string" id="dividends" label="Dividends (amount or per-share)" %}{% /field %}
|
|
593
|
-
|
|
594
|
-
{% field kind="string" id="sbc_trend" label="Stock-based comp trend" %}{% /field %}
|
|
595
|
-
|
|
596
|
-
{% /field-group %}
|
|
597
|
-
|
|
598
|
-
{% field-group id="quant_quality" title="Q4.4 Quality Checks" %}
|
|
599
|
-
|
|
600
|
-
{% field kind="single_select" id="unusual_accruals" label="Unusual accruals / reserve releases?" required=true %}
|
|
601
|
-
- [ ] Yes {% #yes %}
|
|
602
|
-
- [ ] No {% #no %}
|
|
603
|
-
{% /field %}
|
|
604
|
-
|
|
605
|
-
{% field kind="single_select" id="working_capital_pullforward" label="Working capital pull-forward?" required=true %}
|
|
606
|
-
- [ ] Yes {% #yes %}
|
|
607
|
-
- [ ] No {% #no %}
|
|
608
|
-
{% /field %}
|
|
609
|
-
|
|
610
|
-
{% field kind="multi_select" id="margin_change_drivers" label="Margin change drivers" %}
|
|
611
|
-
- [ ] Mix {% #mix %}
|
|
612
|
-
- [ ] Cost {% #cost %}
|
|
613
|
-
- [ ] FX {% #fx %}
|
|
614
|
-
- [ ] Other {% #other %}
|
|
615
|
-
{% /field %}
|
|
616
|
-
|
|
617
|
-
{% field kind="string" id="margin_change_notes" label="Margin change notes" %}{% /field %}
|
|
618
|
-
|
|
619
|
-
{% /field-group %}
|
|
620
|
-
|
|
621
|
-
{% field-group id="expect_guidance" title="Q5.1 Company Guidance" %}
|
|
622
|
-
|
|
623
|
-
{% field kind="string" id="guidance_revenue" label="Revenue guidance" %}{% /field %}
|
|
624
|
-
|
|
625
|
-
{% field kind="string" id="guidance_margin" label="Margin guidance" %}{% /field %}
|
|
626
|
-
|
|
627
|
-
{% field kind="string" id="guidance_eps" label="EPS/Op income guidance" %}{% /field %}
|
|
628
|
-
|
|
629
|
-
{% field kind="string" id="guidance_kpi" label="KPI guidance" %}{% /field %}
|
|
630
|
-
|
|
631
|
-
{% field kind="string" id="guidance_qualitative" label="Qualitative guidance" %}{% /field %}
|
|
632
|
-
|
|
633
|
-
{% /field-group %}
|
|
634
|
-
|
|
635
|
-
{% field-group id="expect_consensus" title="Q5.2 Street Consensus" %}
|
|
636
|
-
|
|
637
|
-
{% field kind="string" id="consensus_as_of" label="Consensus as-of date" required=true pattern="^\\d{4}-\\d{2}-\\d{2}$" %}{% /field %}
|
|
638
|
-
|
|
639
|
-
{% field kind="string" id="consensus_source" label="Consensus source" required=true %}{% /field %}
|
|
640
|
-
|
|
641
|
-
{% field kind="number" id="consensus_revenue" label="Consensus revenue" %}{% /field %}
|
|
642
|
-
|
|
643
|
-
{% field kind="number" id="consensus_eps" label="Consensus EPS" %}{% /field %}
|
|
644
|
-
|
|
645
|
-
{% field kind="string" id="consensus_kpis" label="Consensus key KPIs" %}{% /field %}
|
|
646
|
-
|
|
647
|
-
{% /field-group %}
|
|
648
|
-
|
|
649
|
-
{% field-group id="expect_estimate" title="Q5.3 Your Estimate (Base)" %}
|
|
650
|
-
|
|
651
|
-
{% field kind="number" id="estimate_revenue" label="Your revenue estimate" required=true %}{% /field %}
|
|
652
|
-
|
|
653
|
-
{% field kind="number" id="estimate_eps" label="Your EPS estimate" required=true %}{% /field %}
|
|
654
|
-
|
|
655
|
-
{% field kind="string" id="estimate_kpis" label="Your KPI estimates" %}{% /field %}
|
|
656
|
-
|
|
657
|
-
{% field kind="number" id="variance_vs_consensus" label="Variance vs consensus (%)" %}{% /field %}
|
|
658
|
-
|
|
659
|
-
{% /field-group %}
|
|
660
|
-
|
|
661
|
-
{% field-group id="expect_whisper" title="Q5.4 Whisper / Buyside Bar" %}
|
|
662
|
-
|
|
663
|
-
{% instructions ref="expect_whisper" %}
|
|
664
|
-
Only fill if evidence-based.
|
|
665
|
-
{% /instructions %}
|
|
666
|
-
|
|
667
|
-
{% field kind="number" id="whisper_revenue" label="Whisper revenue" %}{% /field %}
|
|
668
|
-
|
|
669
|
-
{% field kind="number" id="whisper_eps" label="Whisper EPS" %}{% /field %}
|
|
670
|
-
|
|
671
|
-
{% field kind="string" id="whisper_evidence" label="Whisper evidence" validate=[{id: "required_if", when: "whisper_revenue"}, {id: "required_if", when: "whisper_eps"}] %}{% /field %}
|
|
672
|
-
|
|
673
|
-
{% instructions ref="whisper_evidence" %}
|
|
674
|
-
Required if whisper values are provided. Explain the source of whisper estimates.
|
|
675
|
-
{% /instructions %}
|
|
676
|
-
|
|
677
|
-
{% /field-group %}
|
|
678
|
-
|
|
679
|
-
{% field-group id="expect_market" title="Q5.5 Market-Implied" %}
|
|
680
|
-
|
|
681
|
-
{% field kind="number" id="options_implied_move" label="Options implied move 1-day (%)" %}{% /field %}
|
|
682
|
-
|
|
683
|
-
{% field kind="single_select" id="skew_indicates" label="Skew indicates" %}
|
|
684
|
-
- [ ] Upside pay-up {% #upside %}
|
|
685
|
-
- [ ] Downside pay-up {% #downside %}
|
|
140
|
+
{% field kind="single_select" id="analyst_sentiment" label="Analyst Sentiment" role="agent" %}
|
|
141
|
+
- [ ] Bullish {% #bullish %}
|
|
686
142
|
- [ ] Neutral {% #neutral %}
|
|
143
|
+
- [ ] Bearish {% #bearish %}
|
|
687
144
|
{% /field %}
|
|
688
145
|
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
{% /field-group %}
|
|
692
|
-
|
|
693
|
-
{% field-group id="driver_1" title="Q6.1 Driver Model - Driver 1" %}
|
|
694
|
-
|
|
695
|
-
{% description ref="driver_1" %}
|
|
696
|
-
Simple, explicit, testable assumptions. At least 2 drivers required.
|
|
697
|
-
{% /description %}
|
|
698
|
-
|
|
699
|
-
{% field kind="string" id="driver_1_name" label="Driver name" required=true %}{% /field %}
|
|
700
|
-
|
|
701
|
-
{% field kind="string" id="driver_1_indicators" label="Leading indicators observed (what/when/source)" required=true %}{% /field %}
|
|
702
|
-
|
|
703
|
-
{% field kind="string" id="driver_1_assumption" label="Assumption (base)" required=true %}{% /field %}
|
|
704
|
-
|
|
705
|
-
{% field kind="string" id="driver_1_sensitivity" label="Sensitivity: if +/-X%, EPS impact = Y" %}{% /field %}
|
|
706
|
-
|
|
707
|
-
{% field kind="string" id="driver_1_what_breaks" label="What breaks this assumption" %}{% /field %}
|
|
708
|
-
|
|
709
|
-
{% /field-group %}
|
|
710
|
-
|
|
711
|
-
{% field-group id="driver_2" title="Q6.2 Driver Model - Driver 2" %}
|
|
712
|
-
|
|
713
|
-
{% field kind="string" id="driver_2_name" label="Driver name" required=true %}{% /field %}
|
|
714
|
-
|
|
715
|
-
{% field kind="string" id="driver_2_indicators" label="Leading indicators observed" required=true %}{% /field %}
|
|
716
|
-
|
|
717
|
-
{% field kind="string" id="driver_2_assumption" label="Assumption (base)" required=true %}{% /field %}
|
|
718
|
-
|
|
719
|
-
{% field kind="string" id="driver_2_sensitivity" label="Sensitivity" %}{% /field %}
|
|
720
|
-
|
|
721
|
-
{% field kind="string" id="driver_2_what_breaks" label="What breaks this assumption" %}{% /field %}
|
|
722
|
-
|
|
723
|
-
{% /field-group %}
|
|
724
|
-
|
|
725
|
-
{% field-group id="driver_3" title="Q6.3 Driver Model - Driver 3 (optional)" %}
|
|
726
|
-
|
|
727
|
-
{% field kind="string" id="driver_3_name" label="Driver name" %}{% /field %}
|
|
728
|
-
|
|
729
|
-
{% field kind="string" id="driver_3_indicators" label="Leading indicators observed" %}{% /field %}
|
|
730
|
-
|
|
731
|
-
{% field kind="string" id="driver_3_assumption" label="Assumption (base)" %}{% /field %}
|
|
732
|
-
|
|
733
|
-
{% field kind="string" id="driver_3_sensitivity" label="Sensitivity" %}{% /field %}
|
|
734
|
-
|
|
735
|
-
{% field kind="string" id="driver_3_what_breaks" label="What breaks this assumption" %}{% /field %}
|
|
736
|
-
|
|
737
|
-
{% /field-group %}
|
|
738
|
-
|
|
739
|
-
{% field-group id="driver_margin_bridge" title="Q6.4 Margin Bridge" %}
|
|
740
|
-
|
|
741
|
-
{% instructions ref="driver_margin_bridge" %}
|
|
742
|
-
All margin impacts should sum to total margin change.
|
|
743
|
-
{% /instructions %}
|
|
744
|
-
|
|
745
|
-
{% field kind="number" id="margin_mix_bps" label="Mix impact (bps)" %}{% /field %}
|
|
746
|
-
|
|
747
|
-
{% field kind="number" id="margin_pricing_bps" label="Pricing impact (bps)" %}{% /field %}
|
|
748
|
-
|
|
749
|
-
{% field kind="number" id="margin_input_costs_bps" label="Input costs impact (bps)" %}{% /field %}
|
|
750
|
-
|
|
751
|
-
{% field kind="number" id="margin_fx_bps" label="FX impact (bps)" %}{% /field %}
|
|
752
|
-
|
|
753
|
-
{% field kind="number" id="margin_one_offs_bps" label="One-offs impact (bps)" %}{% /field %}
|
|
754
|
-
|
|
755
|
-
{% /field-group %}
|
|
756
|
-
|
|
757
|
-
{% field-group id="scenario_base" title="Q7.1 Scenarios - Base Case" validate=[{id: "sum_to", fields: ["base_probability", "bull_probability", "bear_probability"], target: 100}] %}
|
|
758
|
-
|
|
759
|
-
{% instructions ref="scenario_base" %}
|
|
760
|
-
Probabilities across Base/Bull/Bear should sum to 100%.
|
|
761
|
-
{% /instructions %}
|
|
762
|
-
|
|
763
|
-
{% field kind="number" id="base_probability" label="Probability (%)" required=true min=0 max=100 %}{% /field %}
|
|
764
|
-
|
|
765
|
-
{% field kind="number" id="base_revenue" label="Revenue" required=true %}{% /field %}
|
|
766
|
-
|
|
767
|
-
{% field kind="number" id="base_eps" label="EPS" required=true %}{% /field %}
|
|
768
|
-
|
|
769
|
-
{% field kind="string" id="base_key_kpi" label="Key KPI" %}{% /field %}
|
|
770
|
-
|
|
771
|
-
{% field kind="string" id="base_narrative" label="Narrative (1-2 sentences)" required=true maxLength=250 %}{% /field %}
|
|
772
|
-
|
|
773
|
-
{% field kind="string" id="base_stock_reaction" label="Expected stock reaction and why" required=true %}{% /field %}
|
|
774
|
-
|
|
775
|
-
{% /field-group %}
|
|
776
|
-
|
|
777
|
-
{% field-group id="scenario_bull" title="Q7.2 Scenarios - Bull Case" %}
|
|
778
|
-
|
|
779
|
-
{% field kind="number" id="bull_probability" label="Probability (%)" required=true min=0 max=100 %}{% /field %}
|
|
780
|
-
|
|
781
|
-
{% field kind="number" id="bull_revenue" label="Revenue" required=true %}{% /field %}
|
|
782
|
-
|
|
783
|
-
{% field kind="number" id="bull_eps" label="EPS" required=true %}{% /field %}
|
|
784
|
-
|
|
785
|
-
{% field kind="string" id="bull_key_kpi" label="Key KPI" %}{% /field %}
|
|
786
|
-
|
|
787
|
-
{% field kind="string" id="bull_what_surprises" label="What surprises?" required=true %}{% /field %}
|
|
788
|
-
|
|
789
|
-
{% field kind="string" id="bull_reaction" label="Expected reaction" required=true %}{% /field %}
|
|
790
|
-
|
|
791
|
-
{% /field-group %}
|
|
792
|
-
|
|
793
|
-
{% field-group id="scenario_bear" title="Q7.3 Scenarios - Bear Case" %}
|
|
794
|
-
|
|
795
|
-
{% field kind="number" id="bear_probability" label="Probability (%)" required=true min=0 max=100 %}{% /field %}
|
|
796
|
-
|
|
797
|
-
{% field kind="number" id="bear_revenue" label="Revenue" required=true %}{% /field %}
|
|
798
|
-
|
|
799
|
-
{% field kind="number" id="bear_eps" label="EPS" required=true %}{% /field %}
|
|
800
|
-
|
|
801
|
-
{% field kind="string" id="bear_key_kpi" label="Key KPI" %}{% /field %}
|
|
802
|
-
|
|
803
|
-
{% field kind="string" id="bear_what_breaks" label="What breaks?" required=true %}{% /field %}
|
|
804
|
-
|
|
805
|
-
{% field kind="string" id="bear_reaction" label="Expected reaction" required=true %}{% /field %}
|
|
806
|
-
|
|
807
|
-
{% /field-group %}
|
|
808
|
-
|
|
809
|
-
{% field-group id="scenario_triggers" title="Q7.4 Surprise Triggers" %}
|
|
810
|
-
|
|
811
|
-
{% field kind="string_list" id="surprise_triggers" label="Key surprise triggers (ranked)" required=true minItems=2 %}{% /field %}
|
|
812
|
-
|
|
813
|
-
{% /field-group %}
|
|
814
|
-
|
|
815
|
-
{% field-group id="mgmt_risks" title="Q8. Management and Risks" %}
|
|
816
|
-
|
|
817
|
-
{% field kind="single_select" id="management_tone" label="Management tone last quarter" required=true %}
|
|
818
|
-
- [ ] Confident {% #confident %}
|
|
819
|
-
- [ ] Cautious {% #cautious %}
|
|
820
|
-
- [ ] Defensive {% #defensive %}
|
|
821
|
-
- [ ] Mixed {% #mixed %}
|
|
822
|
-
{% /field %}
|
|
823
|
-
|
|
824
|
-
{% field kind="string_list" id="key_commitments" label="Key commitments/promises to track" required=true minItems=1 %}{% /field %}
|
|
825
|
-
|
|
826
|
-
{% field kind="string_list" id="top_5_risks" label="Top 5 risks into this print (specific, not generic)" required=true minItems=5 maxItems=5 %}{% /field %}
|
|
827
|
-
|
|
828
|
-
{% field kind="string" id="regulatory_legal_watch" label="Regulatory/legal watch items" %}{% /field %}
|
|
829
|
-
|
|
830
|
-
{% field kind="string" id="competitive_threats" label="Competitive threats / share shifts" %}{% /field %}
|
|
831
|
-
|
|
832
|
-
{% field kind="string" id="macro_sensitivities" label="Macro sensitivities (rates, FX, commodities, consumer)" %}{% /field %}
|
|
833
|
-
|
|
834
|
-
{% /field-group %}
|
|
835
|
-
|
|
836
|
-
{% field-group id="valuation" title="Q9. Valuation and Reaction" %}
|
|
837
|
-
|
|
838
|
-
{% field kind="multi_select" id="valuation_metrics" label="Valuation metrics used" required=true minSelections=1 %}
|
|
839
|
-
- [ ] P/E {% #pe %}
|
|
840
|
-
- [ ] EV/EBITDA {% #ev_ebitda %}
|
|
841
|
-
- [ ] EV/Sales {% #ev_sales %}
|
|
842
|
-
- [ ] FCF yield {% #fcf_yield %}
|
|
843
|
-
- [ ] SOTP {% #sotp %}
|
|
844
|
-
{% /field %}
|
|
845
|
-
|
|
846
|
-
{% field kind="string" id="valuation_other" label="Other valuation metric" %}{% /field %}
|
|
847
|
-
|
|
848
|
-
{% field kind="single_select" id="valuation_vs_history" label="Current vs historical range" required=true %}
|
|
849
|
-
- [ ] Cheap {% #cheap %}
|
|
850
|
-
- [ ] Mid {% #mid %}
|
|
851
|
-
- [ ] Expensive {% #expensive %}
|
|
852
|
-
{% /field %}
|
|
853
|
-
|
|
854
|
-
{% field kind="string" id="valuation_why" label="Why (valuation rationale)" required=true minLength=60 %}{% /field %}
|
|
855
|
-
|
|
856
|
-
{% instructions ref="valuation_why" %}
|
|
857
|
-
Required. Explain your valuation assessment. Minimum 15 words.
|
|
858
|
-
{% /instructions %}
|
|
859
|
-
|
|
860
|
-
{% field kind="number" id="avg_earnings_move" label="Avg earnings move last 8 quarters (%)" %}{% /field %}
|
|
861
|
-
|
|
862
|
-
{% field kind="multi_select" id="reaction_drivers" label="What typically drives reaction" %}
|
|
863
|
-
- [ ] Revenue {% #revenue %}
|
|
864
|
-
- [ ] Margin {% #margin %}
|
|
865
|
-
- [ ] Guidance {% #guidance %}
|
|
866
|
-
- [ ] KPI {% #kpi %}
|
|
867
|
-
- [ ] Other {% #other %}
|
|
868
|
-
{% /field %}
|
|
869
|
-
|
|
870
|
-
{% field kind="string" id="reaction_notes" label="Reaction pattern notes" %}{% /field %}
|
|
146
|
+
**Sentiment rationale:**
|
|
871
147
|
|
|
872
|
-
{% field kind="string" id="
|
|
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 %}
|
|
873
150
|
|
|
874
|
-
|
|
151
|
+
**Summary:**
|
|
875
152
|
|
|
876
|
-
{% field kind="string" id="
|
|
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 %}
|
|
877
155
|
|
|
878
|
-
{% /
|
|
156
|
+
{% /group %}
|
|
879
157
|
|
|
880
158
|
{% /form %}
|