markform 0.1.2 → 0.1.4
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 +97 -42
- package/dist/ai-sdk.d.mts +2 -2
- package/dist/ai-sdk.mjs +5 -5
- package/dist/{apply-BfAGTHMh.mjs → apply-C54EMAJ1.mjs} +383 -26
- package/dist/bin.mjs +6 -6
- package/dist/{cli-B3NVm6zL.mjs → cli-BhWhn6L9.mjs} +456 -141
- package/dist/cli.mjs +6 -6
- package/dist/{coreTypes-BXhhz9Iq.d.mts → coreTypes-cbNTYAcb.d.mts} +1878 -325
- package/dist/{coreTypes-Dful87E0.mjs → coreTypes-pyctKRgc.mjs} +79 -5
- package/dist/index.d.mts +146 -9
- 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-BXRkGFpG.mjs → src-BNh7Cx9P.mjs} +801 -121
- package/docs/markform-apis.md +194 -0
- package/{DOCS.md → docs/markform-reference.md} +111 -50
- package/{SPEC.md → docs/markform-spec.md} +342 -91
- package/examples/celebrity-deep-research/celebrity-deep-research.form.md +196 -141
- package/examples/earnings-analysis/earnings-analysis.form.md +236 -226
- package/examples/movie-research/movie-research-basic.form.md +25 -21
- package/examples/movie-research/movie-research-deep.form.md +74 -62
- package/examples/movie-research/movie-research-minimal.form.md +29 -34
- package/examples/simple/simple-mock-filled.form.md +93 -29
- package/examples/simple/simple-skipped-filled.form.md +91 -29
- package/examples/simple/simple-with-skips.session.yaml +93 -25
- package/examples/simple/simple.form.md +74 -20
- package/examples/simple/simple.session.yaml +98 -25
- package/examples/startup-deep-research/startup-deep-research.form.md +108 -81
- package/examples/startup-research/startup-research-mock-filled.form.md +43 -43
- package/examples/startup-research/startup-research.form.md +24 -24
- package/package.json +18 -27
- package/dist/session-DdAtY2Ni.mjs +0 -4
- package/dist/shared-D7gf27Tr.mjs +0 -3
|
@@ -33,29 +33,29 @@ Complete fresh each quarter.
|
|
|
33
33
|
|
|
34
34
|
{% field-group id="identity_structure" title="1. Identity and Structure" %}
|
|
35
35
|
|
|
36
|
-
{%
|
|
36
|
+
{% field kind="string" id="company_legal_name" label="Company legal name" role="user" required=true %}{% /field %}
|
|
37
37
|
|
|
38
|
-
{%
|
|
38
|
+
{% field kind="string_list" id="tickers" label="Ticker(s)" role="user" required=true minItems=1 %}{% /field %}
|
|
39
39
|
|
|
40
40
|
{% instructions ref="tickers" %}
|
|
41
41
|
List at least one ticker symbol. Add multiple if the company trades on different exchanges.
|
|
42
42
|
{% /instructions %}
|
|
43
43
|
|
|
44
|
-
{%
|
|
44
|
+
{% field kind="string" id="hq_regions" label="HQ / key operating regions" required=true %}{% /field %}
|
|
45
45
|
|
|
46
|
-
{%
|
|
46
|
+
{% field kind="string" id="fiscal_year_end" label="Fiscal year end" role="user" required=true pattern="^(0[1-9]|1[0-2])(-(0[1-9]|[12][0-9]|3[01]))?$|^(January|February|March|April|May|June|July|August|September|October|November|December)$" %}{% /field %}
|
|
47
47
|
|
|
48
48
|
{% instructions ref="fiscal_year_end" %}
|
|
49
49
|
Enter month name (e.g., December) or MM-DD format (e.g., 12-31).
|
|
50
50
|
{% /instructions %}
|
|
51
51
|
|
|
52
|
-
{%
|
|
52
|
+
{% field kind="single_select" id="reporting_cadence" label="Reporting cadence" required=true %}
|
|
53
53
|
- [ ] Yearly {% #yearly %}
|
|
54
54
|
- [ ] Quarterly {% #quarterly %}
|
|
55
55
|
- [ ] Monthly {% #monthly %}
|
|
56
|
-
{% /
|
|
56
|
+
{% /field %}
|
|
57
57
|
|
|
58
|
-
{%
|
|
58
|
+
{% field kind="multi_select" id="business_model_type" label="Business model type" required=true minSelections=1 %}
|
|
59
59
|
- [ ] One-time hardware {% #one_time_hardware %}
|
|
60
60
|
- [ ] Recurring subscription {% #recurring_subscription %}
|
|
61
61
|
- [ ] Usage-based {% #usage_based %}
|
|
@@ -64,21 +64,21 @@ Enter month name (e.g., December) or MM-DD format (e.g., 12-31).
|
|
|
64
64
|
- [ ] Licensing {% #licensing %}
|
|
65
65
|
- [ ] Services / consulting {% #services %}
|
|
66
66
|
- [ ] Financial / credit {% #financial %}
|
|
67
|
-
{% /
|
|
67
|
+
{% /field %}
|
|
68
68
|
|
|
69
69
|
{% instructions ref="business_model_type" %}
|
|
70
70
|
Check all that apply. At least one is required.
|
|
71
71
|
{% /instructions %}
|
|
72
72
|
|
|
73
|
-
{%
|
|
73
|
+
{% field kind="string" id="business_model_other" label="Other business model (if applicable)" %}{% /field %}
|
|
74
74
|
|
|
75
75
|
{% instructions ref="business_model_other" %}
|
|
76
76
|
Describe any other business model types not covered above.
|
|
77
77
|
{% /instructions %}
|
|
78
78
|
|
|
79
|
-
{%
|
|
79
|
+
{% field kind="string_list" id="subsidiaries" label="Subsidiaries / key entities" minItems=0 %}{% /field %}
|
|
80
80
|
|
|
81
|
-
{%
|
|
81
|
+
{% field kind="string" id="company_summary" label="One-paragraph summary (plain English)" required=true validate=[{id: "min_words", min: 100}] %}{% /field %}
|
|
82
82
|
|
|
83
83
|
{% instructions ref="company_summary" %}
|
|
84
84
|
Provide a plain-English summary of what the company does. Minimum 100 words (approximately 400 characters).
|
|
@@ -88,19 +88,19 @@ Provide a plain-English summary of what the company does. Minimum 100 words (app
|
|
|
88
88
|
|
|
89
89
|
{% field-group id="history_evolution" title="2. History and Evolution" %}
|
|
90
90
|
|
|
91
|
-
{%
|
|
91
|
+
{% field kind="string_list" id="timeline_pivots" label="Timeline (key pivots)" required=true minItems=8 maxItems=12 %}{% /field %}
|
|
92
92
|
|
|
93
93
|
{% instructions ref="timeline_pivots" %}
|
|
94
94
|
List 8-12 key pivotal moments in the company's history. One event per line.
|
|
95
95
|
{% /instructions %}
|
|
96
96
|
|
|
97
|
-
{%
|
|
97
|
+
{% field kind="string" id="transformative_acquisitions" label="Transformative acquisitions / divestitures" %}{% /field %}
|
|
98
98
|
|
|
99
|
-
{%
|
|
99
|
+
{% field kind="string" id="leadership_changes" label="Leadership changes that mattered" %}{% /field %}
|
|
100
100
|
|
|
101
|
-
{%
|
|
101
|
+
{% field kind="string" id="past_crises" label="Past crises and responses" %}{% /field %}
|
|
102
102
|
|
|
103
|
-
{%
|
|
103
|
+
{% field kind="string" id="strategic_move_analysis" label="What single strategic move best explains the current model?" required=true validate=[{id: "min_words", min: 50}] %}{% /field %}
|
|
104
104
|
|
|
105
105
|
{% instructions ref="strategic_move_analysis" %}
|
|
106
106
|
Analyst prompt: Explain the strategic move that best explains the current business model. Minimum 50 words.
|
|
@@ -110,29 +110,29 @@ Analyst prompt: Explain the strategic move that best explains the current busine
|
|
|
110
110
|
|
|
111
111
|
{% field-group id="operations_distribution" title="3. Operations and Distribution" %}
|
|
112
112
|
|
|
113
|
-
{%
|
|
113
|
+
{% field kind="string" id="core_operating_activities" label="Core operating activities (R&D, manufacturing, distribution)" required=true %}{% /field %}
|
|
114
114
|
|
|
115
|
-
{%
|
|
115
|
+
{% field kind="string" id="key_locations" label="Key locations (R&D hubs, manufacturing, data centers)" %}{% /field %}
|
|
116
116
|
|
|
117
|
-
{%
|
|
117
|
+
{% field kind="multi_select" id="distribution_model" label="Distribution model" required=true minSelections=1 %}
|
|
118
118
|
- [ ] Direct (online / retail / salesforce) {% #direct %}
|
|
119
119
|
- [ ] Channel / resellers {% #channel %}
|
|
120
120
|
- [ ] Carrier / VARs {% #carrier_vars %}
|
|
121
121
|
- [ ] Marketplace / app store {% #marketplace_appstore %}
|
|
122
122
|
- [ ] OEM / embedded {% #oem_embedded %}
|
|
123
|
-
{% /
|
|
123
|
+
{% /field %}
|
|
124
124
|
|
|
125
|
-
{%
|
|
125
|
+
{% field kind="string" id="distribution_model_other" label="Other distribution model (if applicable)" %}{% /field %}
|
|
126
126
|
|
|
127
|
-
{%
|
|
127
|
+
{% field kind="string" id="direct_indirect_mix" label="Mix of direct vs indirect (if disclosed)" %}{% /field %}
|
|
128
128
|
|
|
129
129
|
{% instructions ref="direct_indirect_mix" %}
|
|
130
130
|
Enter percentages that should sum to 100% (e.g., "Direct: 60%, Indirect: 40%").
|
|
131
131
|
{% /instructions %}
|
|
132
132
|
|
|
133
|
-
{%
|
|
133
|
+
{% field kind="string" id="key_partners" label="Key partners required to deliver the product" %}{% /field %}
|
|
134
134
|
|
|
135
|
-
{%
|
|
135
|
+
{% field kind="string" id="capacity_constraints" label="Capacity constraints / bottlenecks" %}{% /field %}
|
|
136
136
|
|
|
137
137
|
{% /field-group %}
|
|
138
138
|
|
|
@@ -143,39 +143,39 @@ Tie every revenue line to something someone buys. Use "families," not SKUs.
|
|
|
143
143
|
This section ideally uses repeating groups (future feature). For now, model one offering family.
|
|
144
144
|
{% /description %}
|
|
145
145
|
|
|
146
|
-
{%
|
|
146
|
+
{% field kind="string" id="offering_1_name" label="Offering family name" required=true %}{% /field %}
|
|
147
147
|
|
|
148
|
-
{%
|
|
148
|
+
{% field kind="string" id="offering_1_value_prop" label="Value proposition (1 sentence)" required=true maxLength=250 %}{% /field %}
|
|
149
149
|
|
|
150
150
|
{% instructions ref="offering_1_value_prop" %}
|
|
151
151
|
Maximum 50 words. Describe the core value in one sentence.
|
|
152
152
|
{% /instructions %}
|
|
153
153
|
|
|
154
|
-
{%
|
|
154
|
+
{% field kind="single_select" id="offering_1_delivery" label="Delivery type" required=true %}
|
|
155
155
|
- [ ] Physical {% #physical %}
|
|
156
156
|
- [ ] Digital {% #digital %}
|
|
157
157
|
- [ ] Hybrid {% #hybrid %}
|
|
158
|
-
{% /
|
|
158
|
+
{% /field %}
|
|
159
159
|
|
|
160
|
-
{%
|
|
160
|
+
{% field kind="single_select" id="offering_1_revenue_type" label="Revenue type" required=true %}
|
|
161
161
|
- [ ] One-time {% #one_time %}
|
|
162
162
|
- [ ] Subscription {% #subscription %}
|
|
163
163
|
- [ ] Usage-based {% #usage %}
|
|
164
164
|
- [ ] Take-rate {% #take_rate %}
|
|
165
165
|
- [ ] Advertising {% #ads %}
|
|
166
|
-
{% /
|
|
166
|
+
{% /field %}
|
|
167
167
|
|
|
168
|
-
{%
|
|
168
|
+
{% field kind="string_list" id="offering_1_kpis" label="Primary KPIs" required=true minItems=1 maxItems=5 %}{% /field %}
|
|
169
169
|
|
|
170
170
|
{% /field-group %}
|
|
171
171
|
|
|
172
172
|
{% field-group id="offerings_bundles" title="4.2 Offerings - Bundles and Cross-Sell" %}
|
|
173
173
|
|
|
174
|
-
{%
|
|
174
|
+
{% field kind="string" id="what_is_bundled" label="What is bundled?" %}{% /field %}
|
|
175
175
|
|
|
176
|
-
{%
|
|
176
|
+
{% field kind="string" id="attach_paths" label="Attach paths (what gets added after first purchase)" %}{% /field %}
|
|
177
177
|
|
|
178
|
-
{%
|
|
178
|
+
{% field kind="string" id="cannibalization_risks" label="Cannibalization risks" %}{% /field %}
|
|
179
179
|
|
|
180
180
|
{% /field-group %}
|
|
181
181
|
|
|
@@ -185,119 +185,119 @@ Maximum 50 words. Describe the core value in one sentence.
|
|
|
185
185
|
Make "pricing power" concrete.
|
|
186
186
|
{% /description %}
|
|
187
187
|
|
|
188
|
-
{%
|
|
188
|
+
{% field kind="string" id="pricing_offering_name" label="Offering family" required=true %}{% /field %}
|
|
189
189
|
|
|
190
|
-
{%
|
|
190
|
+
{% field kind="string" id="list_price_range" label="List price / typical range" required=true %}{% /field %}
|
|
191
191
|
|
|
192
192
|
{% instructions ref="list_price_range" %}
|
|
193
193
|
Include currency and range (e.g., "$99-$499 USD" or "€50/month").
|
|
194
194
|
{% /instructions %}
|
|
195
195
|
|
|
196
|
-
{%
|
|
196
|
+
{% field kind="multi_select" id="discounting_norms" label="Discounting norms" %}
|
|
197
197
|
- [ ] None {% #none %}
|
|
198
198
|
- [ ] Seasonal {% #seasonal %}
|
|
199
199
|
- [ ] Channel promos {% #channel_promos %}
|
|
200
200
|
- [ ] Enterprise {% #enterprise %}
|
|
201
201
|
- [ ] Bundles {% #bundles %}
|
|
202
|
-
{% /
|
|
202
|
+
{% /field %}
|
|
203
203
|
|
|
204
|
-
{%
|
|
204
|
+
{% field kind="string" id="contract_length" label="Contract length (B2B)" %}{% /field %}
|
|
205
205
|
|
|
206
|
-
{%
|
|
206
|
+
{% field kind="string" id="contract_renewal" label="Renewal terms" %}{% /field %}
|
|
207
207
|
|
|
208
|
-
{%
|
|
208
|
+
{% field kind="string" id="contract_escalators" label="Price escalators" %}{% /field %}
|
|
209
209
|
|
|
210
|
-
{%
|
|
210
|
+
{% field kind="string" id="payer_vs_user" label="Who pays vs who uses" %}{% /field %}
|
|
211
211
|
|
|
212
|
-
{%
|
|
212
|
+
{% field kind="string" id="arpu_asp_drivers" label="ARPU/ASP drivers" %}{% /field %}
|
|
213
213
|
|
|
214
|
-
{%
|
|
214
|
+
{% field kind="string" id="pricing_changes_recent" label="Pricing changes last 12-18 months" %}{% /field %}
|
|
215
215
|
|
|
216
216
|
{% /field-group %}
|
|
217
217
|
|
|
218
218
|
{% field-group id="pricing_margins" title="5.2 Margin and Cost Structure" %}
|
|
219
219
|
|
|
220
|
-
{%
|
|
220
|
+
{% field kind="string" id="primary_cost_drivers" label="Primary cost drivers (COGS, hosting, labor, content, etc.)" required=true %}{% /field %}
|
|
221
221
|
|
|
222
|
-
{%
|
|
222
|
+
{% field kind="string" id="gross_margin_drivers" label="Gross margin drivers (pricing, mix, utilization, scale, FX)" %}{% /field %}
|
|
223
223
|
|
|
224
|
-
{%
|
|
224
|
+
{% field kind="string" id="contribution_margin_framework" label="Contribution margin framework (if applicable)" %}{% /field %}
|
|
225
225
|
|
|
226
|
-
{%
|
|
226
|
+
{% field kind="number" id="cac" label="Customer Acquisition Cost (CAC)" %}{% /field %}
|
|
227
227
|
|
|
228
|
-
{%
|
|
228
|
+
{% field kind="string" id="payback_period" label="Payback period" %}{% /field %}
|
|
229
229
|
|
|
230
|
-
{%
|
|
230
|
+
{% field kind="number" id="ltv" label="Lifetime Value (LTV)" %}{% /field %}
|
|
231
231
|
|
|
232
|
-
{%
|
|
232
|
+
{% field kind="number" id="churn_rate" label="Churn rate (%)" min=0 max=100 %}{% /field %}
|
|
233
233
|
|
|
234
|
-
{%
|
|
234
|
+
{% field kind="string" id="operating_leverage" label="Operating leverage (fixed vs variable costs)" %}{% /field %}
|
|
235
235
|
|
|
236
|
-
{%
|
|
236
|
+
{% field kind="string" id="margin_risks" label="Biggest margin risks" %}{% /field %}
|
|
237
237
|
|
|
238
238
|
{% /field-group %}
|
|
239
239
|
|
|
240
240
|
{% field-group id="customers_segmentation" title="6.1 Customer Segmentation" %}
|
|
241
241
|
|
|
242
|
-
{%
|
|
242
|
+
{% field kind="string" id="segment_1" label="Segment 1 (size, needs, willingness to pay)" required=true %}{% /field %}
|
|
243
243
|
|
|
244
|
-
{%
|
|
244
|
+
{% field kind="string" id="segment_2" label="Segment 2" required=true %}{% /field %}
|
|
245
245
|
|
|
246
|
-
{%
|
|
246
|
+
{% field kind="string" id="segment_3" label="Segment 3" %}{% /field %}
|
|
247
247
|
|
|
248
|
-
{%
|
|
248
|
+
{% field kind="string" id="geography_mix" label="Geography mix" required=true %}{% /field %}
|
|
249
249
|
|
|
250
250
|
{% instructions ref="geography_mix" %}
|
|
251
251
|
Enter percentages that should sum to 100% (e.g., "Americas: 55%, EMEA: 30%, APAC: 15%").
|
|
252
252
|
{% /instructions %}
|
|
253
253
|
|
|
254
|
-
{%
|
|
254
|
+
{% field kind="string" id="buyer_user_influencer" label="Buyer vs user vs influencer" %}{% /field %}
|
|
255
255
|
|
|
256
256
|
{% /field-group %}
|
|
257
257
|
|
|
258
258
|
{% field-group id="customers_buying" title="6.2 Buying Motion" %}
|
|
259
259
|
|
|
260
|
-
{%
|
|
260
|
+
{% field kind="string" id="purchase_trigger" label="What triggers purchase?" required=true %}{% /field %}
|
|
261
261
|
|
|
262
|
-
{%
|
|
262
|
+
{% field kind="string" id="decision_cycle_length" label="Decision cycle length" %}{% /field %}
|
|
263
263
|
|
|
264
|
-
{%
|
|
264
|
+
{% field kind="string" id="replacement_upgrade_cycle" label="Replacement/upgrade cycle (if relevant)" %}{% /field %}
|
|
265
265
|
|
|
266
|
-
{%
|
|
266
|
+
{% field kind="string" id="retention_churn_drivers" label="Retention/churn drivers (if recurring)" %}{% /field %}
|
|
267
267
|
|
|
268
268
|
{% /field-group %}
|
|
269
269
|
|
|
270
270
|
{% field-group id="customers_concentration" title="6.3 Concentration and Notable Customers" %}
|
|
271
271
|
|
|
272
|
-
{%
|
|
272
|
+
{% field kind="number" id="top_customer_concentration" label="Customer concentration risk (top customer %)" min=0 max=100 %}{% /field %}
|
|
273
273
|
|
|
274
|
-
{%
|
|
274
|
+
{% field kind="string" id="notable_customers" label="Notable customers / logos (B2B)" %}{% /field %}
|
|
275
275
|
|
|
276
|
-
{%
|
|
276
|
+
{% field kind="string" id="channel_dependencies" label="Channel partner dependencies" %}{% /field %}
|
|
277
277
|
|
|
278
278
|
{% /field-group %}
|
|
279
279
|
|
|
280
280
|
{% field-group id="market_competition" title="7. Market and Competition" %}
|
|
281
281
|
|
|
282
|
-
{%
|
|
282
|
+
{% field kind="string" id="primary_markets" label="Primary markets competed in" required=true %}{% /field %}
|
|
283
283
|
|
|
284
|
-
{%
|
|
284
|
+
{% field kind="string" id="tam_sam_som" label="TAM/SAM/SOM (and confidence)" %}{% /field %}
|
|
285
285
|
|
|
286
286
|
{% instructions ref="tam_sam_som" %}
|
|
287
287
|
Include currency values with confidence level (e.g., "TAM: $50B (high), SAM: $10B (medium), SOM: $500M (low)").
|
|
288
288
|
{% /instructions %}
|
|
289
289
|
|
|
290
|
-
{%
|
|
290
|
+
{% field kind="string" id="market_growth_cyclicality" label="Market growth rate and cyclicality" %}{% /field %}
|
|
291
291
|
|
|
292
|
-
{%
|
|
292
|
+
{% field kind="string" id="competitors" label="Competitors by category (direct + substitutes)" required=true %}{% /field %}
|
|
293
293
|
|
|
294
|
-
{%
|
|
294
|
+
{% field kind="string_list" id="basis_of_competition" label="Basis of competition (ranked top 5)" required=true minItems=5 maxItems=5 %}{% /field %}
|
|
295
295
|
|
|
296
296
|
{% instructions ref="basis_of_competition" %}
|
|
297
297
|
List exactly 5 competitive factors, ranked by importance. First item is most important.
|
|
298
298
|
{% /instructions %}
|
|
299
299
|
|
|
300
|
-
{%
|
|
300
|
+
{% field kind="multi_select" id="moat_diagnosis" label="Moat diagnosis" %}
|
|
301
301
|
- [ ] Switching costs {% #switching_costs %}
|
|
302
302
|
- [ ] Network effects {% #network_effects %}
|
|
303
303
|
- [ ] Brand {% #brand %}
|
|
@@ -307,77 +307,77 @@ List exactly 5 competitive factors, ranked by importance. First item is most imp
|
|
|
307
307
|
- [ ] Distribution advantage {% #distribution %}
|
|
308
308
|
- [ ] Ecosystem {% #ecosystem %}
|
|
309
309
|
- [ ] Data advantage {% #data %}
|
|
310
|
-
{% /
|
|
310
|
+
{% /field %}
|
|
311
311
|
|
|
312
|
-
{%
|
|
312
|
+
{% field kind="string" id="moat_explanation" label="Moat explanation" validate=[{id: "required_if", when: "moat_diagnosis"}] %}{% /field %}
|
|
313
313
|
|
|
314
314
|
{% instructions ref="moat_explanation" %}
|
|
315
315
|
Required if any moat is checked above. Explain why these moats apply. Minimum 25 words.
|
|
316
316
|
{% /instructions %}
|
|
317
317
|
|
|
318
|
-
{%
|
|
318
|
+
{% field kind="string" id="competitive_risks" label="Competitive risks (price wars, bundling, platform shifts)" %}{% /field %}
|
|
319
319
|
|
|
320
320
|
{% /field-group %}
|
|
321
321
|
|
|
322
322
|
{% field-group id="supply_constraints" title="8.1 Supply Constraints" %}
|
|
323
323
|
|
|
324
|
-
{%
|
|
324
|
+
{% field kind="string" id="key_inputs_suppliers" label="Key inputs / suppliers / single-source dependencies" required=true %}{% /field %}
|
|
325
325
|
|
|
326
|
-
{%
|
|
326
|
+
{% field kind="string" id="manufacturing_model" label="Manufacturing/fulfillment model" %}{% /field %}
|
|
327
327
|
|
|
328
|
-
{%
|
|
328
|
+
{% field kind="string" id="critical_commodities" label="Critical commodities / bottlenecks" %}{% /field %}
|
|
329
329
|
|
|
330
|
-
{%
|
|
330
|
+
{% field kind="string" id="logistics_inventory_risks" label="Logistics and inventory risks" %}{% /field %}
|
|
331
331
|
|
|
332
|
-
{%
|
|
332
|
+
{% field kind="string" id="geopolitical_choke_points" label="Geopolitical choke points" %}{% /field %}
|
|
333
333
|
|
|
334
334
|
{% /field-group %}
|
|
335
335
|
|
|
336
336
|
{% field-group id="macro_sensitivity" title="8.2 Macro Sensitivity" %}
|
|
337
337
|
|
|
338
|
-
{%
|
|
338
|
+
{% field kind="string_list" id="macro_variables" label="Top 5 macro variables that historically mattered" required=true minItems=5 maxItems=5 %}{% /field %}
|
|
339
339
|
|
|
340
340
|
{% instructions ref="macro_variables" %}
|
|
341
341
|
List exactly 5 macro variables, ranked by importance.
|
|
342
342
|
{% /instructions %}
|
|
343
343
|
|
|
344
|
-
{%
|
|
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
345
|
|
|
346
346
|
{% instructions ref="transmission_mechanism" %}
|
|
347
347
|
Minimum 50 words. Explain how each macro variable impacts the business.
|
|
348
348
|
{% /instructions %}
|
|
349
349
|
|
|
350
|
-
{%
|
|
350
|
+
{% field kind="string" id="historical_episodes" label="Historical episodes (recession/inflation/FX/supply shock)" %}{% /field %}
|
|
351
351
|
|
|
352
|
-
{%
|
|
352
|
+
{% field kind="string" id="leading_indicators" label="Leading indicators to monitor pre-earnings" %}{% /field %}
|
|
353
353
|
|
|
354
354
|
{% /field-group %}
|
|
355
355
|
|
|
356
356
|
{% field-group id="financial_history" title="9. Financial History" %}
|
|
357
357
|
|
|
358
|
-
{%
|
|
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
359
|
|
|
360
360
|
{% instructions ref="trend_summary" %}
|
|
361
361
|
Minimum 75 words. Cover revenue, margin, EPS, and free cash flow trends.
|
|
362
362
|
{% /instructions %}
|
|
363
363
|
|
|
364
|
-
{%
|
|
364
|
+
{% field kind="string" id="capital_return_policy" label="Capital return policy (buybacks/dividends)" %}{% /field %}
|
|
365
365
|
|
|
366
|
-
{%
|
|
366
|
+
{% field kind="string" id="major_inflection_points" label="Major inflection points (product cycles, pricing shifts, regulation)" %}{% /field %}
|
|
367
367
|
|
|
368
|
-
{%
|
|
368
|
+
{% field kind="string" id="stock_performance_context" label="Stock performance context (vs index/peers)" %}{% /field %}
|
|
369
369
|
|
|
370
|
-
{%
|
|
370
|
+
{% field kind="string" id="multiples_vs_history" label="Multiples context vs history" %}{% /field %}
|
|
371
371
|
|
|
372
372
|
{% /field-group %}
|
|
373
373
|
|
|
374
374
|
{% field-group id="open_questions_profile" title="10. Open Questions" %}
|
|
375
375
|
|
|
376
|
-
{%
|
|
376
|
+
{% field kind="string_list" id="unanswered_questions" label="Top unanswered questions (ranked by impact)" minItems=0 maxItems=10 %}{% /field %}
|
|
377
377
|
|
|
378
|
-
{%
|
|
378
|
+
{% field kind="string" id="how_to_answer" label="How to answer (data / calls / sources)" %}{% /field %}
|
|
379
379
|
|
|
380
|
-
{%
|
|
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
381
|
|
|
382
382
|
{% instructions ref="deadline" %}
|
|
383
383
|
Enter a date (YYYY-MM-DD format) or descriptive text (e.g., "Before Q2 earnings").
|
|
@@ -403,13 +403,13 @@ This section is period-specific. Complete fresh each quarter.
|
|
|
403
403
|
- **T+1 to T+2:** Post-mortem; update model; document learnings
|
|
404
404
|
{% /instructions %}
|
|
405
405
|
|
|
406
|
-
{%
|
|
406
|
+
{% field kind="string" id="pre_earnings_thesis" label="One-sentence thesis (pre-earnings)" required=true maxLength=250 %}{% /field %}
|
|
407
407
|
|
|
408
408
|
{% instructions ref="pre_earnings_thesis" %}
|
|
409
409
|
Maximum 50 words. State your core thesis before the earnings release.
|
|
410
410
|
{% /instructions %}
|
|
411
411
|
|
|
412
|
-
{%
|
|
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
413
|
|
|
414
414
|
{% /field-group %}
|
|
415
415
|
|
|
@@ -423,13 +423,18 @@ Check what you actually used. Fill the log as you go.
|
|
|
423
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
424
|
{% /instructions %}
|
|
425
425
|
|
|
426
|
-
{%
|
|
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 %}
|
|
427
432
|
|
|
428
433
|
{% /field-group %}
|
|
429
434
|
|
|
430
435
|
{% field-group id="sources_sec" title="Q2.2 SEC / Regulatory Documents" %}
|
|
431
436
|
|
|
432
|
-
{% checkboxes id="sec_docs_reviewed" label="SEC documents reviewed" checkboxMode="simple" %}
|
|
437
|
+
{% field kind="checkboxes" id="sec_docs_reviewed" label="SEC documents reviewed" checkboxMode="simple" %}
|
|
433
438
|
- [ ] 10-K (latest) {% #ten_k %}
|
|
434
439
|
- [ ] 10-Q (latest) {% #ten_q %}
|
|
435
440
|
- [ ] 8-K earnings release (current quarter) {% #eight_k_current %}
|
|
@@ -439,13 +444,13 @@ Maintain a log of sources accessed. Record: Date accessed, Source name, Type/tie
|
|
|
439
444
|
- [ ] Insider trading filings (Forms 3/4/5) {% #insider_filings %}
|
|
440
445
|
- [ ] 13D/13G {% #thirteen_d_g %}
|
|
441
446
|
- [ ] 13F read-through (if relevant) {% #thirteen_f %}
|
|
442
|
-
{% /
|
|
447
|
+
{% /field %}
|
|
443
448
|
|
|
444
449
|
{% /field-group %}
|
|
445
450
|
|
|
446
451
|
{% field-group id="sources_company" title="Q2.3 Company Communications" %}
|
|
447
452
|
|
|
448
|
-
{% checkboxes id="company_comms_reviewed" label="Company communications reviewed" checkboxMode="simple" %}
|
|
453
|
+
{% field kind="checkboxes" id="company_comms_reviewed" label="Company communications reviewed" checkboxMode="simple" %}
|
|
449
454
|
- [ ] Earnings press release {% #earnings_pr %}
|
|
450
455
|
- [ ] Earnings call webcast/transcript {% #earnings_call %}
|
|
451
456
|
- [ ] Prepared remarks + Q&A notes {% #prepared_remarks %}
|
|
@@ -453,13 +458,13 @@ Maintain a log of sources accessed. Record: Date accessed, Source name, Type/tie
|
|
|
453
458
|
- [ ] Investor day materials (last 18 months) {% #investor_day %}
|
|
454
459
|
- [ ] Product announcements / pricing updates {% #product_announcements %}
|
|
455
460
|
- [ ] Guidance updates / pre-announcements {% #guidance_updates %}
|
|
456
|
-
{% /
|
|
461
|
+
{% /field %}
|
|
457
462
|
|
|
458
463
|
{% /field-group %}
|
|
459
464
|
|
|
460
465
|
{% field-group id="sources_external" title="Q2.4 External / Market Sources" %}
|
|
461
466
|
|
|
462
|
-
{% checkboxes id="external_sources_reviewed" label="External sources reviewed" checkboxMode="simple" %}
|
|
467
|
+
{% field kind="checkboxes" id="external_sources_reviewed" label="External sources reviewed" checkboxMode="simple" %}
|
|
463
468
|
- [ ] Sell-side consensus snapshot {% #sellside_consensus %}
|
|
464
469
|
- [ ] Key sell-side notes {% #sellside_notes %}
|
|
465
470
|
- [ ] Relevant news (top 3 links) {% #relevant_news %}
|
|
@@ -468,64 +473,69 @@ Maintain a log of sources accessed. Record: Date accessed, Source name, Type/tie
|
|
|
468
473
|
- [ ] Options market data (implied move/IV/skew) {% #options_data %}
|
|
469
474
|
- [ ] Short interest / borrow / CTB {% #short_interest %}
|
|
470
475
|
- [ ] Alternative data (traffic/app downloads/card spend) {% #alt_data %}
|
|
471
|
-
{% /
|
|
476
|
+
{% /field %}
|
|
472
477
|
|
|
473
|
-
{%
|
|
478
|
+
{% field kind="string" id="sellside_consensus_source" label="Sell-side consensus source" %}{% /field %}
|
|
474
479
|
|
|
475
|
-
{%
|
|
480
|
+
{% field kind="string" id="sellside_analyst_names" label="Key sell-side analyst names" %}{% /field %}
|
|
476
481
|
|
|
477
|
-
{%
|
|
482
|
+
{% field kind="string" id="news_links" label="Relevant news links (top 3)" %}{% /field %}
|
|
478
483
|
|
|
479
|
-
{%
|
|
484
|
+
{% field kind="string" id="industry_data_source" label="Industry data source" %}{% /field %}
|
|
480
485
|
|
|
481
|
-
{%
|
|
486
|
+
{% field kind="string" id="peer_tickers" label="Peer earnings tickers" %}{% /field %}
|
|
482
487
|
|
|
483
|
-
{%
|
|
488
|
+
{% field kind="string" id="options_data_source" label="Options market data source" %}{% /field %}
|
|
484
489
|
|
|
485
|
-
{%
|
|
490
|
+
{% field kind="string" id="short_interest_source" label="Short interest data source" %}{% /field %}
|
|
486
491
|
|
|
487
|
-
{%
|
|
492
|
+
{% field kind="string" id="alt_data_source" label="Alternative data source" %}{% /field %}
|
|
488
493
|
|
|
489
|
-
{%
|
|
494
|
+
{% field kind="string" id="other_sources" label="Other sources used" %}{% /field %}
|
|
490
495
|
|
|
491
496
|
{% /field-group %}
|
|
492
497
|
|
|
493
498
|
{% field-group id="sources_experts" title="Q2.5 Key Experts and Analysts" %}
|
|
494
499
|
|
|
495
|
-
{%
|
|
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 %}
|
|
496
506
|
|
|
497
507
|
{% instructions ref="experts_list" %}
|
|
498
|
-
|
|
508
|
+
Track key experts covering this company with their specialization and track record.
|
|
499
509
|
{% /instructions %}
|
|
500
510
|
|
|
501
511
|
{% /field-group %}
|
|
502
512
|
|
|
503
513
|
{% field-group id="business_snapshot" title="Q3. Business Model Snapshot" %}
|
|
504
514
|
|
|
505
|
-
{%
|
|
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 %}
|
|
506
516
|
|
|
507
517
|
{% instructions ref="how_makes_money" %}
|
|
508
518
|
2-4 sentences; 25-75 words explaining how the company generates revenue.
|
|
509
519
|
{% /instructions %}
|
|
510
520
|
|
|
511
|
-
{%
|
|
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 %}
|
|
512
522
|
|
|
513
523
|
{% instructions ref="revenue_segments" %}
|
|
514
524
|
List each segment with percentage of revenue. Format: "Segment Name: XX%". Percentages should sum to 100%.
|
|
515
525
|
{% /instructions %}
|
|
516
526
|
|
|
517
|
-
{%
|
|
527
|
+
{% field kind="single_select" id="price_changes_recently" label="Price changes recently?" required=true %}
|
|
518
528
|
- [ ] Yes {% #yes %}
|
|
519
529
|
- [ ] No {% #no %}
|
|
520
|
-
{% /
|
|
530
|
+
{% /field %}
|
|
521
531
|
|
|
522
|
-
{%
|
|
532
|
+
{% field kind="string" id="price_change_details" label="Price change details (if Yes)" validate=[{id: "required_if_equals", when: "price_changes_recently", equals: "yes"}] %}{% /field %}
|
|
523
533
|
|
|
524
|
-
{%
|
|
534
|
+
{% field kind="string" id="volume_demand_indicators" label="Volume/demand indicators" %}{% /field %}
|
|
525
535
|
|
|
526
|
-
{%
|
|
536
|
+
{% field kind="string" id="mix_shift_risk" label="Mix shift risk" %}{% /field %}
|
|
527
537
|
|
|
528
|
-
{%
|
|
538
|
+
{% field kind="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"}] %}{% /field %}
|
|
529
539
|
|
|
530
540
|
{% instructions ref="key_kpis_quarterly" %}
|
|
531
541
|
Format: "KPI Name: Why it matters this quarter". 3-8 KPIs required.
|
|
@@ -535,116 +545,116 @@ Format: "KPI Name: Why it matters this quarter". 3-8 KPIs required.
|
|
|
535
545
|
|
|
536
546
|
{% field-group id="quant_income" title="Q4.1 Income Statement" %}
|
|
537
547
|
|
|
538
|
-
{%
|
|
548
|
+
{% field kind="number" id="revenue" label="Revenue" required=true %}{% /field %}
|
|
539
549
|
|
|
540
|
-
{%
|
|
550
|
+
{% field kind="number" id="revenue_yoy_pct" label="Revenue YoY %" %}{% /field %}
|
|
541
551
|
|
|
542
|
-
{%
|
|
552
|
+
{% field kind="number" id="revenue_qoq_pct" label="Revenue QoQ %" %}{% /field %}
|
|
543
553
|
|
|
544
|
-
{%
|
|
554
|
+
{% field kind="number" id="gross_margin_pct" label="Gross margin %" min=0 max=100 %}{% /field %}
|
|
545
555
|
|
|
546
|
-
{%
|
|
556
|
+
{% field kind="number" id="gross_margin_yoy_bps" label="Gross margin YoY (bps)" %}{% /field %}
|
|
547
557
|
|
|
548
|
-
{%
|
|
558
|
+
{% field kind="number" id="gross_margin_qoq_bps" label="Gross margin QoQ (bps)" %}{% /field %}
|
|
549
559
|
|
|
550
|
-
{%
|
|
560
|
+
{% field kind="number" id="op_margin_pct" label="Operating margin %" %}{% /field %}
|
|
551
561
|
|
|
552
|
-
{%
|
|
562
|
+
{% field kind="number" id="eps_diluted" label="Diluted EPS" required=true %}{% /field %}
|
|
553
563
|
|
|
554
|
-
{%
|
|
564
|
+
{% field kind="string" id="key_expense_drivers" label="Key expense drivers (R&D, SG&A)" %}{% /field %}
|
|
555
565
|
|
|
556
|
-
{%
|
|
566
|
+
{% field kind="string" id="one_time_items" label="One-time items / adjustments" %}{% /field %}
|
|
557
567
|
|
|
558
568
|
{% /field-group %}
|
|
559
569
|
|
|
560
570
|
{% field-group id="quant_balance" title="Q4.2 Balance Sheet / Liquidity" %}
|
|
561
571
|
|
|
562
|
-
{%
|
|
572
|
+
{% field kind="number" id="cash_equivalents" label="Cash & equivalents" %}{% /field %}
|
|
563
573
|
|
|
564
|
-
{%
|
|
574
|
+
{% field kind="number" id="net_debt" label="Net debt (negative for net cash)" %}{% /field %}
|
|
565
575
|
|
|
566
|
-
{%
|
|
576
|
+
{% field kind="string" id="working_capital_changes" label="Working capital changes affecting earnings quality" %}{% /field %}
|
|
567
577
|
|
|
568
|
-
{%
|
|
578
|
+
{% field kind="string" id="covenant_refinancing" label="Covenant / refinancing / maturity wall" %}{% /field %}
|
|
569
579
|
|
|
570
580
|
{% /field-group %}
|
|
571
581
|
|
|
572
582
|
{% field-group id="quant_cashflow" title="Q4.3 Cash Flow and Capital Return" %}
|
|
573
583
|
|
|
574
|
-
{%
|
|
584
|
+
{% field kind="number" id="operating_cash_flow" label="Operating cash flow" %}{% /field %}
|
|
575
585
|
|
|
576
|
-
{%
|
|
586
|
+
{% field kind="number" id="free_cash_flow" label="Free cash flow" %}{% /field %}
|
|
577
587
|
|
|
578
|
-
{%
|
|
588
|
+
{% field kind="string" id="fcf_definition" label="FCF definition used" %}{% /field %}
|
|
579
589
|
|
|
580
|
-
{%
|
|
590
|
+
{% field kind="string" id="buybacks" label="Buybacks (amount or share count)" %}{% /field %}
|
|
581
591
|
|
|
582
|
-
{%
|
|
592
|
+
{% field kind="string" id="dividends" label="Dividends (amount or per-share)" %}{% /field %}
|
|
583
593
|
|
|
584
|
-
{%
|
|
594
|
+
{% field kind="string" id="sbc_trend" label="Stock-based comp trend" %}{% /field %}
|
|
585
595
|
|
|
586
596
|
{% /field-group %}
|
|
587
597
|
|
|
588
598
|
{% field-group id="quant_quality" title="Q4.4 Quality Checks" %}
|
|
589
599
|
|
|
590
|
-
{%
|
|
600
|
+
{% field kind="single_select" id="unusual_accruals" label="Unusual accruals / reserve releases?" required=true %}
|
|
591
601
|
- [ ] Yes {% #yes %}
|
|
592
602
|
- [ ] No {% #no %}
|
|
593
|
-
{% /
|
|
603
|
+
{% /field %}
|
|
594
604
|
|
|
595
|
-
{%
|
|
605
|
+
{% field kind="single_select" id="working_capital_pullforward" label="Working capital pull-forward?" required=true %}
|
|
596
606
|
- [ ] Yes {% #yes %}
|
|
597
607
|
- [ ] No {% #no %}
|
|
598
|
-
{% /
|
|
608
|
+
{% /field %}
|
|
599
609
|
|
|
600
|
-
{%
|
|
610
|
+
{% field kind="multi_select" id="margin_change_drivers" label="Margin change drivers" %}
|
|
601
611
|
- [ ] Mix {% #mix %}
|
|
602
612
|
- [ ] Cost {% #cost %}
|
|
603
613
|
- [ ] FX {% #fx %}
|
|
604
614
|
- [ ] Other {% #other %}
|
|
605
|
-
{% /
|
|
615
|
+
{% /field %}
|
|
606
616
|
|
|
607
|
-
{%
|
|
617
|
+
{% field kind="string" id="margin_change_notes" label="Margin change notes" %}{% /field %}
|
|
608
618
|
|
|
609
619
|
{% /field-group %}
|
|
610
620
|
|
|
611
621
|
{% field-group id="expect_guidance" title="Q5.1 Company Guidance" %}
|
|
612
622
|
|
|
613
|
-
{%
|
|
623
|
+
{% field kind="string" id="guidance_revenue" label="Revenue guidance" %}{% /field %}
|
|
614
624
|
|
|
615
|
-
{%
|
|
625
|
+
{% field kind="string" id="guidance_margin" label="Margin guidance" %}{% /field %}
|
|
616
626
|
|
|
617
|
-
{%
|
|
627
|
+
{% field kind="string" id="guidance_eps" label="EPS/Op income guidance" %}{% /field %}
|
|
618
628
|
|
|
619
|
-
{%
|
|
629
|
+
{% field kind="string" id="guidance_kpi" label="KPI guidance" %}{% /field %}
|
|
620
630
|
|
|
621
|
-
{%
|
|
631
|
+
{% field kind="string" id="guidance_qualitative" label="Qualitative guidance" %}{% /field %}
|
|
622
632
|
|
|
623
633
|
{% /field-group %}
|
|
624
634
|
|
|
625
635
|
{% field-group id="expect_consensus" title="Q5.2 Street Consensus" %}
|
|
626
636
|
|
|
627
|
-
{%
|
|
637
|
+
{% field kind="string" id="consensus_as_of" label="Consensus as-of date" required=true pattern="^\\d{4}-\\d{2}-\\d{2}$" %}{% /field %}
|
|
628
638
|
|
|
629
|
-
{%
|
|
639
|
+
{% field kind="string" id="consensus_source" label="Consensus source" required=true %}{% /field %}
|
|
630
640
|
|
|
631
|
-
{%
|
|
641
|
+
{% field kind="number" id="consensus_revenue" label="Consensus revenue" %}{% /field %}
|
|
632
642
|
|
|
633
|
-
{%
|
|
643
|
+
{% field kind="number" id="consensus_eps" label="Consensus EPS" %}{% /field %}
|
|
634
644
|
|
|
635
|
-
{%
|
|
645
|
+
{% field kind="string" id="consensus_kpis" label="Consensus key KPIs" %}{% /field %}
|
|
636
646
|
|
|
637
647
|
{% /field-group %}
|
|
638
648
|
|
|
639
649
|
{% field-group id="expect_estimate" title="Q5.3 Your Estimate (Base)" %}
|
|
640
650
|
|
|
641
|
-
{%
|
|
651
|
+
{% field kind="number" id="estimate_revenue" label="Your revenue estimate" required=true %}{% /field %}
|
|
642
652
|
|
|
643
|
-
{%
|
|
653
|
+
{% field kind="number" id="estimate_eps" label="Your EPS estimate" required=true %}{% /field %}
|
|
644
654
|
|
|
645
|
-
{%
|
|
655
|
+
{% field kind="string" id="estimate_kpis" label="Your KPI estimates" %}{% /field %}
|
|
646
656
|
|
|
647
|
-
{%
|
|
657
|
+
{% field kind="number" id="variance_vs_consensus" label="Variance vs consensus (%)" %}{% /field %}
|
|
648
658
|
|
|
649
659
|
{% /field-group %}
|
|
650
660
|
|
|
@@ -654,11 +664,11 @@ Format: "KPI Name: Why it matters this quarter". 3-8 KPIs required.
|
|
|
654
664
|
Only fill if evidence-based.
|
|
655
665
|
{% /instructions %}
|
|
656
666
|
|
|
657
|
-
{%
|
|
667
|
+
{% field kind="number" id="whisper_revenue" label="Whisper revenue" %}{% /field %}
|
|
658
668
|
|
|
659
|
-
{%
|
|
669
|
+
{% field kind="number" id="whisper_eps" label="Whisper EPS" %}{% /field %}
|
|
660
670
|
|
|
661
|
-
{%
|
|
671
|
+
{% field kind="string" id="whisper_evidence" label="Whisper evidence" validate=[{id: "required_if", when: "whisper_revenue"}, {id: "required_if", when: "whisper_eps"}] %}{% /field %}
|
|
662
672
|
|
|
663
673
|
{% instructions ref="whisper_evidence" %}
|
|
664
674
|
Required if whisper values are provided. Explain the source of whisper estimates.
|
|
@@ -668,15 +678,15 @@ Required if whisper values are provided. Explain the source of whisper estimates
|
|
|
668
678
|
|
|
669
679
|
{% field-group id="expect_market" title="Q5.5 Market-Implied" %}
|
|
670
680
|
|
|
671
|
-
{%
|
|
681
|
+
{% field kind="number" id="options_implied_move" label="Options implied move 1-day (%)" %}{% /field %}
|
|
672
682
|
|
|
673
|
-
{%
|
|
683
|
+
{% field kind="single_select" id="skew_indicates" label="Skew indicates" %}
|
|
674
684
|
- [ ] Upside pay-up {% #upside %}
|
|
675
685
|
- [ ] Downside pay-up {% #downside %}
|
|
676
686
|
- [ ] Neutral {% #neutral %}
|
|
677
|
-
{% /
|
|
687
|
+
{% /field %}
|
|
678
688
|
|
|
679
|
-
{%
|
|
689
|
+
{% field kind="string" id="unusual_oi_flows" label="Unusual open interest / flows" %}{% /field %}
|
|
680
690
|
|
|
681
691
|
{% /field-group %}
|
|
682
692
|
|
|
@@ -686,43 +696,43 @@ Required if whisper values are provided. Explain the source of whisper estimates
|
|
|
686
696
|
Simple, explicit, testable assumptions. At least 2 drivers required.
|
|
687
697
|
{% /description %}
|
|
688
698
|
|
|
689
|
-
{%
|
|
699
|
+
{% field kind="string" id="driver_1_name" label="Driver name" required=true %}{% /field %}
|
|
690
700
|
|
|
691
|
-
{%
|
|
701
|
+
{% field kind="string" id="driver_1_indicators" label="Leading indicators observed (what/when/source)" required=true %}{% /field %}
|
|
692
702
|
|
|
693
|
-
{%
|
|
703
|
+
{% field kind="string" id="driver_1_assumption" label="Assumption (base)" required=true %}{% /field %}
|
|
694
704
|
|
|
695
|
-
{%
|
|
705
|
+
{% field kind="string" id="driver_1_sensitivity" label="Sensitivity: if +/-X%, EPS impact = Y" %}{% /field %}
|
|
696
706
|
|
|
697
|
-
{%
|
|
707
|
+
{% field kind="string" id="driver_1_what_breaks" label="What breaks this assumption" %}{% /field %}
|
|
698
708
|
|
|
699
709
|
{% /field-group %}
|
|
700
710
|
|
|
701
711
|
{% field-group id="driver_2" title="Q6.2 Driver Model - Driver 2" %}
|
|
702
712
|
|
|
703
|
-
{%
|
|
713
|
+
{% field kind="string" id="driver_2_name" label="Driver name" required=true %}{% /field %}
|
|
704
714
|
|
|
705
|
-
{%
|
|
715
|
+
{% field kind="string" id="driver_2_indicators" label="Leading indicators observed" required=true %}{% /field %}
|
|
706
716
|
|
|
707
|
-
{%
|
|
717
|
+
{% field kind="string" id="driver_2_assumption" label="Assumption (base)" required=true %}{% /field %}
|
|
708
718
|
|
|
709
|
-
{%
|
|
719
|
+
{% field kind="string" id="driver_2_sensitivity" label="Sensitivity" %}{% /field %}
|
|
710
720
|
|
|
711
|
-
{%
|
|
721
|
+
{% field kind="string" id="driver_2_what_breaks" label="What breaks this assumption" %}{% /field %}
|
|
712
722
|
|
|
713
723
|
{% /field-group %}
|
|
714
724
|
|
|
715
725
|
{% field-group id="driver_3" title="Q6.3 Driver Model - Driver 3 (optional)" %}
|
|
716
726
|
|
|
717
|
-
{%
|
|
727
|
+
{% field kind="string" id="driver_3_name" label="Driver name" %}{% /field %}
|
|
718
728
|
|
|
719
|
-
{%
|
|
729
|
+
{% field kind="string" id="driver_3_indicators" label="Leading indicators observed" %}{% /field %}
|
|
720
730
|
|
|
721
|
-
{%
|
|
731
|
+
{% field kind="string" id="driver_3_assumption" label="Assumption (base)" %}{% /field %}
|
|
722
732
|
|
|
723
|
-
{%
|
|
733
|
+
{% field kind="string" id="driver_3_sensitivity" label="Sensitivity" %}{% /field %}
|
|
724
734
|
|
|
725
|
-
{%
|
|
735
|
+
{% field kind="string" id="driver_3_what_breaks" label="What breaks this assumption" %}{% /field %}
|
|
726
736
|
|
|
727
737
|
{% /field-group %}
|
|
728
738
|
|
|
@@ -732,15 +742,15 @@ Simple, explicit, testable assumptions. At least 2 drivers required.
|
|
|
732
742
|
All margin impacts should sum to total margin change.
|
|
733
743
|
{% /instructions %}
|
|
734
744
|
|
|
735
|
-
{%
|
|
745
|
+
{% field kind="number" id="margin_mix_bps" label="Mix impact (bps)" %}{% /field %}
|
|
736
746
|
|
|
737
|
-
{%
|
|
747
|
+
{% field kind="number" id="margin_pricing_bps" label="Pricing impact (bps)" %}{% /field %}
|
|
738
748
|
|
|
739
|
-
{%
|
|
749
|
+
{% field kind="number" id="margin_input_costs_bps" label="Input costs impact (bps)" %}{% /field %}
|
|
740
750
|
|
|
741
|
-
{%
|
|
751
|
+
{% field kind="number" id="margin_fx_bps" label="FX impact (bps)" %}{% /field %}
|
|
742
752
|
|
|
743
|
-
{%
|
|
753
|
+
{% field kind="number" id="margin_one_offs_bps" label="One-offs impact (bps)" %}{% /field %}
|
|
744
754
|
|
|
745
755
|
{% /field-group %}
|
|
746
756
|
|
|
@@ -750,120 +760,120 @@ All margin impacts should sum to total margin change.
|
|
|
750
760
|
Probabilities across Base/Bull/Bear should sum to 100%.
|
|
751
761
|
{% /instructions %}
|
|
752
762
|
|
|
753
|
-
{%
|
|
763
|
+
{% field kind="number" id="base_probability" label="Probability (%)" required=true min=0 max=100 %}{% /field %}
|
|
754
764
|
|
|
755
|
-
{%
|
|
765
|
+
{% field kind="number" id="base_revenue" label="Revenue" required=true %}{% /field %}
|
|
756
766
|
|
|
757
|
-
{%
|
|
767
|
+
{% field kind="number" id="base_eps" label="EPS" required=true %}{% /field %}
|
|
758
768
|
|
|
759
|
-
{%
|
|
769
|
+
{% field kind="string" id="base_key_kpi" label="Key KPI" %}{% /field %}
|
|
760
770
|
|
|
761
|
-
{%
|
|
771
|
+
{% field kind="string" id="base_narrative" label="Narrative (1-2 sentences)" required=true maxLength=250 %}{% /field %}
|
|
762
772
|
|
|
763
|
-
{%
|
|
773
|
+
{% field kind="string" id="base_stock_reaction" label="Expected stock reaction and why" required=true %}{% /field %}
|
|
764
774
|
|
|
765
775
|
{% /field-group %}
|
|
766
776
|
|
|
767
777
|
{% field-group id="scenario_bull" title="Q7.2 Scenarios - Bull Case" %}
|
|
768
778
|
|
|
769
|
-
{%
|
|
779
|
+
{% field kind="number" id="bull_probability" label="Probability (%)" required=true min=0 max=100 %}{% /field %}
|
|
770
780
|
|
|
771
|
-
{%
|
|
781
|
+
{% field kind="number" id="bull_revenue" label="Revenue" required=true %}{% /field %}
|
|
772
782
|
|
|
773
|
-
{%
|
|
783
|
+
{% field kind="number" id="bull_eps" label="EPS" required=true %}{% /field %}
|
|
774
784
|
|
|
775
|
-
{%
|
|
785
|
+
{% field kind="string" id="bull_key_kpi" label="Key KPI" %}{% /field %}
|
|
776
786
|
|
|
777
|
-
{%
|
|
787
|
+
{% field kind="string" id="bull_what_surprises" label="What surprises?" required=true %}{% /field %}
|
|
778
788
|
|
|
779
|
-
{%
|
|
789
|
+
{% field kind="string" id="bull_reaction" label="Expected reaction" required=true %}{% /field %}
|
|
780
790
|
|
|
781
791
|
{% /field-group %}
|
|
782
792
|
|
|
783
793
|
{% field-group id="scenario_bear" title="Q7.3 Scenarios - Bear Case" %}
|
|
784
794
|
|
|
785
|
-
{%
|
|
795
|
+
{% field kind="number" id="bear_probability" label="Probability (%)" required=true min=0 max=100 %}{% /field %}
|
|
786
796
|
|
|
787
|
-
{%
|
|
797
|
+
{% field kind="number" id="bear_revenue" label="Revenue" required=true %}{% /field %}
|
|
788
798
|
|
|
789
|
-
{%
|
|
799
|
+
{% field kind="number" id="bear_eps" label="EPS" required=true %}{% /field %}
|
|
790
800
|
|
|
791
|
-
{%
|
|
801
|
+
{% field kind="string" id="bear_key_kpi" label="Key KPI" %}{% /field %}
|
|
792
802
|
|
|
793
|
-
{%
|
|
803
|
+
{% field kind="string" id="bear_what_breaks" label="What breaks?" required=true %}{% /field %}
|
|
794
804
|
|
|
795
|
-
{%
|
|
805
|
+
{% field kind="string" id="bear_reaction" label="Expected reaction" required=true %}{% /field %}
|
|
796
806
|
|
|
797
807
|
{% /field-group %}
|
|
798
808
|
|
|
799
809
|
{% field-group id="scenario_triggers" title="Q7.4 Surprise Triggers" %}
|
|
800
810
|
|
|
801
|
-
{%
|
|
811
|
+
{% field kind="string_list" id="surprise_triggers" label="Key surprise triggers (ranked)" required=true minItems=2 %}{% /field %}
|
|
802
812
|
|
|
803
813
|
{% /field-group %}
|
|
804
814
|
|
|
805
815
|
{% field-group id="mgmt_risks" title="Q8. Management and Risks" %}
|
|
806
816
|
|
|
807
|
-
{%
|
|
817
|
+
{% field kind="single_select" id="management_tone" label="Management tone last quarter" required=true %}
|
|
808
818
|
- [ ] Confident {% #confident %}
|
|
809
819
|
- [ ] Cautious {% #cautious %}
|
|
810
820
|
- [ ] Defensive {% #defensive %}
|
|
811
821
|
- [ ] Mixed {% #mixed %}
|
|
812
|
-
{% /
|
|
822
|
+
{% /field %}
|
|
813
823
|
|
|
814
|
-
{%
|
|
824
|
+
{% field kind="string_list" id="key_commitments" label="Key commitments/promises to track" required=true minItems=1 %}{% /field %}
|
|
815
825
|
|
|
816
|
-
{%
|
|
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 %}
|
|
817
827
|
|
|
818
|
-
{%
|
|
828
|
+
{% field kind="string" id="regulatory_legal_watch" label="Regulatory/legal watch items" %}{% /field %}
|
|
819
829
|
|
|
820
|
-
{%
|
|
830
|
+
{% field kind="string" id="competitive_threats" label="Competitive threats / share shifts" %}{% /field %}
|
|
821
831
|
|
|
822
|
-
{%
|
|
832
|
+
{% field kind="string" id="macro_sensitivities" label="Macro sensitivities (rates, FX, commodities, consumer)" %}{% /field %}
|
|
823
833
|
|
|
824
834
|
{% /field-group %}
|
|
825
835
|
|
|
826
836
|
{% field-group id="valuation" title="Q9. Valuation and Reaction" %}
|
|
827
837
|
|
|
828
|
-
{%
|
|
838
|
+
{% field kind="multi_select" id="valuation_metrics" label="Valuation metrics used" required=true minSelections=1 %}
|
|
829
839
|
- [ ] P/E {% #pe %}
|
|
830
840
|
- [ ] EV/EBITDA {% #ev_ebitda %}
|
|
831
841
|
- [ ] EV/Sales {% #ev_sales %}
|
|
832
842
|
- [ ] FCF yield {% #fcf_yield %}
|
|
833
843
|
- [ ] SOTP {% #sotp %}
|
|
834
|
-
{% /
|
|
844
|
+
{% /field %}
|
|
835
845
|
|
|
836
|
-
{%
|
|
846
|
+
{% field kind="string" id="valuation_other" label="Other valuation metric" %}{% /field %}
|
|
837
847
|
|
|
838
|
-
{%
|
|
848
|
+
{% field kind="single_select" id="valuation_vs_history" label="Current vs historical range" required=true %}
|
|
839
849
|
- [ ] Cheap {% #cheap %}
|
|
840
850
|
- [ ] Mid {% #mid %}
|
|
841
851
|
- [ ] Expensive {% #expensive %}
|
|
842
|
-
{% /
|
|
852
|
+
{% /field %}
|
|
843
853
|
|
|
844
|
-
{%
|
|
854
|
+
{% field kind="string" id="valuation_why" label="Why (valuation rationale)" required=true minLength=60 %}{% /field %}
|
|
845
855
|
|
|
846
856
|
{% instructions ref="valuation_why" %}
|
|
847
857
|
Required. Explain your valuation assessment. Minimum 15 words.
|
|
848
858
|
{% /instructions %}
|
|
849
859
|
|
|
850
|
-
{%
|
|
860
|
+
{% field kind="number" id="avg_earnings_move" label="Avg earnings move last 8 quarters (%)" %}{% /field %}
|
|
851
861
|
|
|
852
|
-
{%
|
|
862
|
+
{% field kind="multi_select" id="reaction_drivers" label="What typically drives reaction" %}
|
|
853
863
|
- [ ] Revenue {% #revenue %}
|
|
854
864
|
- [ ] Margin {% #margin %}
|
|
855
865
|
- [ ] Guidance {% #guidance %}
|
|
856
866
|
- [ ] KPI {% #kpi %}
|
|
857
867
|
- [ ] Other {% #other %}
|
|
858
|
-
{% /
|
|
868
|
+
{% /field %}
|
|
859
869
|
|
|
860
|
-
{%
|
|
870
|
+
{% field kind="string" id="reaction_notes" label="Reaction pattern notes" %}{% /field %}
|
|
861
871
|
|
|
862
|
-
{%
|
|
872
|
+
{% field kind="string" id="short_interest_trend" label="Short interest trend" %}{% /field %}
|
|
863
873
|
|
|
864
|
-
{%
|
|
874
|
+
{% field kind="string" id="flow_sentiment" label="Flow / sentiment" %}{% /field %}
|
|
865
875
|
|
|
866
|
-
{%
|
|
876
|
+
{% field kind="string" id="crowded_factor" label="Crowded factor exposure" %}{% /field %}
|
|
867
877
|
|
|
868
878
|
{% /field-group %}
|
|
869
879
|
|