@org.ai/examples 0.0.1

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 (40) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/LICENSE +21 -0
  3. package/README.md +147 -0
  4. package/api-business/index.ts +1179 -0
  5. package/directory/index.ts +1118 -0
  6. package/dist/api-business/index.d.ts +221 -0
  7. package/dist/api-business/index.d.ts.map +1 -0
  8. package/dist/api-business/index.js +1132 -0
  9. package/dist/api-business/index.js.map +1 -0
  10. package/dist/directory/index.d.ts +202 -0
  11. package/dist/directory/index.d.ts.map +1 -0
  12. package/dist/directory/index.js +1073 -0
  13. package/dist/directory/index.js.map +1 -0
  14. package/dist/index.d.ts +75 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +127 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/marketplace/index.d.ts +242 -0
  19. package/dist/marketplace/index.d.ts.map +1 -0
  20. package/dist/marketplace/index.js +1249 -0
  21. package/dist/marketplace/index.js.map +1 -0
  22. package/dist/saas/index.d.ts +151 -0
  23. package/dist/saas/index.d.ts.map +1 -0
  24. package/dist/saas/index.js +1142 -0
  25. package/dist/saas/index.js.map +1 -0
  26. package/dist/startup-studio/index.d.ts +285 -0
  27. package/dist/startup-studio/index.d.ts.map +1 -0
  28. package/dist/startup-studio/index.js +1252 -0
  29. package/dist/startup-studio/index.js.map +1 -0
  30. package/dist/vc-firm/index.d.ts +248 -0
  31. package/dist/vc-firm/index.d.ts.map +1 -0
  32. package/dist/vc-firm/index.js +1335 -0
  33. package/dist/vc-firm/index.js.map +1 -0
  34. package/index.ts +151 -0
  35. package/marketplace/index.ts +1295 -0
  36. package/package.json +58 -0
  37. package/saas/index.ts +1188 -0
  38. package/startup-studio/index.ts +1324 -0
  39. package/tsconfig.json +12 -0
  40. package/vc-firm/index.ts +1430 -0
