business-as-code 0.2.1 → 2.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 (190) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/CHANGELOG.md +9 -0
  3. package/IMPLEMENTATION.md +226 -0
  4. package/README.md +1133 -193
  5. package/dist/business.d.ts +62 -0
  6. package/dist/business.d.ts.map +1 -0
  7. package/dist/business.js +109 -0
  8. package/dist/business.js.map +1 -0
  9. package/dist/dollar.d.ts +60 -0
  10. package/dist/dollar.d.ts.map +1 -0
  11. package/dist/dollar.js +107 -0
  12. package/dist/dollar.js.map +1 -0
  13. package/dist/entities/assets.d.ts +21 -0
  14. package/dist/entities/assets.d.ts.map +1 -0
  15. package/dist/entities/assets.js +323 -0
  16. package/dist/entities/assets.js.map +1 -0
  17. package/dist/entities/business.d.ts +36 -0
  18. package/dist/entities/business.d.ts.map +1 -0
  19. package/dist/entities/business.js +370 -0
  20. package/dist/entities/business.js.map +1 -0
  21. package/dist/entities/communication.d.ts +21 -0
  22. package/dist/entities/communication.d.ts.map +1 -0
  23. package/dist/entities/communication.js +255 -0
  24. package/dist/entities/communication.js.map +1 -0
  25. package/dist/entities/customers.d.ts +58 -0
  26. package/dist/entities/customers.d.ts.map +1 -0
  27. package/dist/entities/customers.js +989 -0
  28. package/dist/entities/customers.js.map +1 -0
  29. package/dist/entities/financials.d.ts +59 -0
  30. package/dist/entities/financials.d.ts.map +1 -0
  31. package/dist/entities/financials.js +932 -0
  32. package/dist/entities/financials.js.map +1 -0
  33. package/dist/entities/goals.d.ts +58 -0
  34. package/dist/entities/goals.d.ts.map +1 -0
  35. package/dist/entities/goals.js +800 -0
  36. package/dist/entities/goals.js.map +1 -0
  37. package/dist/entities/index.d.ts +299 -0
  38. package/dist/entities/index.d.ts.map +1 -0
  39. package/dist/entities/index.js +198 -0
  40. package/dist/entities/index.js.map +1 -0
  41. package/dist/entities/legal.d.ts +21 -0
  42. package/dist/entities/legal.d.ts.map +1 -0
  43. package/dist/entities/legal.js +301 -0
  44. package/dist/entities/legal.js.map +1 -0
  45. package/dist/entities/market.d.ts +21 -0
  46. package/dist/entities/market.d.ts.map +1 -0
  47. package/dist/entities/market.js +301 -0
  48. package/dist/entities/market.js.map +1 -0
  49. package/dist/entities/marketing.d.ts +67 -0
  50. package/dist/entities/marketing.d.ts.map +1 -0
  51. package/dist/entities/marketing.js +1157 -0
  52. package/dist/entities/marketing.js.map +1 -0
  53. package/dist/entities/offerings.d.ts +51 -0
  54. package/dist/entities/offerings.d.ts.map +1 -0
  55. package/dist/entities/offerings.js +727 -0
  56. package/dist/entities/offerings.js.map +1 -0
  57. package/dist/entities/operations.d.ts +58 -0
  58. package/dist/entities/operations.d.ts.map +1 -0
  59. package/dist/entities/operations.js +787 -0
  60. package/dist/entities/operations.js.map +1 -0
  61. package/dist/entities/organization.d.ts +57 -0
  62. package/dist/entities/organization.d.ts.map +1 -0
  63. package/dist/entities/organization.js +807 -0
  64. package/dist/entities/organization.js.map +1 -0
  65. package/dist/entities/partnerships.d.ts +21 -0
  66. package/dist/entities/partnerships.d.ts.map +1 -0
  67. package/dist/entities/partnerships.js +300 -0
  68. package/dist/entities/partnerships.js.map +1 -0
  69. package/dist/entities/planning.d.ts +87 -0
  70. package/dist/entities/planning.d.ts.map +1 -0
  71. package/dist/entities/planning.js +271 -0
  72. package/dist/entities/planning.js.map +1 -0
  73. package/dist/entities/projects.d.ts +25 -0
  74. package/dist/entities/projects.d.ts.map +1 -0
  75. package/dist/entities/projects.js +349 -0
  76. package/dist/entities/projects.js.map +1 -0
  77. package/dist/entities/risk.d.ts +21 -0
  78. package/dist/entities/risk.d.ts.map +1 -0
  79. package/dist/entities/risk.js +293 -0
  80. package/dist/entities/risk.js.map +1 -0
  81. package/dist/entities/sales.d.ts +72 -0
  82. package/dist/entities/sales.d.ts.map +1 -0
  83. package/dist/entities/sales.js +1248 -0
  84. package/dist/entities/sales.js.map +1 -0
  85. package/dist/financials.d.ts +130 -0
  86. package/dist/financials.d.ts.map +1 -0
  87. package/dist/financials.js +297 -0
  88. package/dist/financials.js.map +1 -0
  89. package/dist/goals.d.ts +87 -0
  90. package/dist/goals.d.ts.map +1 -0
  91. package/dist/goals.js +215 -0
  92. package/dist/goals.js.map +1 -0
  93. package/dist/index.d.ts +97 -4
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +131 -1079
  96. package/dist/index.js.map +1 -1
  97. package/dist/kpis.d.ts +118 -0
  98. package/dist/kpis.d.ts.map +1 -0
  99. package/dist/kpis.js +232 -0
  100. package/dist/kpis.js.map +1 -0
  101. package/dist/metrics.d.ts +448 -0
  102. package/dist/metrics.d.ts.map +1 -0
  103. package/dist/metrics.js +325 -0
  104. package/dist/metrics.js.map +1 -0
  105. package/dist/okrs.d.ts +123 -0
  106. package/dist/okrs.d.ts.map +1 -0
  107. package/dist/okrs.js +269 -0
  108. package/dist/okrs.js.map +1 -0
  109. package/dist/organization.d.ts +585 -0
  110. package/dist/organization.d.ts.map +1 -0
  111. package/dist/organization.js +173 -0
  112. package/dist/organization.js.map +1 -0
  113. package/dist/process.d.ts +112 -0
  114. package/dist/process.d.ts.map +1 -0
  115. package/dist/process.js +241 -0
  116. package/dist/process.js.map +1 -0
  117. package/dist/product.d.ts +85 -0
  118. package/dist/product.d.ts.map +1 -0
  119. package/dist/product.js +145 -0
  120. package/dist/product.js.map +1 -0
  121. package/dist/queries.d.ts +304 -0
  122. package/dist/queries.d.ts.map +1 -0
  123. package/dist/queries.js +415 -0
  124. package/dist/queries.js.map +1 -0
  125. package/dist/roles.d.ts +340 -0
  126. package/dist/roles.d.ts.map +1 -0
  127. package/dist/roles.js +255 -0
  128. package/dist/roles.js.map +1 -0
  129. package/dist/service.d.ts +61 -0
  130. package/dist/service.d.ts.map +1 -0
  131. package/dist/service.js +140 -0
  132. package/dist/service.js.map +1 -0
  133. package/dist/types.d.ts +459 -0
  134. package/dist/types.d.ts.map +1 -0
  135. package/dist/types.js +5 -0
  136. package/dist/types.js.map +1 -0
  137. package/dist/vision.d.ts +38 -0
  138. package/dist/vision.d.ts.map +1 -0
  139. package/dist/vision.js +68 -0
  140. package/dist/vision.js.map +1 -0
  141. package/dist/workflow.d.ts +115 -0
  142. package/dist/workflow.d.ts.map +1 -0
  143. package/dist/workflow.js +247 -0
  144. package/dist/workflow.js.map +1 -0
  145. package/examples/basic-usage.ts +307 -0
  146. package/package.json +19 -60
  147. package/src/business.ts +121 -0
  148. package/src/dollar.ts +132 -0
  149. package/src/entities/assets.ts +332 -0
  150. package/src/entities/business.ts +406 -0
  151. package/src/entities/communication.ts +264 -0
  152. package/src/entities/customers.ts +1072 -0
  153. package/src/entities/financials.ts +1011 -0
  154. package/src/entities/goals.ts +871 -0
  155. package/src/entities/index.ts +383 -0
  156. package/src/entities/legal.ts +310 -0
  157. package/src/entities/market.ts +310 -0
  158. package/src/entities/marketing.ts +1249 -0
  159. package/src/entities/offerings.ts +789 -0
  160. package/src/entities/operations.ts +861 -0
  161. package/src/entities/organization.ts +876 -0
  162. package/src/entities/partnerships.ts +309 -0
  163. package/src/entities/planning.ts +307 -0
  164. package/src/entities/projects.ts +360 -0
  165. package/src/entities/risk.ts +302 -0
  166. package/src/entities/sales.ts +1352 -0
  167. package/src/financials.ts +352 -0
  168. package/src/goals.ts +250 -0
  169. package/src/index.test.ts +336 -0
  170. package/src/index.ts +530 -0
  171. package/src/kpis.ts +275 -0
  172. package/src/metrics.ts +825 -0
  173. package/src/okrs.ts +325 -0
  174. package/src/organization.ts +909 -0
  175. package/src/process.ts +272 -0
  176. package/src/product.ts +178 -0
  177. package/src/queries.ts +767 -0
  178. package/src/roles.ts +686 -0
  179. package/src/service.ts +164 -0
  180. package/src/types.ts +493 -0
  181. package/src/vision.ts +88 -0
  182. package/src/workflow.ts +280 -0
  183. package/tsconfig.json +9 -0
  184. package/dist/loaders/index.d.ts +0 -174
  185. package/dist/loaders/index.js +0 -366
  186. package/dist/loaders/index.js.map +0 -1
  187. package/dist/schema/index.d.ts +0 -146
  188. package/dist/schema/index.js +0 -716
  189. package/dist/schema/index.js.map +0 -1
  190. package/dist/types-CJ9eGS_C.d.ts +0 -86
