kanmi-perf-revenue 1.0.0 → 1.2.0

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.
Files changed (94) hide show
  1. package/README.md +347 -173
  2. package/dist/empirical/ab-testing.d.ts +83 -0
  3. package/dist/empirical/ab-testing.d.ts.map +1 -0
  4. package/dist/empirical/ab-testing.js +281 -0
  5. package/dist/empirical/ab-testing.js.map +1 -0
  6. package/dist/empirical/alerting.d.ts +85 -0
  7. package/dist/empirical/alerting.d.ts.map +1 -0
  8. package/dist/empirical/alerting.js +358 -0
  9. package/dist/empirical/alerting.js.map +1 -0
  10. package/dist/empirical/attribution.d.ts +80 -0
  11. package/dist/empirical/attribution.d.ts.map +1 -0
  12. package/dist/empirical/attribution.js +305 -0
  13. package/dist/empirical/attribution.js.map +1 -0
  14. package/dist/empirical/cohort.d.ts +75 -0
  15. package/dist/empirical/cohort.d.ts.map +1 -0
  16. package/dist/empirical/cohort.js +305 -0
  17. package/dist/empirical/cohort.js.map +1 -0
  18. package/dist/empirical/conversion-curve.d.ts +7 -10
  19. package/dist/empirical/conversion-curve.d.ts.map +1 -1
  20. package/dist/empirical/conversion-curve.js +37 -4
  21. package/dist/empirical/conversion-curve.js.map +1 -1
  22. package/dist/empirical/correlation.d.ts +91 -0
  23. package/dist/empirical/correlation.d.ts.map +1 -0
  24. package/dist/empirical/correlation.js +461 -0
  25. package/dist/empirical/correlation.js.map +1 -0
  26. package/dist/empirical/data-import.d.ts +22 -0
  27. package/dist/empirical/data-import.d.ts.map +1 -1
  28. package/dist/empirical/data-import.js +44 -0
  29. package/dist/empirical/data-import.js.map +1 -1
  30. package/dist/empirical/datadog-product-analytics.d.ts +192 -0
  31. package/dist/empirical/datadog-product-analytics.d.ts.map +1 -0
  32. package/dist/empirical/datadog-product-analytics.js +632 -0
  33. package/dist/empirical/datadog-product-analytics.js.map +1 -0
  34. package/dist/empirical/datadog-session-query.d.ts +32 -0
  35. package/dist/empirical/datadog-session-query.d.ts.map +1 -1
  36. package/dist/empirical/datadog-session-query.js +238 -17
  37. package/dist/empirical/datadog-session-query.js.map +1 -1
  38. package/dist/empirical/engagement-analysis.d.ts +112 -0
  39. package/dist/empirical/engagement-analysis.d.ts.map +1 -0
  40. package/dist/empirical/engagement-analysis.js +354 -0
  41. package/dist/empirical/engagement-analysis.js.map +1 -0
  42. package/dist/empirical/export.d.ts +75 -0
  43. package/dist/empirical/export.d.ts.map +1 -0
  44. package/dist/empirical/export.js +392 -0
  45. package/dist/empirical/export.js.map +1 -0
  46. package/dist/empirical/forecasting.d.ts +80 -0
  47. package/dist/empirical/forecasting.d.ts.map +1 -0
  48. package/dist/empirical/forecasting.js +287 -0
  49. package/dist/empirical/forecasting.js.map +1 -0
  50. package/dist/empirical/funnel.d.ts +66 -0
  51. package/dist/empirical/funnel.d.ts.map +1 -0
  52. package/dist/empirical/funnel.js +293 -0
  53. package/dist/empirical/funnel.js.map +1 -0
  54. package/dist/empirical/history.d.ts +198 -0
  55. package/dist/empirical/history.d.ts.map +1 -0
  56. package/dist/empirical/history.js +396 -0
  57. package/dist/empirical/history.js.map +1 -0
  58. package/dist/empirical/index.d.ts +41 -16
  59. package/dist/empirical/index.d.ts.map +1 -1
  60. package/dist/empirical/index.js +96 -13
  61. package/dist/empirical/index.js.map +1 -1
  62. package/dist/empirical/interactions.d.ts +89 -0
  63. package/dist/empirical/interactions.d.ts.map +1 -0
  64. package/dist/empirical/interactions.js +346 -0
  65. package/dist/empirical/interactions.js.map +1 -0
  66. package/dist/empirical/opportunity-calculator.d.ts +6 -18
  67. package/dist/empirical/opportunity-calculator.d.ts.map +1 -1
  68. package/dist/empirical/opportunity-calculator.js +19 -1
  69. package/dist/empirical/opportunity-calculator.js.map +1 -1
  70. package/dist/empirical/report.d.ts +3 -11
  71. package/dist/empirical/report.d.ts.map +1 -1
  72. package/dist/empirical/report.js +11 -7
  73. package/dist/empirical/report.js.map +1 -1
  74. package/dist/empirical/roi-calculator.d.ts +104 -0
  75. package/dist/empirical/roi-calculator.d.ts.map +1 -0
  76. package/dist/empirical/roi-calculator.js +403 -0
  77. package/dist/empirical/roi-calculator.js.map +1 -0
  78. package/dist/empirical/seasonality.d.ts +80 -0
  79. package/dist/empirical/seasonality.d.ts.map +1 -0
  80. package/dist/empirical/seasonality.js +340 -0
  81. package/dist/empirical/seasonality.js.map +1 -0
  82. package/dist/empirical/segmentation.d.ts +135 -0
  83. package/dist/empirical/segmentation.d.ts.map +1 -0
  84. package/dist/empirical/segmentation.js +379 -0
  85. package/dist/empirical/segmentation.js.map +1 -0
  86. package/dist/empirical/statistics.d.ts +118 -0
  87. package/dist/empirical/statistics.d.ts.map +1 -0
  88. package/dist/empirical/statistics.js +344 -0
  89. package/dist/empirical/statistics.js.map +1 -0
  90. package/dist/empirical/sweet-spot.d.ts +81 -0
  91. package/dist/empirical/sweet-spot.d.ts.map +1 -0
  92. package/dist/empirical/sweet-spot.js +198 -0
  93. package/dist/empirical/sweet-spot.js.map +1 -0
  94. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/empirical/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/empirical/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * ROI Calculator