@@ -0,0 +1,1430 @@
1
+ /**
2
+ * VC Firm Business Example
3
+ *
4
+ * A complete example of a venture capital firm modeled using primitives.org.ai
5
+ * Think: a16z, Sequoia, Benchmark, Accel, Index Ventures
6
+ *
7
+ * @example Catalyst Ventures - An early-stage enterprise VC firm
8
+ * @packageDocumentation
9
+ */
10
+
11
+ /**
12
+ * NOTE: These examples demonstrate the DESIRED API shape for business-as-code.
13
+ * Some types may not exist yet in the actual package. The examples serve as
14
+ * documentation and specification for the ideal primitives API.
15
+ */
16
+
17
+ // Use any for flexibility - these examples define the ideal API shape
18
+ const Business = (def: any) => def
19
+ const Product = (def: any) => def
20
+ const Service = (def: any) => def
21
+ const Goals = (defs: any[]) => defs
22
+ const Vision = (def: any) => def
23
+ const kpis = (defs: any[]) => defs
24
+ const okrs = (defs: any[]) => defs
25
+ const financials = (def: any) => def
26
+ const Process = (def: any) => def
27
+ const Workflow = (def: any) => def
28
+ const createBusinessRole = (def: any) => def
29
+
30
+ // Re-export Organization type placeholder
31
+ export interface Organization {
32
+ id: string
33
+ name: string
34
+ settings?: any
35
+ departments?: any[]
36
+ teams?: any[]
37
+ roles?: any[]
38
+ approvalChains?: any[]
39
+ routingRules?: any[]
40
+ }
41
+
42
+ // $ helper placeholder
43
+ const $ = {
44
+ format: (n: number) => `$${n.toLocaleString()}`,
45
+ growth: (current: number, previous: number) => ((current - previous) / previous * 100).toFixed(1),
46
+ margin: (revenue: number, cost: number) => ((revenue - cost) / revenue * 100).toFixed(1),
47
+ }
48
+
49
+ // =============================================================================
50
+ // 1. BUSINESS DEFINITION
51
+ // =============================================================================
52
+
53
+ /**
54
+ * Catalyst Ventures - Early-Stage Enterprise VC
55
+ */
56
+ export const CatalystVenturesBusiness = Business({
57
+ name: 'Catalyst Ventures',
58
+ mission: 'Back exceptional founders building the future of enterprise software',
59
+ values: ['Founder First', 'Long-Term Thinking', 'Operational Excellence', 'Integrity'],
60
+ industry: 'Venture Capital',
61
+ founded: new Date('2015-03-01'),
62
+ stage: 'established',
63
+ structure: {
64
+ departments: [
65
+ {
66
+ name: 'Investment Team',
67
+ headcount: 12,
68
+ budget: 3500000,
69
+ teams: [
70
+ { name: 'Partners', headcount: 4, focus: 'Investment decisions' },
71
+ { name: 'Principals', headcount: 4, focus: 'Deal sourcing & diligence' },
72
+ { name: 'Associates', headcount: 4, focus: 'Research & support' },
73
+ ],
74
+ },
75
+ {
76
+ name: 'Platform',
77
+ headcount: 8,
78
+ budget: 1500000,
79
+ teams: [
80
+ { name: 'Talent', headcount: 3, focus: 'Portfolio recruiting' },
81
+ { name: 'GTM', headcount: 2, focus: 'Sales & marketing support' },
82
+ { name: 'Technical', headcount: 2, focus: 'Technical advisory' },
83
+ { name: 'Marketing', headcount: 1, focus: 'Brand & content' },
84
+ ],
85
+ },
86
+ {
87
+ name: 'Operations',
88
+ headcount: 5,
89
+ budget: 800000,
90
+ teams: [
91
+ { name: 'Finance', headcount: 2, focus: 'Fund accounting' },
92
+ { name: 'Legal', headcount: 1, focus: 'Legal & compliance' },
93
+ { name: 'IR', headcount: 2, focus: 'LP relations' },
94
+ ],
95
+ },
96
+ ],
97
+ },
98
+ })
99
+
100
+ // =============================================================================
101
+ // 2. VISION & GOALS
102
+ // =============================================================================
103
+
104
+ export const CatalystVision = Vision({
105
+ statement: 'Be the most founder-friendly firm backing category-defining enterprise companies',
106
+ timeHorizon: '2030',
107
+ pillars: [
108
+ 'Founder Partnership',
109
+ 'Platform Value',
110
+ 'Investment Returns',
111
+ 'Thought Leadership',
112
+ ],
113
+ successIndicators: [
114
+ { name: 'AUM', target: 2000000000, unit: 'USD' },
115
+ { name: 'Unicorn Portfolio Companies', target: 15 },
116
+ { name: 'Net IRR', target: 30, unit: '%' },
117
+ { name: 'Founder NPS', target: 90 },
118
+ ],
119
+ })
120
+
121
+ export const CatalystGoals = Goals([
122
+ {
123
+ name: 'Close Fund V ($500M)',
124
+ category: 'financial',
125
+ status: 'in-progress',
126
+ progress: 70,
127
+ dueDate: new Date('2024-06-30'),
128
+ owner: 'Managing Partner',
129
+ },
130
+ {
131
+ name: 'Deploy Fund IV',
132
+ category: 'operational',
133
+ status: 'in-progress',
134
+ progress: 60,
135
+ dueDate: new Date('2024-12-31'),
136
+ owner: 'Investment Team',
137
+ },
138
+ {
139
+ name: '3 IPO/M&A Exits',
140
+ category: 'strategic',
141
+ status: 'in-progress',
142
+ progress: 33,
143
+ dueDate: new Date('2024-12-31'),
144
+ owner: 'Managing Partner',
145
+ },
146
+ {
147
+ name: 'Launch AI/ML Thesis',
148
+ category: 'strategic',
149
+ status: 'in-progress',
150
+ progress: 50,
151
+ dueDate: new Date('2024-03-31'),
152
+ owner: 'Partner - AI',
153
+ },
154
+ {
155
+ name: 'Expand Platform Team',
156
+ category: 'operational',
157
+ status: 'in-progress',
158
+ progress: 40,
159
+ dueDate: new Date('2024-06-30'),
160
+ owner: 'Head of Platform',
161
+ },
162
+ ])
163
+
164
+ // =============================================================================
165
+ // 3. FUND STRUCTURE
166
+ // =============================================================================
167
+
168
+ export interface Fund {
169
+ id: string
170
+ name: string
171
+ vintage: number
172
+ size: number
173
+ deployed: number
174
+ reserved: number // For follow-ons
175
+ status: 'fundraising' | 'investing' | 'harvesting' | 'closed'
176
+ strategy: string
177
+ metrics?: {
178
+ tvpi?: number
179
+ dpi?: number
180
+ irr?: number
181
+ moic?: number
182
+ }
183
+ }
184
+
185
+ export const Funds: Fund[] = [
186
+ {
187
+ id: 'fund-i',
188
+ name: 'Catalyst Ventures I',
189
+ vintage: 2015,
190
+ size: 75000000,
191
+ deployed: 75000000,
192
+ reserved: 0,
193
+ status: 'harvesting',
194
+ strategy: 'Seed & Series A Enterprise',
195
+ metrics: { tvpi: 4.2, dpi: 2.8, irr: 38, moic: 4.2 },
196
+ },
197
+ {
198
+ id: 'fund-ii',
199
+ name: 'Catalyst Ventures II',
200
+ vintage: 2017,
201
+ size: 150000000,
202
+ deployed: 150000000,
203
+ reserved: 0,
204
+ status: 'harvesting',
205
+ strategy: 'Seed & Series A Enterprise',
206
+ metrics: { tvpi: 3.5, dpi: 1.5, irr: 32, moic: 3.5 },
207
+ },
208
+ {
209
+ id: 'fund-iii',
210
+ name: 'Catalyst Ventures III',
211
+ vintage: 2019,
212
+ size: 250000000,
213
+ deployed: 225000000,
214
+ reserved: 25000000,
215
+ status: 'investing',
216
+ strategy: 'Seed & Series A Enterprise',
217
+ metrics: { tvpi: 2.8, dpi: 0.5, irr: 28 },
218
+ },
219
+ {
220
+ id: 'fund-iv',
221
+ name: 'Catalyst Ventures IV',
222
+ vintage: 2022,
223
+ size: 400000000,
224
+ deployed: 180000000,
225
+ reserved: 100000000,
226
+ status: 'investing',
227
+ strategy: 'Seed to Series B Enterprise',
228
+ metrics: { tvpi: 1.4, dpi: 0, irr: 0 },
229
+ },
230
+ {
231
+ id: 'fund-v',
232
+ name: 'Catalyst Ventures V',
233
+ vintage: 2024,
234
+ size: 500000000,
235
+ deployed: 0,
236
+ reserved: 150000000,
237
+ status: 'fundraising',
238
+ strategy: 'Seed to Series B Enterprise + AI/ML',
239
+ },
240
+ {
241
+ id: 'growth-i',
242
+ name: 'Catalyst Growth I',
243
+ vintage: 2021,
244
+ size: 300000000,
245
+ deployed: 240000000,
246
+ reserved: 60000000,
247
+ status: 'investing',
248
+ strategy: 'Series B-D Growth',
249
+ metrics: { tvpi: 1.6, dpi: 0.2, irr: 22 },
250
+ },
251
+ ]
252
+
253
+ export const TotalAUM = Funds.reduce((sum, f) => sum + f.size, 0)
254
+
255
+ // =============================================================================
256
+ // 4. PORTFOLIO COMPANIES
257
+ // =============================================================================
258
+
259
+ export interface PortfolioCompany {
260
+ id: string
261
+ name: string
262
+ description: string
263
+ sector: string
264
+ stage: 'seed' | 'series-a' | 'series-b' | 'series-c' | 'growth' | 'pre-ipo' | 'public' | 'acquired'
265
+ fundId: string
266
+ initialInvestment: Date
267
+ invested: number
268
+ ownership: number // %
269
+ currentValuation?: number
270
+ markValue?: number
271
+ status: 'active' | 'exited' | 'written-off'
272
+ board?: boolean
273
+ leadInvestor?: boolean
274
+ metrics?: {
275
+ arr?: number
276
+ growth?: number // %
277
+ employees?: number
278
+ }
279
+ }
280
+
281
+ export const Portfolio: PortfolioCompany[] = [
282
+ {
283
+ id: 'datastream',
284
+ name: 'DataStream',
285
+ description: 'Real-time data infrastructure',
286
+ sector: 'Data Infrastructure',
287
+ stage: 'pre-ipo',
288
+ fundId: 'fund-i',
289
+ initialInvestment: new Date('2016-03-15'),
290
+ invested: 8000000,
291
+ ownership: 12,
292
+ currentValuation: 2500000000,
293
+ markValue: 300000000,
294
+ status: 'active',
295
+ board: true,
296
+ leadInvestor: true,
297
+ metrics: { arr: 180000000, growth: 45, employees: 800 },
298
+ },
299
+ {
300
+ id: 'securecloud',
301
+ name: 'SecureCloud',
302
+ description: 'Cloud security platform',
303
+ sector: 'Security',
304
+ stage: 'public',
305
+ fundId: 'fund-i',
306
+ initialInvestment: new Date('2015-09-01'),
307
+ invested: 5000000,
308
+ ownership: 0, // Exited
309
+ status: 'exited',
310
+ board: true,
311
+ leadInvestor: true,
312
+ },
313
+ {
314
+ id: 'aiops',
315
+ name: 'AIOps',
316
+ description: 'AI-powered IT operations',
317
+ sector: 'DevOps',
318
+ stage: 'series-c',
319
+ fundId: 'fund-ii',
320
+ initialInvestment: new Date('2018-06-01'),
321
+ invested: 15000000,
322
+ ownership: 15,
323
+ currentValuation: 800000000,
324
+ markValue: 120000000,
325
+ status: 'active',
326
+ board: true,
327
+ leadInvestor: true,
328
+ metrics: { arr: 65000000, growth: 55, employees: 350 },
329
+ },
330
+ {
331
+ id: 'complyhq',
332
+ name: 'ComplyHQ',
333
+ description: 'Compliance automation',
334
+ sector: 'RegTech',
335
+ stage: 'series-b',
336
+ fundId: 'fund-iii',
337
+ initialInvestment: new Date('2020-02-15'),
338
+ invested: 20000000,
339
+ ownership: 18,
340
+ currentValuation: 400000000,
341
+ markValue: 72000000,
342
+ status: 'active',
343
+ board: true,
344
+ leadInvestor: true,
345
+ metrics: { arr: 32000000, growth: 80, employees: 180 },
346
+ },
347
+ {
348
+ id: 'devflow',
349
+ name: 'DevFlow',
350
+ description: 'Developer productivity platform',
351
+ sector: 'Developer Tools',
352
+ stage: 'series-a',
353
+ fundId: 'fund-iv',
354
+ initialInvestment: new Date('2022-09-01'),
355
+ invested: 12000000,
356
+ ownership: 20,
357
+ currentValuation: 120000000,
358
+ markValue: 24000000,
359
+ status: 'active',
360
+ board: true,
361
+ leadInvestor: true,
362
+ metrics: { arr: 8000000, growth: 120, employees: 45 },
363
+ },
364
+ {
365
+ id: 'mlplatform',
366
+ name: 'MLPlatform',
367
+ description: 'Enterprise ML infrastructure',
368
+ sector: 'AI/ML',
369
+ stage: 'seed',
370
+ fundId: 'fund-iv',
371
+ initialInvestment: new Date('2023-06-15'),
372
+ invested: 4000000,
373
+ ownership: 15,
374
+ currentValuation: 40000000,
375
+ markValue: 6000000,
376
+ status: 'active',
377
+ board: false,
378
+ leadInvestor: true,
379
+ metrics: { arr: 500000, growth: 200, employees: 12 },
380
+ },
381
+ ]
382
+
383
+ // =============================================================================
384
+ // 5. SERVICES (Platform)
385
+ // =============================================================================
386
+
387
+ export const PlatformServices = {
388
+ talent: Service({
389
+ name: 'Talent Network',
390
+ description: 'Executive recruiting and team building support',
391
+ pricingModel: 'free', // Included for portfolio
392
+ deliverables: [
393
+ 'Executive search support',
394
+ 'Candidate pipeline',
395
+ 'Interview process design',
396
+ 'Compensation benchmarking',
397
+ 'Reference checks',
398
+ ],
399
+ }),
400
+ gtm: Service({
401
+ name: 'GTM Acceleration',
402
+ description: 'Sales and marketing support',
403
+ pricingModel: 'free',
404
+ deliverables: [
405
+ 'Sales playbook development',
406
+ 'Customer introductions',
407
+ 'Marketing strategy',
408
+ 'Pricing optimization',
409
+ 'Partnership introductions',
410
+ ],
411
+ }),
412
+ technical: Service({
413
+ name: 'Technical Advisory',
414
+ description: 'Technical strategy and architecture review',
415
+ pricingModel: 'free',
416
+ deliverables: [
417
+ 'Architecture review',
418
+ 'Technology strategy',
419
+ 'Security assessment',
420
+ 'Scalability planning',
421
+ 'Tech due diligence support',
422
+ ],
423
+ }),
424
+ ops: Service({
425
+ name: 'Operational Excellence',
426
+ description: 'Finance, legal, and operational support',
427
+ pricingModel: 'free',
428
+ deliverables: [
429
+ 'CFO/finance support',
430
+ 'Legal introductions',
431
+ 'Board governance',
432
+ 'Fundraising preparation',
433
+ 'M&A support',
434
+ ],
435
+ }),
436
+ }
437
+
438
+ // =============================================================================
439
+ // 6. ORGANIZATION & ROLES
440
+ // =============================================================================
441
+
442
+ export const CatalystOrg: Organization = {
443
+ id: 'catalyst',
444
+ name: 'Catalyst Ventures',
445
+ settings: {
446
+ timezone: 'America/San_Francisco',
447
+ currency: 'USD',
448
+ fiscalYearStart: 1,
449
+ },
450
+ departments: [
451
+ {
452
+ id: 'investment',
453
+ name: 'Investment Team',
454
+ permissions: {
455
+ deals: ['read', 'write', 'diligence', 'recommend'],
456
+ portfolio: ['read', 'write'],
457
+ fund: ['read'],
458
+ },
459
+ teams: [
460
+ {
461
+ id: 'partners',
462
+ name: 'Partners',
463
+ positions: [
464
+ { id: 'mp', title: 'Managing Partner', roleId: 'managing-partner', reportsTo: null },
465
+ { id: 'gp-1', title: 'General Partner', roleId: 'general-partner', reportsTo: 'mp' },
466
+ { id: 'gp-2', title: 'General Partner', roleId: 'general-partner', reportsTo: 'mp' },
467
+ { id: 'gp-3', title: 'General Partner', roleId: 'general-partner', reportsTo: 'mp' },
468
+ ],
469
+ },
470
+ {
471
+ id: 'principals',
472
+ name: 'Principals',
473
+ positions: [
474
+ { id: 'principal-1', title: 'Principal', roleId: 'principal', reportsTo: 'gp-1' },
475
+ { id: 'principal-2', title: 'Principal', roleId: 'principal', reportsTo: 'gp-2' },
476
+ ],
477
+ },
478
+ {
479
+ id: 'associates',
480
+ name: 'Associates',
481
+ positions: [
482
+ { id: 'associate-1', title: 'Associate', roleId: 'associate', reportsTo: 'principal-1' },
483
+ { id: 'associate-2', title: 'Associate', roleId: 'associate', reportsTo: 'principal-2' },
484
+ ],
485
+ },
486
+ ],
487
+ },
488
+ {
489
+ id: 'platform',
490
+ name: 'Platform',
491
+ permissions: {
492
+ portfolio: ['read', 'support'],
493
+ talent: ['read', 'write'],
494
+ gtm: ['read', 'write'],
495
+ },
496
+ },
497
+ {
498
+ id: 'operations',
499
+ name: 'Operations',
500
+ permissions: {
501
+ fund: ['read', 'write', 'report'],
502
+ lps: ['read', 'write'],
503
+ compliance: ['read', 'write', 'manage'],
504
+ },
505
+ },
506
+ ],
507
+ roles: [
508
+ createBusinessRole({
509
+ id: 'managing-partner',
510
+ name: 'Managing Partner',
511
+ type: 'executive',
512
+ level: 10,
513
+ permissions: {
514
+ deals: ['read', 'write', 'approve', 'veto'],
515
+ fund: ['read', 'write', 'manage'],
516
+ portfolio: ['read', 'write', 'manage'],
517
+ lps: ['read', 'write'],
518
+ },
519
+ canHandle: ['investment-decision', 'fundraising', 'lp-relations', 'exit'],
520
+ canApprove: ['investment', 'follow-on', 'exit', 'hiring'],
521
+ }),
522
+ createBusinessRole({
523
+ id: 'general-partner',
524
+ name: 'General Partner',
525
+ type: 'executive',
526
+ level: 9,
527
+ permissions: {
528
+ deals: ['read', 'write', 'diligence', 'recommend', 'lead'],
529
+ portfolio: ['read', 'write', 'board'],
530
+ fund: ['read'],
531
+ },
532
+ canHandle: ['deal-sourcing', 'diligence', 'board-seat', 'portfolio-support'],
533
+ canApprove: ['term-sheet', 'follow-on'],
534
+ }),
535
+ createBusinessRole({
536
+ id: 'principal',
537
+ name: 'Principal',
538
+ type: 'analyst',
539
+ level: 6,
540
+ permissions: {
541
+ deals: ['read', 'write', 'diligence', 'recommend'],
542
+ portfolio: ['read', 'support'],
543
+ },
544
+ canHandle: ['deal-sourcing', 'diligence', 'portfolio-support'],
545
+ }),
546
+ createBusinessRole({
547
+ id: 'associate',
548
+ name: 'Associate',
549
+ type: 'analyst',
550
+ level: 4,
551
+ permissions: {
552
+ deals: ['read', 'write', 'research'],
553
+ portfolio: ['read'],
554
+ },
555
+ canHandle: ['market-research', 'deal-sourcing', 'diligence-support'],
556
+ }),
557
+ createBusinessRole({
558
+ id: 'platform-head',
559
+ name: 'Head of Platform',
560
+ type: 'manager',
561
+ level: 7,
562
+ permissions: {
563
+ portfolio: ['read', 'support', 'coordinate'],
564
+ talent: ['read', 'write', 'manage'],
565
+ gtm: ['read', 'write', 'manage'],
566
+ },
567
+ canHandle: ['platform-strategy', 'portfolio-support', 'talent-coordination'],
568
+ }),
569
+ createBusinessRole({
570
+ id: 'talent-partner',
571
+ name: 'Talent Partner',
572
+ type: 'support',
573
+ level: 5,
574
+ permissions: {
575
+ portfolio: ['read'],
576
+ talent: ['read', 'write'],
577
+ candidates: ['read', 'write'],
578
+ },
579
+ canHandle: ['executive-search', 'recruiting-support', 'compensation-advice'],
580
+ }),
581
+ createBusinessRole({
582
+ id: 'ir-manager',
583
+ name: 'IR Manager',
584
+ type: 'support',
585
+ level: 5,
586
+ permissions: {
587
+ fund: ['read', 'report'],
588
+ lps: ['read', 'write'],
589
+ },
590
+ canHandle: ['lp-reporting', 'lp-communication', 'agm-coordination'],
591
+ }),
592
+ createBusinessRole({
593
+ id: 'deal-sourcing-bot',
594
+ name: 'Deal Sourcing Bot',
595
+ type: 'agent',
596
+ level: 2,
597
+ workerType: 'ai',
598
+ permissions: {
599
+ deals: ['read', 'write'],
600
+ research: ['read', 'write'],
601
+ },
602
+ canHandle: ['company-research', 'news-monitoring', 'deal-flow-tracking'],
603
+ }),
604
+ ],
605
+ approvalChains: [
606
+ {
607
+ id: 'investment',
608
+ name: 'Investment Approval',
609
+ requestType: 'investment',
610
+ levels: [
611
+ { threshold: 2000000, approvers: [{ type: 'role', roleId: 'general-partner' }] }, // Seed
612
+ { threshold: 10000000, approvers: [{ type: 'role', roleId: 'managing-partner' }, { type: 'role', roleId: 'general-partner' }] }, // Series A
613
+ { threshold: Infinity, approvers: [{ type: 'all-partners' }] }, // Large checks - full partnership
614
+ ],
615
+ },
616
+ {
617
+ id: 'follow-on',
618
+ name: 'Follow-on Approval',
619
+ requestType: 'follow-on',
620
+ levels: [
621
+ { threshold: 5000000, approvers: [{ type: 'role', roleId: 'general-partner' }] },
622
+ { threshold: Infinity, approvers: [{ type: 'role', roleId: 'managing-partner' }] },
623
+ ],
624
+ },
625
+ ],
626
+ routingRules: [
627
+ {
628
+ id: 'deal-research',
629
+ taskType: 'company-research',
630
+ priority: 1,
631
+ assignTo: { roleId: 'associate' },
632
+ },
633
+ {
634
+ id: 'deal-diligence',
635
+ taskType: 'deal-diligence',
636
+ priority: 2,
637
+ assignTo: { roleId: 'principal' },
638
+ },
639
+ {
640
+ id: 'executive-search',
641
+ taskType: 'executive-search',
642
+ priority: 1,
643
+ assignTo: { roleId: 'talent-partner' },
644
+ },
645
+ ],
646
+ }
647
+
648
+ // =============================================================================
649
+ // 7. KPIs & METRICS
650
+ // =============================================================================
651
+
652
+ export const CatalystKPIs = kpis([
653
+ // Fund Performance
654
+ {
655
+ name: 'AUM',
656
+ category: 'financial',
657
+ target: 2000000000,
658
+ current: 1675000000,
659
+ unit: 'USD',
660
+ frequency: 'quarterly',
661
+ owner: 'Managing Partner',
662
+ },
663
+ {
664
+ name: 'Fund IV TVPI',
665
+ category: 'financial',
666
+ target: 2.0,
667
+ current: 1.4,
668
+ frequency: 'quarterly',
669
+ owner: 'Managing Partner',
670
+ },
671
+ {
672
+ name: 'Net IRR (Blended)',
673
+ category: 'financial',
674
+ target: 25,
675
+ current: 28,
676
+ unit: '%',
677
+ frequency: 'yearly',
678
+ owner: 'Managing Partner',
679
+ },
680
+ // Investment Activity
681
+ {
682
+ name: 'New Investments / Year',
683
+ category: 'operational',
684
+ target: 15,
685
+ current: 8,
686
+ frequency: 'yearly',
687
+ owner: 'Investment Team',
688
+ },
689
+ {
690
+ name: 'Follow-ons / Year',
691
+ category: 'operational',
692
+ target: 20,
693
+ current: 12,
694
+ frequency: 'yearly',
695
+ owner: 'Investment Team',
696
+ },
697
+ {
698
+ name: 'Win Rate (Competitive Deals)',
699
+ category: 'operational',
700
+ target: 40,
701
+ current: 35,
702
+ unit: '%',
703
+ frequency: 'quarterly',
704
+ owner: 'Investment Team',
705
+ },
706
+ // Deal Flow
707
+ {
708
+ name: 'Deals Reviewed / Month',
709
+ category: 'operational',
710
+ target: 200,
711
+ current: 180,
712
+ frequency: 'monthly',
713
+ owner: 'Investment Team',
714
+ },
715
+ {
716
+ name: 'Meetings / Month',
717
+ category: 'operational',
718
+ target: 80,
719
+ current: 65,
720
+ frequency: 'monthly',
721
+ owner: 'Investment Team',
722
+ },
723
+ {
724
+ name: 'Conversion Rate (Meeting to Term Sheet)',
725
+ category: 'operational',
726
+ target: 5,
727
+ current: 4.2,
728
+ unit: '%',
729
+ frequency: 'quarterly',
730
+ owner: 'Investment Team',
731
+ },
732
+ // Portfolio
733
+ {
734
+ name: 'Portfolio Companies',
735
+ category: 'portfolio',
736
+ target: 50,
737
+ current: 42,
738
+ frequency: 'quarterly',
739
+ owner: 'Managing Partner',
740
+ },
741
+ {
742
+ name: 'Unicorns',
743
+ category: 'portfolio',
744
+ target: 10,
745
+ current: 6,
746
+ frequency: 'quarterly',
747
+ owner: 'Managing Partner',
748
+ },
749
+ {
750
+ name: 'Portfolio ARR (Aggregate)',
751
+ category: 'portfolio',
752
+ target: 500000000,
753
+ current: 385000000,
754
+ unit: 'USD',
755
+ frequency: 'quarterly',
756
+ owner: 'Managing Partner',
757
+ },
758
+ // Platform
759
+ {
760
+ name: 'Executive Placements / Year',
761
+ category: 'platform',
762
+ target: 50,
763
+ current: 35,
764
+ frequency: 'yearly',
765
+ owner: 'Head of Platform',
766
+ },
767
+ {
768
+ name: 'Customer Intros / Quarter',
769
+ category: 'platform',
770
+ target: 100,
771
+ current: 75,
772
+ frequency: 'quarterly',
773
+ owner: 'Head of Platform',
774
+ },
775
+ {
776
+ name: 'Founder NPS',
777
+ category: 'customer',
778
+ target: 85,
779
+ current: 78,
780
+ frequency: 'yearly',
781
+ owner: 'Managing Partner',
782
+ },
783
+ // LP Relations
784
+ {
785
+ name: 'LP Re-up Rate',
786
+ category: 'financial',
787
+ target: 90,
788
+ current: 85,
789
+ unit: '%',
790
+ frequency: 'yearly',
791
+ owner: 'IR Manager',
792
+ },
793
+ ])
794
+
795
+ // =============================================================================
796
+ // 8. OKRs
797
+ // =============================================================================
798
+
799
+ export const CatalystOKRs = okrs([
800
+ {
801
+ objective: 'Close Fund V Successfully',
802
+ owner: 'Managing Partner',
803
+ period: 'H1 2024',
804
+ keyResults: [
805
+ {
806
+ description: 'Raise $500M for Fund V',
807
+ metric: 'Fund Size',
808
+ targetValue: 500000000,
809
+ currentValue: 350000000,
810
+ unit: 'USD',
811
+ },
812
+ {
813
+ description: 'Secure 3 new anchor LPs',
814
+ metric: 'New Anchors',
815
+ targetValue: 3,
816
+ currentValue: 1,
817
+ },
818
+ {
819
+ description: 'Achieve 90% LP re-up rate',
820
+ metric: 'Re-up Rate',
821
+ targetValue: 90,
822
+ currentValue: 85,
823
+ unit: '%',
824
+ },
825
+ ],
826
+ },
827
+ {
828
+ objective: 'Build Best-in-Class Investment Team',
829
+ owner: 'Managing Partner',
830
+ period: 'Q1 2024',
831
+ keyResults: [
832
+ {
833
+ description: 'Hire 2 new partners',
834
+ metric: 'Partners Hired',
835
+ targetValue: 2,
836
+ currentValue: 1,
837
+ },
838
+ {
839
+ description: 'Achieve 40% competitive win rate',
840
+ metric: 'Win Rate',
841
+ targetValue: 40,
842
+ currentValue: 35,
843
+ unit: '%',
844
+ },
845
+ {
846
+ description: 'Source 30% deals from network',
847
+ metric: 'Network Sourcing',
848
+ targetValue: 30,
849
+ currentValue: 22,
850
+ unit: '%',
851
+ },
852
+ ],
853
+ },
854
+ {
855
+ objective: 'Maximize Portfolio Value',
856
+ owner: 'Portfolio Team',
857
+ period: 'Q1 2024',
858
+ keyResults: [
859
+ {
860
+ description: 'Support 5 portfolio fundraises',
861
+ metric: 'Fundraises Supported',
862
+ targetValue: 5,
863
+ currentValue: 3,
864
+ },
865
+ {
866
+ description: 'Achieve 80% follow-on rate',
867
+ metric: 'Follow-on Rate',
868
+ targetValue: 80,
869
+ currentValue: 72,
870
+ unit: '%',
871
+ },
872
+ {
873
+ description: 'Add 2 new unicorns',
874
+ metric: 'New Unicorns',
875
+ targetValue: 2,
876
+ currentValue: 1,
877
+ },
878
+ ],
879
+ },
880
+ {
881
+ objective: 'Scale Platform Impact',
882
+ owner: 'Head of Platform',
883
+ period: 'Q1 2024',
884
+ keyResults: [
885
+ {
886
+ description: 'Place 15 executives',
887
+ metric: 'Executive Placements',
888
+ targetValue: 15,
889
+ currentValue: 8,
890
+ },
891
+ {
892
+ description: 'Make 30 customer intros',
893
+ metric: 'Customer Intros',
894
+ targetValue: 30,
895
+ currentValue: 18,
896
+ },
897
+ {
898
+ description: 'Achieve 85 Founder NPS',
899
+ metric: 'Founder NPS',
900
+ targetValue: 85,
901
+ currentValue: 78,
902
+ },
903
+ ],
904
+ },
905
+ ])
906
+
907
+ // =============================================================================
908
+ // 9. PROCESSES
909
+ // =============================================================================
910
+
911
+ export const DealSourcingProcess = Process({
912
+ name: 'Deal Sourcing',
913
+ description: 'Source and evaluate new investment opportunities',
914
+ owner: 'Investment Team',
915
+ steps: [
916
+ {
917
+ order: 1,
918
+ name: 'Inbound/Outbound',
919
+ description: 'Receive or identify potential deal',
920
+ automationLevel: 'semi-automated',
921
+ duration: 'ongoing',
922
+ },
923
+ {
924
+ order: 2,
925
+ name: 'Initial Screen',
926
+ description: 'Quick assessment against investment criteria',
927
+ automationLevel: 'semi-automated',
928
+ duration: '1 day',
929
+ owner: 'Associate',
930
+ },
931
+ {
932
+ order: 3,
933
+ name: 'First Meeting',
934
+ description: 'Initial meeting with founders',
935
+ automationLevel: 'manual',
936
+ duration: '1 hour',
937
+ owner: 'Principal',
938
+ },
939
+ {
940
+ order: 4,
941
+ name: 'Deep Dive',
942
+ description: 'Extended meeting and product demo',
943
+ automationLevel: 'manual',
944
+ duration: '2 hours',
945
+ owner: 'Partner',
946
+ },
947
+ {
948
+ order: 5,
949
+ name: 'Market Research',
950
+ description: 'Market sizing and competitive analysis',
951
+ automationLevel: 'semi-automated',
952
+ duration: '1 week',
953
+ owner: 'Associate',
954
+ },
955
+ {
956
+ order: 6,
957
+ name: 'Partner Meeting',
958
+ description: 'Present to full partnership',
959
+ automationLevel: 'manual',
960
+ duration: '30 minutes',
961
+ owner: 'Partner',
962
+ },
963
+ {
964
+ order: 7,
965
+ name: 'Due Diligence',
966
+ description: 'Full due diligence process',
967
+ automationLevel: 'manual',
968
+ duration: '2-4 weeks',
969
+ owner: 'Principal',
970
+ },
971
+ {
972
+ order: 8,
973
+ name: 'Investment Committee',
974
+ description: 'Final IC decision',
975
+ automationLevel: 'manual',
976
+ duration: '1 day',
977
+ },
978
+ {
979
+ order: 9,
980
+ name: 'Term Sheet',
981
+ description: 'Issue and negotiate term sheet',
982
+ automationLevel: 'manual',
983
+ duration: '1 week',
984
+ owner: 'Partner',
985
+ },
986
+ {
987
+ order: 10,
988
+ name: 'Close',
989
+ description: 'Legal documentation and close',
990
+ automationLevel: 'manual',
991
+ duration: '2-4 weeks',
992
+ },
993
+ ],
994
+ metrics: [
995
+ { name: 'Time to Decision', target: 4, unit: 'weeks' },
996
+ { name: 'Win Rate', target: 40, unit: '%' },
997
+ { name: 'Conversion (Meeting to IC)', target: 10, unit: '%' },
998
+ ],
999
+ })
1000
+
1001
+ export const DueDiligenceProcess = Process({
1002
+ name: 'Due Diligence',
1003
+ description: 'Comprehensive due diligence on investment opportunities',
1004
+ owner: 'Investment Team',
1005
+ steps: [
1006
+ {
1007
+ order: 1,
1008
+ name: 'Data Room Review',
1009
+ description: 'Review company data room',
1010
+ automationLevel: 'semi-automated',
1011
+ duration: '3 days',
1012
+ owner: 'Associate',
1013
+ },
1014
+ {
1015
+ order: 2,
1016
+ name: 'Financial Analysis',
1017
+ description: 'Financial model review and projections',
1018
+ automationLevel: 'manual',
1019
+ duration: '1 week',
1020
+ owner: 'Principal',
1021
+ },
1022
+ {
1023
+ order: 3,
1024
+ name: 'Customer Calls',
1025
+ description: 'Reference calls with customers',
1026
+ automationLevel: 'manual',
1027
+ duration: '1 week',
1028
+ owner: 'Principal',
1029
+ },
1030
+ {
1031
+ order: 4,
1032
+ name: 'Expert Calls',
1033
+ description: 'Industry expert interviews',
1034
+ automationLevel: 'manual',
1035
+ duration: '1 week',
1036
+ owner: 'Associate',
1037
+ },
1038
+ {
1039
+ order: 5,
1040
+ name: 'Technical Review',
1041
+ description: 'Technology and product assessment',
1042
+ automationLevel: 'manual',
1043
+ duration: '3 days',
1044
+ owner: 'Technical Advisor',
1045
+ },
1046
+ {
1047
+ order: 6,
1048
+ name: 'Founder References',
1049
+ description: 'Back-channel founder references',
1050
+ automationLevel: 'manual',
1051
+ duration: '1 week',
1052
+ owner: 'Partner',
1053
+ },
1054
+ {
1055
+ order: 7,
1056
+ name: 'Legal Review',
1057
+ description: 'Cap table and legal review',
1058
+ automationLevel: 'semi-automated',
1059
+ duration: '3 days',
1060
+ owner: 'Legal',
1061
+ },
1062
+ {
1063
+ order: 8,
1064
+ name: 'Investment Memo',
1065
+ description: 'Write investment memo',
1066
+ automationLevel: 'manual',
1067
+ duration: '3 days',
1068
+ owner: 'Principal',
1069
+ },
1070
+ ],
1071
+ metrics: [
1072
+ { name: 'Completion Time', target: 3, unit: 'weeks' },
1073
+ { name: 'Customer Calls', target: 10 },
1074
+ { name: 'Expert Calls', target: 5 },
1075
+ ],
1076
+ })
1077
+
1078
+ export const PortfolioSupportProcess = Process({
1079
+ name: 'Portfolio Support',
1080
+ description: 'Ongoing support for portfolio companies',
1081
+ owner: 'Head of Platform',
1082
+ steps: [
1083
+ {
1084
+ order: 1,
1085
+ name: 'Monthly Check-in',
1086
+ description: 'Monthly sync with CEO',
1087
+ automationLevel: 'manual',
1088
+ duration: '30 minutes',
1089
+ owner: 'Partner',
1090
+ },
1091
+ {
1092
+ order: 2,
1093
+ name: 'Board Meeting',
1094
+ description: 'Quarterly board meeting',
1095
+ automationLevel: 'manual',
1096
+ duration: '3 hours',
1097
+ owner: 'Partner',
1098
+ },
1099
+ {
1100
+ order: 3,
1101
+ name: 'Platform Support',
1102
+ description: 'Talent, GTM, technical support',
1103
+ automationLevel: 'manual',
1104
+ duration: 'ongoing',
1105
+ owner: 'Platform Team',
1106
+ },
1107
+ {
1108
+ order: 4,
1109
+ name: 'Fundraising Support',
1110
+ description: 'Support next round fundraising',
1111
+ automationLevel: 'manual',
1112
+ duration: '3 months',
1113
+ owner: 'Partner',
1114
+ },
1115
+ {
1116
+ order: 5,
1117
+ name: 'Strategic Planning',
1118
+ description: 'Annual strategic planning',
1119
+ automationLevel: 'manual',
1120
+ duration: '1 day',
1121
+ owner: 'Partner',
1122
+ },
1123
+ ],
1124
+ metrics: [
1125
+ { name: 'Founder NPS', target: 85 },
1126
+ { name: 'Follow-on Rate', target: 80, unit: '%' },
1127
+ { name: 'Board Attendance', target: 100, unit: '%' },
1128
+ ],
1129
+ })
1130
+
1131
+ // =============================================================================
1132
+ // 10. WORKFLOWS
1133
+ // =============================================================================
1134
+
1135
+ export const DealScreeningWorkflow = Workflow({
1136
+ name: 'Deal Screening',
1137
+ description: 'Automated initial deal screening',
1138
+ trigger: { type: 'event', event: 'deal.submitted' },
1139
+ actions: [
1140
+ {
1141
+ order: 1,
1142
+ type: 'compute',
1143
+ name: 'Parse Deal Info',
1144
+ config: {
1145
+ extract: ['company', 'stage', 'sector', 'metrics', 'founders'],
1146
+ },
1147
+ },
1148
+ {
1149
+ order: 2,
1150
+ type: 'compute',
1151
+ name: 'Thesis Fit Score',
1152
+ config: {
1153
+ criteria: ['sector_fit', 'stage_fit', 'metrics_threshold', 'team_background'],
1154
+ weights: [0.3, 0.2, 0.3, 0.2],
1155
+ },
1156
+ },
1157
+ {
1158
+ order: 3,
1159
+ type: 'api',
1160
+ name: 'Enrich Company Data',
1161
+ config: {
1162
+ sources: ['pitchbook', 'crunchbase', 'linkedin'],
1163
+ },
1164
+ },
1165
+ {
1166
+ order: 4,
1167
+ type: 'condition',
1168
+ name: 'Check Fit Score',
1169
+ condition: 'fitScore >= 70',
1170
+ },
1171
+ {
1172
+ order: 5,
1173
+ type: 'notification',
1174
+ name: 'Alert Team',
1175
+ config: {
1176
+ channel: 'slack',
1177
+ template: 'high_priority_deal',
1178
+ to: '#deal-flow',
1179
+ },
1180
+ },
1181
+ {
1182
+ order: 6,
1183
+ type: 'task',
1184
+ name: 'Assign Review',
1185
+ config: {
1186
+ type: 'deal-review',
1187
+ assignTo: 'associate',
1188
+ dueIn: '24 hours',
1189
+ },
1190
+ },
1191
+ ],
1192
+ })
1193
+
1194
+ export const PortfolioMonitoringWorkflow = Workflow({
1195
+ name: 'Portfolio Monitoring',
1196
+ description: 'Weekly portfolio health monitoring',
1197
+ trigger: { type: 'schedule', cron: '0 9 * * 1' }, // Weekly Monday 9am
1198
+ actions: [
1199
+ {
1200
+ order: 1,
1201
+ type: 'api',
1202
+ name: 'Collect Metrics',
1203
+ config: {
1204
+ sources: ['portfolio_dashboard', 'financial_reports'],
1205
+ metrics: ['arr', 'growth', 'runway', 'team_changes'],
1206
+ },
1207
+ },
1208
+ {
1209
+ order: 2,
1210
+ type: 'compute',
1211
+ name: 'Calculate Health Scores',
1212
+ config: {
1213
+ factors: ['revenue_growth', 'burn_rate', 'runway', 'retention'],
1214
+ },
1215
+ },
1216
+ {
1217
+ order: 3,
1218
+ type: 'condition',
1219
+ name: 'Check At Risk',
1220
+ condition: 'healthScore < 60 || runway < 9',
1221
+ },
1222
+ {
1223
+ order: 4,
1224
+ type: 'notification',
1225
+ name: 'Alert Partner',
1226
+ config: {
1227
+ channel: 'email',
1228
+ template: 'portfolio_alert',
1229
+ priority: 'high',
1230
+ },
1231
+ },
1232
+ {
1233
+ order: 5,
1234
+ type: 'task',
1235
+ name: 'Schedule Check-in',
1236
+ config: {
1237
+ type: 'portfolio-checkin',
1238
+ assignTo: 'partner',
1239
+ dueIn: '48 hours',
1240
+ },
1241
+ },
1242
+ ],
1243
+ })
1244
+
1245
+ export const LPReportingWorkflow = Workflow({
1246
+ name: 'LP Reporting',
1247
+ description: 'Quarterly LP reporting process',
1248
+ trigger: { type: 'schedule', cron: '0 9 1 */3 *' }, // Quarterly
1249
+ actions: [
1250
+ {
1251
+ order: 1,
1252
+ type: 'api',
1253
+ name: 'Aggregate Data',
1254
+ config: {
1255
+ collect: ['portfolio_metrics', 'fund_performance', 'new_investments', 'exits'],
1256
+ },
1257
+ },
1258
+ {
1259
+ order: 2,
1260
+ type: 'task',
1261
+ name: 'Update Valuations',
1262
+ config: {
1263
+ type: 'valuation-update',
1264
+ assignTo: 'finance',
1265
+ dueIn: '1 week',
1266
+ },
1267
+ },
1268
+ {
1269
+ order: 3,
1270
+ type: 'task',
1271
+ name: 'Draft Report',
1272
+ config: {
1273
+ type: 'lp-report-draft',
1274
+ assignTo: 'ir-manager',
1275
+ dueIn: '2 weeks',
1276
+ },
1277
+ },
1278
+ {
1279
+ order: 4,
1280
+ type: 'task',
1281
+ name: 'Partner Review',
1282
+ config: {
1283
+ type: 'report-review',
1284
+ assignTo: 'managing-partner',
1285
+ dueIn: '1 week',
1286
+ },
1287
+ },
1288
+ {
1289
+ order: 5,
1290
+ type: 'notification',
1291
+ name: 'Send to LPs',
1292
+ config: {
1293
+ channel: 'email',
1294
+ template: 'quarterly_lp_report',
1295
+ to: 'lps',
1296
+ },
1297
+ },
1298
+ ],
1299
+ })
1300
+
1301
+ // =============================================================================
1302
+ // 11. FINANCIALS
1303
+ // =============================================================================
1304
+
1305
+ export const CatalystFinancials = financials({
1306
+ revenue: 33500000, // Management fees (2% of AUM)
1307
+ cogs: 0,
1308
+ operatingExpenses: 25000000,
1309
+ depreciation: 100000,
1310
+ interestExpense: 0,
1311
+ otherIncome: 0,
1312
+ taxes: 2000000,
1313
+ })
1314
+
1315
+ export const FirmMetrics = {
1316
+ aum: 1675000000,
1317
+ managementFee: 0.02, // 2%
1318
+ carry: 0.20, // 20%
1319
+ managementFeeRevenue: 33500000,
1320
+ realizedCarry: 45000000, // From exits
1321
+ portfolio: {
1322
+ companies: 42,
1323
+ activeBoard: 18,
1324
+ unicorns: 6,
1325
+ totalInvested: 680000000,
1326
+ totalMarkValue: 1250000000,
1327
+ aggregateArr: 385000000,
1328
+ },
1329
+ dealFlow: {
1330
+ dealsReviewedYearly: 2200,
1331
+ meetingsYearly: 800,
1332
+ investmentsYearly: 12,
1333
+ conversionRate: 0.5, // %
1334
+ },
1335
+ team: {
1336
+ partners: 4,
1337
+ principals: 4,
1338
+ associates: 4,
1339
+ platform: 8,
1340
+ operations: 5,
1341
+ },
1342
+ performance: {
1343
+ blendedIrr: 28,
1344
+ blendedTvpi: 2.8,
1345
+ blendedDpi: 1.2,
1346
+ },
1347
+ }
1348
+
1349
+ // =============================================================================
1350
+ // 12. UTILITY FUNCTIONS
1351
+ // =============================================================================
1352
+
1353
+ export function getBusinessSummary() {
1354
+ return {
1355
+ company: CatalystVenturesBusiness,
1356
+ vision: CatalystVision,
1357
+ goals: CatalystGoals,
1358
+ funds: Funds,
1359
+ portfolio: Portfolio,
1360
+ services: PlatformServices,
1361
+ kpis: CatalystKPIs,
1362
+ okrs: CatalystOKRs,
1363
+ financials: CatalystFinancials,
1364
+ metrics: FirmMetrics,
1365
+ }
1366
+ }
1367
+
1368
+ export function getFundPerformance() {
1369
+ return Funds.map(f => ({
1370
+ name: f.name,
1371
+ vintage: f.vintage,
1372
+ size: $.format(f.size),
1373
+ deployed: `${((f.deployed / f.size) * 100).toFixed(0)}%`,
1374
+ tvpi: f.metrics?.tvpi ? `${f.metrics.tvpi}x` : 'N/A',
1375
+ irr: f.metrics?.irr ? `${f.metrics.irr}%` : 'N/A',
1376
+ status: f.status,
1377
+ }))
1378
+ }
1379
+
1380
+ export function getPortfolioSummary() {
1381
+ const active = Portfolio.filter(c => c.status === 'active')
1382
+ const totalValue = active.reduce((sum, c) => sum + (c.markValue || 0), 0)
1383
+ const totalInvested = active.reduce((sum, c) => sum + c.invested, 0)
1384
+
1385
+ return {
1386
+ companies: active.length,
1387
+ totalInvested: $.format(totalInvested),
1388
+ totalValue: $.format(totalValue),
1389
+ moic: (totalValue / totalInvested).toFixed(2) + 'x',
1390
+ unicorns: active.filter(c => (c.currentValuation || 0) >= 1000000000).length,
1391
+ }
1392
+ }
1393
+
1394
+ export function getTopCompanies(n: number = 5) {
1395
+ return Portfolio
1396
+ .filter(c => c.status === 'active' && c.markValue)
1397
+ .sort((a, b) => (b.markValue || 0) - (a.markValue || 0))
1398
+ .slice(0, n)
1399
+ .map(c => ({
1400
+ name: c.name,
1401
+ stage: c.stage,
1402
+ value: $.format(c.markValue!),
1403
+ ownership: `${c.ownership}%`,
1404
+ arr: c.metrics?.arr ? $.format(c.metrics.arr) : 'N/A',
1405
+ }))
1406
+ }
1407
+
1408
+ export default {
1409
+ business: CatalystVenturesBusiness,
1410
+ vision: CatalystVision,
1411
+ goals: CatalystGoals,
1412
+ funds: Funds,
1413
+ portfolio: Portfolio,
1414
+ services: PlatformServices,
1415
+ organization: CatalystOrg,
1416
+ kpis: CatalystKPIs,
1417
+ okrs: CatalystOKRs,
1418
+ processes: {
1419
+ dealSourcing: DealSourcingProcess,
1420
+ dueDiligence: DueDiligenceProcess,
1421
+ portfolioSupport: PortfolioSupportProcess,
1422
+ },
1423
+ workflows: {
1424
+ dealScreening: DealScreeningWorkflow,
1425
+ portfolioMonitoring: PortfolioMonitoringWorkflow,
1426
+ lpReporting: LPReportingWorkflow,
1427
+ },
1428
+ financials: CatalystFinancials,
1429
+ metrics: FirmMetrics,
1430
+ }