package/src/service.ts ADDED
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Service definition and management
3
+ */
4
+
5
+ import type { ServiceDefinition } from './types.js'
6
+
7
+ /**
8
+ * Define a service with pricing, SLA, and delivery information
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const service = Service({
13
+ * name: 'Widget Consulting',
14
+ * description: 'Expert widget implementation and optimization',
15
+ * category: 'Consulting',
16
+ * targetSegment: 'Enterprise',
17
+ * valueProposition: 'Get expert help implementing widgets in 2 weeks',
18
+ * pricingModel: 'fixed',
19
+ * price: 5000,
20
+ * currency: 'USD',
21
+ * deliveryTime: '2 weeks',
22
+ * sla: {
23
+ * uptime: 99.9,
24
+ * responseTime: '< 24 hours',
25
+ * supportHours: 'Business hours (9-5 EST)',
26
+ * penalties: '10% refund per day of delay',
27
+ * },
28
+ * })
29
+ * ```
30
+ */
31
+ export function Service(definition: ServiceDefinition): ServiceDefinition {
32
+ if (!definition.name) {
33
+ throw new Error('Service name is required')
34
+ }
35
+
36
+ return {
37
+ ...definition,
38
+ pricingModel: definition.pricingModel || 'hourly',
39
+ currency: definition.currency || 'USD',
40
+ metadata: definition.metadata || {},
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Calculate service price based on hours (for hourly pricing)
46
+ */
47
+ export function calculateHourlyPrice(service: ServiceDefinition, hours: number): number {
48
+ if (service.pricingModel !== 'hourly' || !service.price) {
49
+ throw new Error('Service must use hourly pricing model')
50
+ }
51
+ return service.price * hours
52
+ }
53
+
54
+ /**
55
+ * Calculate monthly retainer equivalent
56
+ */
57
+ export function calculateMonthlyRetainer(service: ServiceDefinition, hoursPerMonth: number): number {
58
+ if (service.pricingModel !== 'hourly' || !service.price) {
59
+ throw new Error('Service must use hourly pricing model')
60
+ }
61
+ return service.price * hoursPerMonth
62
+ }
63
+
64
+ /**
65
+ * Check if service meets SLA uptime requirement
66
+ */
67
+ export function checkSLAUptime(service: ServiceDefinition, actualUptime: number): boolean {
68
+ if (!service.sla?.uptime) return true
69
+ return actualUptime >= service.sla.uptime
70
+ }
71
+
72
+ /**
73
+ * Parse delivery time to days
74
+ */
75
+ export function parseDeliveryTimeToDays(deliveryTime?: string): number {
76
+ if (!deliveryTime) return 0
77
+
78
+ const lower = deliveryTime.toLowerCase()
79
+
80
+ // Parse patterns like "2 weeks", "3 days", "1 month"
81
+ const match = lower.match(/(\d+)\s*(day|days|week|weeks|month|months|hour|hours)/)
82
+ if (!match) return 0
83
+
84
+ const value = parseInt(match[1] || '0', 10)
85
+ const unit = match[2]
86
+
87
+ switch (unit) {
88
+ case 'hour':
89
+ case 'hours':
90
+ return value / 24
91
+ case 'day':
92
+ case 'days':
93
+ return value
94
+ case 'week':
95
+ case 'weeks':
96
+ return value * 7
97
+ case 'month':
98
+ case 'months':
99
+ return value * 30
100
+ default:
101
+ return 0
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Estimate service completion date
107
+ */
108
+ export function estimateCompletionDate(service: ServiceDefinition, startDate?: Date): Date {
109
+ const start = startDate || new Date()
110
+ const days = parseDeliveryTimeToDays(service.deliveryTime)
111
+ const completion = new Date(start)
112
+ completion.setDate(completion.getDate() + days)
113
+ return completion
114
+ }
115
+
116
+ /**
117
+ * Calculate service value (for value-based pricing)
118
+ */
119
+ export function calculateValueBasedPrice(
120
+ service: ServiceDefinition,
121
+ customerValue: number,
122
+ valueSharePercentage: number
123
+ ): number {
124
+ if (service.pricingModel !== 'value-based') {
125
+ throw new Error('Service must use value-based pricing model')
126
+ }
127
+
128
+ if (valueSharePercentage < 0 || valueSharePercentage > 100) {
129
+ throw new Error('Value share percentage must be between 0 and 100')
130
+ }
131
+
132
+ return customerValue * (valueSharePercentage / 100)
133
+ }
134
+
135
+ /**
136
+ * Validate service definition
137
+ */
138
+ export function validateService(service: ServiceDefinition): { valid: boolean; errors: string[] } {
139
+ const errors: string[] = []
140
+
141
+ if (!service.name) {
142
+ errors.push('Service name is required')
143
+ }
144
+
145
+ if (service.price && service.price < 0) {
146
+ errors.push('Service price cannot be negative')
147
+ }
148
+
149
+ if (service.sla?.uptime && (service.sla.uptime < 0 || service.sla.uptime > 100)) {
150
+ errors.push('SLA uptime must be between 0 and 100')
151
+ }
152
+
153
+ if (
154
+ service.pricingModel &&
155
+ !['hourly', 'fixed', 'retainer', 'value-based'].includes(service.pricingModel)
156
+ ) {
157
+ errors.push('Invalid pricing model')
158
+ }
159
+
160
+ return {
161
+ valid: errors.length === 0,
162
+ errors,
163
+ }
164
+ }
package/src/types.ts ADDED
@@ -0,0 +1,493 @@
1
+ /**
2
+ * Core types for business-as-code primitives
3
+ */
4
+
5
+ /**
6
+ * Currency types supported by the system
7
+ */
8
+ export type Currency = 'USD' | 'EUR' | 'GBP' | 'JPY' | 'CNY' | 'CAD' | 'AUD' | string
9
+
10
+ /**
11
+ * Time period for metrics and financial calculations
12
+ */
13
+ export type TimePeriod = 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'yearly'
14
+
15
+ /**
16
+ * Business entity definition
17
+ */
18
+ export interface BusinessDefinition {
19
+ /** Business name */
20
+ name: string
21
+ /** Business description */
22
+ description?: string
23
+ /** Industry/sector */
24
+ industry?: string
25
+ /** Mission statement */
26
+ mission?: string
27
+ /** Core values */
28
+ values?: string[]
29
+ /** Target market */
30
+ targetMarket?: string
31
+ /** Founding date */
32
+ foundedAt?: Date
33
+ /** Team size */
34
+ teamSize?: number
35
+ /** Organizational structure */
36
+ structure?: OrganizationalStructure
37
+ /** Business metadata */
38
+ metadata?: Record<string, unknown>
39
+ }
40
+
41
+ /**
42
+ * Goal definition
43
+ */
44
+ export interface GoalDefinition {
45
+ /** Goal name/title */
46
+ name: string
47
+ /** Goal description */
48
+ description?: string
49
+ /** Goal category */
50
+ category?: 'strategic' | 'operational' | 'financial' | 'customer' | 'internal' | 'learning'
51
+ /** Target completion date */
52
+ targetDate?: Date
53
+ /** Owner responsible for the goal */
54
+ owner?: string
55
+ /** Success metrics */
56
+ metrics?: string[]
57
+ /** Current status */
58
+ status?: 'not-started' | 'in-progress' | 'at-risk' | 'completed' | 'cancelled'
59
+ /** Progress percentage */
60
+ progress?: number
61
+ /** Dependencies on other goals */
62
+ dependencies?: string[]
63
+ /** Goal metadata */
64
+ metadata?: Record<string, unknown>
65
+ }
66
+
67
+ /**
68
+ * Department definition
69
+ */
70
+ export interface Department {
71
+ /** Department name */
72
+ name: string
73
+ /** Department description */
74
+ description?: string
75
+ /** Department head */
76
+ head?: string
77
+ /** Team members */
78
+ members?: string[]
79
+ /** Department budget */
80
+ budget?: number
81
+ /** Department goals */
82
+ goals?: GoalDefinition[]
83
+ }
84
+
85
+ /**
86
+ * Team definition
87
+ */
88
+ export interface Team {
89
+ /** Team name */
90
+ name: string
91
+ /** Team description */
92
+ description?: string
93
+ /** Team lead */
94
+ lead?: string
95
+ /** Team members */
96
+ members?: string[]
97
+ /** Team objectives */
98
+ objectives?: string[]
99
+ }
100
+
101
+ /**
102
+ * Organizational structure
103
+ */
104
+ export interface OrganizationalStructure {
105
+ /** Departments/divisions */
106
+ departments?: Department[]
107
+ /** Reporting hierarchy */
108
+ hierarchy?: Record<string, string[]>
109
+ /** Team compositions */
110
+ teams?: Team[]
111
+ }
112
+
113
+ /**
114
+ * Vision statement definition
115
+ */
116
+ export interface VisionDefinition {
117
+ /** Vision statement */
118
+ statement: string
119
+ /** Target timeframe */
120
+ timeframe?: string
121
+ /** Success indicators */
122
+ successIndicators?: string[]
123
+ /** Vision metadata */
124
+ metadata?: Record<string, unknown>
125
+ }
126
+
127
+ /**
128
+ * Product definition
129
+ */
130
+ export interface ProductDefinition {
131
+ /** Product name */
132
+ name: string
133
+ /** Product description */
134
+ description?: string
135
+ /** Product category */
136
+ category?: string
137
+ /** Target customer segment */
138
+ targetSegment?: string
139
+ /** Value proposition */
140
+ valueProposition?: string
141
+ /** Pricing model */
142
+ pricingModel?: 'one-time' | 'subscription' | 'usage-based' | 'freemium' | 'tiered'
143
+ /** Price */
144
+ price?: number
145
+ /** Currency */
146
+ currency?: Currency
147
+ /** Cost of goods sold */
148
+ cogs?: number
149
+ /** Features */
150
+ features?: string[]
151
+ /** Product roadmap */
152
+ roadmap?: RoadmapItem[]
153
+ /** Product metadata */
154
+ metadata?: Record<string, unknown>
155
+ }
156
+
157
+ /**
158
+ * Service definition
159
+ */
160
+ export interface ServiceDefinition {
161
+ /** Service name */
162
+ name: string
163
+ /** Service description */
164
+ description?: string
165
+ /** Service category */
166
+ category?: string
167
+ /** Target customer segment */
168
+ targetSegment?: string
169
+ /** Value proposition */
170
+ valueProposition?: string
171
+ /** Pricing model */
172
+ pricingModel?: 'hourly' | 'fixed' | 'retainer' | 'value-based'
173
+ /** Base price */
174
+ price?: number
175
+ /** Currency */
176
+ currency?: Currency
177
+ /** Estimated delivery time */
178
+ deliveryTime?: string
179
+ /** Service level agreement */
180
+ sla?: ServiceLevelAgreement
181
+ /** Service metadata */
182
+ metadata?: Record<string, unknown>
183
+ }
184
+
185
+ /**
186
+ * Roadmap item for products
187
+ */
188
+ export interface RoadmapItem {
189
+ /** Item name */
190
+ name: string
191
+ /** Description */
192
+ description?: string
193
+ /** Target quarter/date */
194
+ targetDate?: Date
195
+ /** Priority */
196
+ priority?: 'critical' | 'high' | 'medium' | 'low'
197
+ /** Status */
198
+ status?: 'planned' | 'in-progress' | 'completed' | 'cancelled'
199
+ }
200
+
201
+ /**
202
+ * Service level agreement
203
+ */
204
+ export interface ServiceLevelAgreement {
205
+ /** Uptime percentage */
206
+ uptime?: number
207
+ /** Response time */
208
+ responseTime?: string
209
+ /** Support hours */
210
+ supportHours?: string
211
+ /** Penalties for SLA violations */
212
+ penalties?: string
213
+ }
214
+
215
+ /**
216
+ * Business process definition
217
+ */
218
+ export interface ProcessDefinition {
219
+ /** Process name */
220
+ name: string
221
+ /** Process description */
222
+ description?: string
223
+ /** Process category */
224
+ category?: 'core' | 'support' | 'management'
225
+ /** Process owner */
226
+ owner?: string
227
+ /** Process steps */
228
+ steps?: ProcessStep[]
229
+ /** Inputs required */
230
+ inputs?: string[]
231
+ /** Outputs produced */
232
+ outputs?: string[]
233
+ /** Process metrics */
234
+ metrics?: ProcessMetric[]
235
+ /** Process metadata */
236
+ metadata?: Record<string, unknown>
237
+ }
238
+
239
+ /**
240
+ * Process step definition
241
+ */
242
+ export interface ProcessStep {
243
+ /** Step number */
244
+ order: number
245
+ /** Step name */
246
+ name: string
247
+ /** Step description */
248
+ description?: string
249
+ /** Responsible role/person */
250
+ responsible?: string
251
+ /** Estimated duration */
252
+ duration?: string
253
+ /** Step automation level */
254
+ automationLevel?: 'manual' | 'semi-automated' | 'automated'
255
+ }
256
+
257
+ /**
258
+ * Process metric
259
+ */
260
+ export interface ProcessMetric {
261
+ /** Metric name */
262
+ name: string
263
+ /** Metric description */
264
+ description?: string
265
+ /** Target value */
266
+ target?: number
267
+ /** Current value */
268
+ current?: number
269
+ /** Unit of measurement */
270
+ unit?: string
271
+ }
272
+
273
+ /**
274
+ * Workflow definition (automation sequence)
275
+ */
276
+ export interface WorkflowDefinition {
277
+ /** Workflow name */
278
+ name: string
279
+ /** Workflow description */
280
+ description?: string
281
+ /** Trigger conditions */
282
+ trigger?: WorkflowTrigger
283
+ /** Workflow actions */
284
+ actions?: WorkflowAction[]
285
+ /** Workflow metadata */
286
+ metadata?: Record<string, unknown>
287
+ }
288
+
289
+ /**
290
+ * Workflow trigger
291
+ */
292
+ export interface WorkflowTrigger {
293
+ /** Trigger type */
294
+ type: 'event' | 'schedule' | 'webhook' | 'manual'
295
+ /** Event name (for event triggers) */
296
+ event?: string
297
+ /** Schedule expression (for scheduled triggers) */
298
+ schedule?: string
299
+ /** Webhook URL (for webhook triggers) */
300
+ webhook?: string
301
+ }
302
+
303
+ /**
304
+ * Workflow action
305
+ */
306
+ export interface WorkflowAction {
307
+ /** Action order */
308
+ order: number
309
+ /** Action type */
310
+ type: 'send' | 'create' | 'update' | 'delete' | 'notify' | 'call' | 'wait'
311
+ /** Action description */
312
+ description?: string
313
+ /** Action parameters */
314
+ params?: Record<string, unknown>
315
+ /** Condition for executing this action */
316
+ condition?: string
317
+ }
318
+
319
+ /**
320
+ * Key Performance Indicator
321
+ */
322
+ export interface KPIDefinition {
323
+ /** KPI name */
324
+ name: string
325
+ /** KPI description */
326
+ description?: string
327
+ /** KPI category */
328
+ category?: 'financial' | 'customer' | 'operations' | 'people' | 'growth'
329
+ /** Measurement unit */
330
+ unit?: string
331
+ /** Target value */
332
+ target?: number
333
+ /** Current value */
334
+ current?: number
335
+ /** Measurement frequency */
336
+ frequency?: TimePeriod
337
+ /** Data source */
338
+ dataSource?: string
339
+ /** Calculation formula */
340
+ formula?: string
341
+ /** KPI metadata */
342
+ metadata?: Record<string, unknown>
343
+ }
344
+
345
+ /**
346
+ * Objective and Key Results (OKR)
347
+ */
348
+ export interface OKRDefinition {
349
+ /** Objective statement */
350
+ objective: string
351
+ /** Objective description */
352
+ description?: string
353
+ /** Time period */
354
+ period?: string
355
+ /** Owner */
356
+ owner?: string
357
+ /** Key results */
358
+ keyResults?: KeyResult[]
359
+ /** Status */
360
+ status?: 'not-started' | 'on-track' | 'at-risk' | 'completed'
361
+ /** Confidence level */
362
+ confidence?: number
363
+ /** OKR metadata */
364
+ metadata?: Record<string, unknown>
365
+ }
366
+
367
+ /**
368
+ * Key result within an OKR
369
+ */
370
+ export interface KeyResult {
371
+ /** Key result description */
372
+ description: string
373
+ /** Metric to measure */
374
+ metric: string
375
+ /** Starting value */
376
+ startValue?: number
377
+ /** Target value */
378
+ targetValue: number
379
+ /** Current value */
380
+ currentValue?: number
381
+ /** Unit of measurement */
382
+ unit?: string
383
+ /** Progress percentage */
384
+ progress?: number
385
+ }
386
+
387
+ /**
388
+ * Financial metrics and calculations
389
+ */
390
+ export interface FinancialMetrics {
391
+ /** Revenue */
392
+ revenue?: number
393
+ /** Cost of goods sold */
394
+ cogs?: number
395
+ /** Gross profit */
396
+ grossProfit?: number
397
+ /** Gross margin percentage */
398
+ grossMargin?: number
399
+ /** Operating expenses */
400
+ operatingExpenses?: number
401
+ /** Operating income */
402
+ operatingIncome?: number
403
+ /** Operating margin percentage */
404
+ operatingMargin?: number
405
+ /** Net income */
406
+ netIncome?: number
407
+ /** Net margin percentage */
408
+ netMargin?: number
409
+ /** EBITDA */
410
+ ebitda?: number
411
+ /** EBITDA margin percentage */
412
+ ebitdaMargin?: number
413
+ /** Cash flow from operations */
414
+ operatingCashFlow?: number
415
+ /** Free cash flow */
416
+ freeCashFlow?: number
417
+ /** Currency */
418
+ currency?: Currency
419
+ /** Period */
420
+ period?: TimePeriod
421
+ }
422
+
423
+ /**
424
+ * Financial statement data
425
+ */
426
+ export interface FinancialStatement {
427
+ /** Statement type */
428
+ type: 'income' | 'balance-sheet' | 'cash-flow'
429
+ /** Period */
430
+ period: string
431
+ /** Line items */
432
+ lineItems: Record<string, number>
433
+ /** Currency */
434
+ currency: Currency
435
+ /** Metadata */
436
+ metadata?: Record<string, unknown>
437
+ }
438
+
439
+ /**
440
+ * Business context for $ helper
441
+ */
442
+ export interface BusinessContext {
443
+ /** Current business entity */
444
+ business?: BusinessDefinition
445
+ /** Active goals */
446
+ goals?: GoalDefinition[]
447
+ /** Active OKRs */
448
+ okrs?: OKRDefinition[]
449
+ /** Tracked KPIs */
450
+ kpis?: KPIDefinition[]
451
+ /** Financial data */
452
+ financials?: FinancialMetrics
453
+ /** Custom context data */
454
+ [key: string]: unknown
455
+ }
456
+
457
+ /**
458
+ * $ helper for business operations
459
+ */
460
+ export interface BusinessOperations {
461
+ /** Format currency value */
462
+ format: (amount: number, currency?: Currency) => string
463
+
464
+ /** Calculate percentage */
465
+ percent: (value: number, total: number) => number
466
+
467
+ /** Calculate growth rate */
468
+ growth: (current: number, previous: number) => number
469
+
470
+ /** Calculate margin */
471
+ margin: (revenue: number, cost: number) => number
472
+
473
+ /** Calculate return on investment */
474
+ roi: (gain: number, cost: number) => number
475
+
476
+ /** Calculate customer lifetime value */
477
+ ltv: (averageValue: number, frequency: number, lifetime: number) => number
478
+
479
+ /** Calculate customer acquisition cost */
480
+ cac: (marketingSpend: number, newCustomers: number) => number
481
+
482
+ /** Calculate burn rate */
483
+ burnRate: (cashStart: number, cashEnd: number, months: number) => number
484
+
485
+ /** Calculate runway */
486
+ runway: (cash: number, burnRate: number) => number
487
+
488
+ /** Access business context */
489
+ context: BusinessContext
490
+
491
+ /** Log business event */
492
+ log: (event: string, data?: unknown) => void
493
+ }