3
+ *
4
+ * Calculate engineering effort vs expected revenue gain
5
+ * for performance improvements.
6
+ *
7
+ * Key questions answered:
8
+ * - Is this performance fix worth the engineering investment?
9
+ * - What's the break-even point?
10
+ * - Which improvements have the best ROI?
11
+ *
12
+ * @author Kanmi Obasa <i@kanmiobasa.com>
13
+ */
14
+ import type { SessionData } from './datadog-session-query.js';
15
+ import type { OpportunityReport } from './opportunity-calculator.js';
16
+ export interface EngineeringCost {
17
+ /** Hours of engineering effort */
18
+ engineeringHours: number;
19
+ /** Hourly rate (loaded cost) */
20
+ hourlyRate: number;
21
+ /** Additional infrastructure costs */
22
+ infrastructureCost: number;
23
+ /** Opportunity cost (what else could be built) */
24
+ opportunityCostMultiplier: number;
25
+ }
26
+ export interface PerformanceImprovement {
27
+ /** Metric being improved */
28
+ metric: 'lcp' | 'inp' | 'cls' | 'fcp' | 'ttfb';
29
+ /** Current value (e.g., p75 LCP in ms) */
30
+ currentValue: number;
31
+ /** Target value after improvement */
32
+ targetValue: number;
33
+ /** Description of the improvement */
34
+ description: string;
35
+ }
36
+ export interface ROIAnalysis {
37
+ improvement: PerformanceImprovement;
38
+ cost: EngineeringCost;
39
+ benefit: {
40
+ /** Estimated monthly revenue increase */
41
+ monthlyRevenue: number;
42
+ /** Estimated annual revenue increase */
43
+ annualRevenue: number;
44
+ /** Sessions affected per month */
45
+ sessionsAffected: number;
46
+ /** Expected CVR lift */
47
+ expectedCvrLift: number;
48
+ };
49
+ roi: {
50
+ /** Total cost of implementation */
51
+ totalCost: number;
52
+ /** Net present value (12 month) */
53
+ npv12Month: number;
54
+ /** Break-even in days */
55
+ breakEvenDays: number | null;
56
+ /** ROI percentage (12 month) */
57
+ roiPercent: number;
58
+ /** Is it worth doing? */
59
+ recommendation: 'strong_yes' | 'yes' | 'marginal' | 'no';
60
+ /** Explanation */
61
+ rationale: string;
62
+ };
63
+ }
64
+ export interface ROIComparison {
65
+ analyses: ROIAnalysis[];
66
+ ranked: ROIAnalysis[];
67
+ bestBet: ROIAnalysis | null;
68
+ summary: string;
69
+ }
70
+ export declare const DEFAULT_COSTS: EngineeringCost;
71
+ export declare const IMPROVEMENT_TEMPLATES: Record<string, Partial<EngineeringCost>>;
72
+ /**
73
+ * Estimate CVR lift from performance improvement.
74
+ * Uses empirical data when available, falls back to industry benchmarks.
75
+ */
76
+ export declare function estimateCvrLift(improvement: PerformanceImprovement, sessions: SessionData[]): number;
77
+ /**
78
+ * Calculate ROI for a single improvement.
79
+ */
80
+ export declare function calculateROI(improvement: PerformanceImprovement, sessions: SessionData[], cost: EngineeringCost, config?: {
81
+ monthlySessionsMultiplier?: number;
82
+ averageOrderValue?: number;
83
+ discountRate?: number;
84
+ }): ROIAnalysis;
85
+ /**
86
+ * Compare multiple improvement opportunities.
87
+ */
88
+ export declare function compareROI(improvements: PerformanceImprovement[], sessions: SessionData[], costs: EngineeringCost[], config?: {
89
+ monthlySessionsMultiplier?: number;
90
+ averageOrderValue?: number;
91
+ }): ROIComparison;
92
+ /**
93
+ * Quick ROI estimate from opportunity report.
94
+ */
95
+ export declare function estimateROIFromOpportunity(opportunity: OpportunityReport, cost?: EngineeringCost): ROIAnalysis;
96
+ /**
97
+ * Generate markdown report for ROI analysis.
98
+ */
99
+ export declare function generateROIMarkdown(analysis: ROIAnalysis): string;
100
+ /**
101
+ * Generate comparison markdown.
102
+ */
103
+ export declare function generateROIComparisonMarkdown(comparison: ROIComparison): string;
104
+ //# sourceMappingURL=roi-calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roi-calculator.d.ts","sourceRoot":"","sources":["../../src/empirical/roi-calculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,403 @@
1
+ /**
2
+ * ROI Calculator
3
+ *
4
+ * Calculate engineering effort vs expected revenue gain
5
+ * for performance improvements.
6
+ *
7
+ * Key questions answered:
8
+ * - Is this performance fix worth the engineering investment?
9
+ * - What's the break-even point?
10
+ * - Which improvements have the best ROI?
11
+ *
12
+ * @author Kanmi Obasa <i@kanmiobasa.com>
13
+ */
14
+ // =============================================================================
15
+ // DEFAULT COSTS
16
+ // =============================================================================
17
+ export const DEFAULT_COSTS = {
18
+ engineeringHours: 40, // 1 week
19
+ hourlyRate: 150, // $150/hour loaded cost
20
+ infrastructureCost: 0,
21
+ opportunityCostMultiplier: 1.5,
22
+ };
23
+ export const IMPROVEMENT_TEMPLATES = {
24
+ image_optimization: { engineeringHours: 16 },
25
+ cdn_setup: { engineeringHours: 24, infrastructureCost: 500 },
26
+ code_splitting: { engineeringHours: 40 },
27
+ server_upgrade: { engineeringHours: 8, infrastructureCost: 2000 },
28
+ lazy_loading: { engineeringHours: 16 },
29
+ caching_layer: { engineeringHours: 32, infrastructureCost: 200 },
30
+ database_optimization: { engineeringHours: 40 },
31
+ third_party_audit: { engineeringHours: 24 },
32
+ };
33
+ // =============================================================================
34
+ // ROI CALCULATION
35
+ // =============================================================================
36
+ /**
37
+ * Estimate CVR lift from performance improvement.
38
+ * Uses empirical data when available, falls back to industry benchmarks.
39
+ */
40
+ export function estimateCvrLift(improvement, sessions) {
41
+ // Filter sessions with this metric
42
+ const relevantSessions = sessions.filter((s) => {
43
+ switch (improvement.metric) {
44
+ case 'lcp':
45
+ return s.lcp_ms !== null;
46
+ case 'inp':
47
+ return s.inp_ms !== null;
48
+ case 'cls':
49
+ return s.cls !== null;
50
+ case 'fcp':
51
+ return s.fcp_ms !== null;
52
+ case 'ttfb':
53
+ return s.ttfb_ms !== null;
54
+ default:
55
+ return false;
56
+ }
57
+ });
58
+ if (relevantSessions.length < 100) {
59
+ // Not enough data, use industry benchmarks
60
+ return estimateCvrLiftFromBenchmarks(improvement);
61
+ }
62
+ // Empirical estimation based on current data
63
+ const getValue = (s) => {
64
+ switch (improvement.metric) {
65
+ case 'lcp':
66
+ return s.lcp_ms;
67
+ case 'inp':
68
+ return s.inp_ms;
69
+ case 'cls':
70
+ return s.cls;
71
+ case 'fcp':
72
+ return s.fcp_ms;
73
+ case 'ttfb':
74
+ return s.ttfb_ms;
75
+ default:
76
+ return null;
77
+ }
78
+ };
79
+ // Sessions currently in the "to be improved" range
80
+ const affectedSessions = relevantSessions.filter((s) => {
81
+ const value = getValue(s);
82
+ return value !== null && value > improvement.targetValue && value <= improvement.currentValue;
83
+ });
84
+ // Sessions already at target level
85
+ const targetSessions = relevantSessions.filter((s) => {
86
+ const value = getValue(s);
87
+ return value !== null && value <= improvement.targetValue;
88
+ });
89
+ if (affectedSessions.length < 50 || targetSessions.length < 50) {
90
+ return estimateCvrLiftFromBenchmarks(improvement);
91
+ }
92
+ // Calculate actual CVR difference
93
+ const affectedCvr = affectedSessions.filter((s) => s.has_purchase).length / affectedSessions.length;
94
+ const targetCvr = targetSessions.filter((s) => s.has_purchase).length / targetSessions.length;
95
+ // Expected lift if affected sessions move to target performance
96
+ const absoluteLift = targetCvr - affectedCvr;
97
+ // Apply a discount factor (we won't capture 100% of the theoretical lift)
98
+ return absoluteLift * 0.7;
99
+ }
100
+ /**
101
+ * Industry benchmark-based CVR lift estimation.
102
+ */
103
+ function estimateCvrLiftFromBenchmarks(improvement) {
104
+ const delta = improvement.currentValue - improvement.targetValue;
105
+ switch (improvement.metric) {
106
+ case 'lcp':
107
+ // ~0.3% CVR per 100ms improvement
108
+ return (delta / 100) * 0.003;
109
+ case 'inp':
110
+ // ~0.2% CVR per 50ms improvement
111
+ return (delta / 50) * 0.002;
112
+ case 'cls':
113
+ // ~0.5% CVR per 0.1 CLS improvement
114
+ return (delta / 0.1) * 0.005;
115
+ case 'fcp':
116
+ // ~0.2% CVR per 100ms improvement
117
+ return (delta / 100) * 0.002;
118
+ case 'ttfb':
119
+ // ~0.15% CVR per 100ms improvement
120
+ return (delta / 100) * 0.0015;
121
+ default:
122
+ return 0;
123
+ }
124
+ }
125
+ /**
126
+ * Calculate ROI for a single improvement.
127
+ */
128
+ export function calculateROI(improvement, sessions, cost, config = {}) {
129
+ const monthlyMultiplier = config.monthlySessionsMultiplier || 2; // Assume data is ~2 weeks
130
+ const aov = config.averageOrderValue || calculateAOV(sessions);
131
+ const discountRate = config.discountRate || 0.1; // 10% annual discount rate
132
+ // Calculate costs
133
+ const laborCost = cost.engineeringHours * cost.hourlyRate;
134
+ const totalCost = (laborCost + cost.infrastructureCost) * cost.opportunityCostMultiplier;
135
+ // Calculate benefit
136
+ const getValue = (s) => {
137
+ switch (improvement.metric) {
138
+ case 'lcp':
139
+ return s.lcp_ms;
140
+ case 'inp':
141
+ return s.inp_ms;
142
+ case 'cls':
143
+ return s.cls;
144
+ case 'fcp':
145
+ return s.fcp_ms;
146
+ case 'ttfb':
147
+ return s.ttfb_ms;
148
+ default:
149
+ return null;
150
+ }
151
+ };
152
+ // Count sessions that would be affected
153
+ const affectedSessions = sessions.filter((s) => {
154
+ const value = getValue(s);
155
+ return value !== null && value > improvement.targetValue;
156
+ });
157
+ const sessionsAffectedMonthly = affectedSessions.length * monthlyMultiplier;
158
+ const expectedCvrLift = estimateCvrLift(improvement, sessions);
159
+ // Calculate revenue
160
+ const additionalConversions = sessionsAffectedMonthly * expectedCvrLift;
161
+ const monthlyRevenue = additionalConversions * aov;
162
+ const annualRevenue = monthlyRevenue * 12;
163
+ // Calculate NPV (12 month)
164
+ const monthlyDiscountRate = discountRate / 12;
165
+ let npv12Month = -totalCost;
166
+ for (let month = 1; month <= 12; month++) {
167
+ npv12Month += monthlyRevenue / Math.pow(1 + monthlyDiscountRate, month);
168
+ }
169
+ // Break-even
170
+ const breakEvenDays = monthlyRevenue > 0 ? Math.ceil((totalCost / monthlyRevenue) * 30) : null;
171
+ // ROI percentage
172
+ const roiPercent = totalCost > 0 ? ((annualRevenue - totalCost) / totalCost) * 100 : 0;
173
+ // Recommendation
174
+ let recommendation;
175
+ let rationale;
176
+ if (roiPercent >= 300 && breakEvenDays !== null && breakEvenDays <= 30) {
177
+ recommendation = 'strong_yes';
178
+ rationale = `Excellent ROI of ${roiPercent.toFixed(0)}% with ${breakEvenDays} day payback`;
179
+ }
180
+ else if (roiPercent >= 100 && breakEvenDays !== null && breakEvenDays <= 90) {
181
+ recommendation = 'yes';
182
+ rationale = `Good ROI of ${roiPercent.toFixed(0)}% with ${breakEvenDays} day payback`;
183
+ }
184
+ else if (roiPercent >= 50) {
185
+ recommendation = 'marginal';
186
+ rationale = `Marginal ROI of ${roiPercent.toFixed(0)}% - consider prioritizing higher-impact work`;
187
+ }
188
+ else {
189
+ recommendation = 'no';
190
+ rationale = `Low ROI of ${roiPercent.toFixed(0)}% - not recommended without additional benefits`;
191
+ }
192
+ return {
193
+ improvement,
194
+ cost,
195
+ benefit: {
196
+ monthlyRevenue,
197
+ annualRevenue,
198
+ sessionsAffected: sessionsAffectedMonthly,
199
+ expectedCvrLift,
200
+ },
201
+ roi: {
202
+ totalCost,
203
+ npv12Month,
204
+ breakEvenDays,
205
+ roiPercent,
206
+ recommendation,
207
+ rationale,
208
+ },
209
+ };
210
+ }
211
+ /**
212
+ * Compare multiple improvement opportunities.
213
+ */
214
+ export function compareROI(improvements, sessions, costs, config = {}) {
215
+ const analyses = [];
216
+ for (let i = 0; i < improvements.length; i++) {
217
+ const analysis = calculateROI(improvements[i], sessions, costs[i] || DEFAULT_COSTS, config);
218
+ analyses.push(analysis);
219
+ }
220
+ // Rank by ROI
221
+ const ranked = [...analyses].sort((a, b) => b.roi.roiPercent - a.roi.roiPercent);
222
+ // Best bet
223
+ const bestBet = ranked.find((a) => a.roi.recommendation === 'strong_yes' || a.roi.recommendation === 'yes') || null;
224
+ // Summary
225
+ const strongYes = analyses.filter((a) => a.roi.recommendation === 'strong_yes');
226
+ const yes = analyses.filter((a) => a.roi.recommendation === 'yes');
227
+ const no = analyses.filter((a) => a.roi.recommendation === 'no');
228
+ let summary = `${analyses.length} improvements analyzed: `;
229
+ if (strongYes.length > 0) {
230
+ summary += `${strongYes.length} strongly recommended, `;
231
+ }
232
+ if (yes.length > 0) {
233
+ summary += `${yes.length} recommended, `;
234
+ }
235
+ if (no.length > 0) {
236
+ summary += `${no.length} not recommended`;
237
+ }
238
+ return { analyses, ranked, bestBet, summary };
239
+ }
240
+ /**
241
+ * Quick ROI estimate from opportunity report.
242
+ */
243
+ export function estimateROIFromOpportunity(opportunity, cost = DEFAULT_COSTS) {
244
+ // Use the first scenario (usually the recommended target)
245
+ const scenario = opportunity.scenarios[0];
246
+ const improvement = {
247
+ metric: opportunity.metric,
248
+ currentValue: scenario?.target_ms ? scenario.target_ms * 1.5 : 0, // Approximate current
249
+ targetValue: scenario?.target_ms || opportunity.recommendation.target_ms,
250
+ description: opportunity.recommendation.summary,
251
+ };
252
+ // Total cost
253
+ const laborCost = cost.engineeringHours * cost.hourlyRate;
254
+ const totalCost = (laborCost + cost.infrastructureCost) * cost.opportunityCostMultiplier;
255
+ // Use opportunity's calculated revenue from recommendation
256
+ const monthlyRevenue = opportunity.recommendation.monthly_opportunity;
257
+ const annualRevenue = monthlyRevenue * 12;
258
+ // NPV
259
+ const discountRate = 0.1;
260
+ const monthlyDiscountRate = discountRate / 12;
261
+ let npv12Month = -totalCost;
262
+ for (let month = 1; month <= 12; month++) {
263
+ npv12Month += monthlyRevenue / Math.pow(1 + monthlyDiscountRate, month);
264
+ }
265
+ const breakEvenDays = monthlyRevenue > 0 ? Math.ceil((totalCost / monthlyRevenue) * 30) : null;
266
+ const roiPercent = totalCost > 0 ? ((annualRevenue - totalCost) / totalCost) * 100 : 0;
267
+ let recommendation;
268
+ let rationale;
269
+ if (roiPercent >= 300 && breakEvenDays !== null && breakEvenDays <= 30) {
270
+ recommendation = 'strong_yes';
271
+ rationale = `Excellent ROI of ${roiPercent.toFixed(0)}% with ${breakEvenDays} day payback`;
272
+ }
273
+ else if (roiPercent >= 100 && breakEvenDays !== null && breakEvenDays <= 90) {
274
+ recommendation = 'yes';
275
+ rationale = `Good ROI of ${roiPercent.toFixed(0)}% with ${breakEvenDays} day payback`;
276
+ }
277
+ else if (roiPercent >= 50) {
278
+ recommendation = 'marginal';
279
+ rationale = `Marginal ROI of ${roiPercent.toFixed(0)}% - consider prioritizing higher-impact work`;
280
+ }
281
+ else {
282
+ recommendation = 'no';
283
+ rationale = `Low ROI of ${roiPercent.toFixed(0)}% - not recommended without additional benefits`;
284
+ }
285
+ return {
286
+ improvement,
287
+ cost,
288
+ benefit: {
289
+ monthlyRevenue,
290
+ annualRevenue,
291
+ sessionsAffected: scenario?.slow_sessions || 0,
292
+ expectedCvrLift: scenario?.cvr_delta || 0,
293
+ },
294
+ roi: {
295
+ totalCost,
296
+ npv12Month,
297
+ breakEvenDays,
298
+ roiPercent,
299
+ recommendation,
300
+ rationale,
301
+ },
302
+ };
303
+ }
304
+ // =============================================================================
305
+ // REPORT GENERATION
306
+ // =============================================================================
307
+ /**
308
+ * Generate markdown report for ROI analysis.
309
+ */
310
+ export function generateROIMarkdown(analysis) {
311
+ const lines = [];
312
+ lines.push('## ROI Analysis');
313
+ lines.push('');
314
+ lines.push(`### ${analysis.improvement.description}`);
315
+ lines.push('');
316
+ lines.push(`**${analysis.improvement.metric.toUpperCase()}**: ${analysis.improvement.currentValue} → ${analysis.improvement.targetValue}`);
317
+ lines.push('');
318
+ // Cost breakdown
319
+ lines.push('### Cost');
320
+ lines.push('');
321
+ lines.push(`| Item | Amount |`);
322
+ lines.push(`|------|--------|`);
323
+ lines.push(`| Engineering Hours | ${analysis.cost.engineeringHours}h |`);
324
+ lines.push(`| Labor Cost | $${(analysis.cost.engineeringHours * analysis.cost.hourlyRate).toLocaleString()} |`);
325
+ lines.push(`| Infrastructure | $${analysis.cost.infrastructureCost.toLocaleString()} |`);
326
+ lines.push(`| **Total Cost** | **$${analysis.roi.totalCost.toLocaleString()}** |`);
327
+ lines.push('');
328
+ // Benefit
329
+ lines.push('### Expected Benefit');
330
+ lines.push('');
331
+ lines.push(`| Metric | Value |`);
332
+ lines.push(`|--------|-------|`);
333
+ lines.push(`| Sessions Affected | ${analysis.benefit.sessionsAffected.toLocaleString()}/month |`);
334
+ lines.push(`| Expected CVR Lift | ${(analysis.benefit.expectedCvrLift * 100).toFixed(2)}% |`);
335
+ lines.push(`| Monthly Revenue | $${analysis.benefit.monthlyRevenue.toLocaleString()} |`);
336
+ lines.push(`| Annual Revenue | $${analysis.benefit.annualRevenue.toLocaleString()} |`);
337
+ lines.push('');
338
+ // ROI
339
+ lines.push('### ROI Summary');
340
+ lines.push('');
341
+ const recommendationEmoji = analysis.roi.recommendation === 'strong_yes'
342
+ ? '🚀'
343
+ : analysis.roi.recommendation === 'yes'
344
+ ? '✅'
345
+ : analysis.roi.recommendation === 'marginal'
346
+ ? '⚠️'
347
+ : '❌';
348
+ lines.push(`| Metric | Value |`);
349
+ lines.push(`|--------|-------|`);
350
+ lines.push(`| 12-Month ROI | ${analysis.roi.roiPercent.toFixed(0)}% |`);
351
+ lines.push(`| NPV (12 month) | $${analysis.roi.npv12Month.toLocaleString()} |`);
352
+ lines.push(`| Break-even | ${analysis.roi.breakEvenDays ? `${analysis.roi.breakEvenDays} days` : 'N/A'} |`);
353
+ lines.push(`| Recommendation | ${recommendationEmoji} ${analysis.roi.recommendation.replace('_', ' ').toUpperCase()} |`);
354
+ lines.push('');
355
+ lines.push(`**Rationale**: ${analysis.roi.rationale}`);
356
+ lines.push('');
357
+ return lines.join('\n');
358
+ }
359
+ /**
360
+ * Generate comparison markdown.
361
+ */
362
+ export function generateROIComparisonMarkdown(comparison) {
363
+ const lines = [];
364
+ lines.push('## ROI Comparison');
365
+ lines.push('');
366
+ lines.push(comparison.summary);
367
+ lines.push('');
368
+ lines.push('### Ranked Opportunities');
369
+ lines.push('');
370
+ lines.push('| Improvement | Cost | Monthly Rev | ROI | Rec |');
371
+ lines.push('|-------------|------|-------------|-----|-----|');
372
+ for (const analysis of comparison.ranked) {
373
+ const emoji = analysis.roi.recommendation === 'strong_yes'
374
+ ? '🚀'
375
+ : analysis.roi.recommendation === 'yes'
376
+ ? '✅'
377
+ : analysis.roi.recommendation === 'marginal'
378
+ ? '⚠️'
379
+ : '❌';
380
+ lines.push(`| ${analysis.improvement.description.slice(0, 30)} | $${analysis.roi.totalCost.toLocaleString()} | $${analysis.benefit.monthlyRevenue.toLocaleString()} | ${analysis.roi.roiPercent.toFixed(0)}% | ${emoji} |`);
381
+ }
382
+ lines.push('');
383
+ if (comparison.bestBet) {
384
+ lines.push('### Best Bet');
385
+ lines.push('');
386
+ lines.push(`**${comparison.bestBet.improvement.description}**`);
387
+ lines.push('');
388
+ lines.push(comparison.bestBet.roi.rationale);
389
+ lines.push('');
390
+ }
391
+ return lines.join('\n');
392
+ }
393
+ // =============================================================================
394
+ // HELPERS
395
+ // =============================================================================
396
+ function calculateAOV(sessions) {
397
+ const purchaseSessions = sessions.filter((s) => s.has_purchase && s.purchase_value > 0);
398
+ if (purchaseSessions.length === 0)
399
+ return 100; // Default $100
400
+ const totalRevenue = purchaseSessions.reduce((sum, s) => sum + s.purchase_value, 0);
401
+ return totalRevenue / purchaseSessions.length;
402
+ }
403
+ //# sourceMappingURL=roi-calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roi-calculator.js","sourceRoot":"","sources":["../../src/empirical/roi-calculator.ts"],"names":[],"mappings":"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"}