UNPKG

business-as-code

Version:

Primitives for expressing business logic and processes as code

494 lines (458 loc) 11.1 kB
/** * Core types for business-as-code primitives */ /** * Currency types supported by the system */ export type Currency = 'USD' | 'EUR' | 'GBP' | 'JPY' | 'CNY' | 'CAD' | 'AUD' | string /** * Time period for metrics and financial calculations */ export type TimePeriod = 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'yearly' /** * Business entity definition */ export interface BusinessDefinition { /** Business name */ name: string /** Business description */ description?: string /** Industry/sector */ industry?: string /** Mission statement */ mission?: string /** Core values */ values?: string[] /** Target market */ targetMarket?: string /** Founding date */ foundedAt?: Date /** Team size */ teamSize?: number /** Organizational structure */ structure?: OrganizationalStructure /** Business metadata */ metadata?: Record<string, unknown> } /** * Goal definition */ export interface GoalDefinition { /** Goal name/title */ name: string /** Goal description */ description?: string /** Goal category */ category?: 'strategic' | 'operational' | 'financial' | 'customer' | 'internal' | 'learning' /** Target completion date */ targetDate?: Date /** Owner responsible for the goal */ owner?: string /** Success metrics */ metrics?: string[] /** Current status */ status?: 'not-started' | 'in-progress' | 'at-risk' | 'completed' | 'cancelled' /** Progress percentage */ progress?: number /** Dependencies on other goals */ dependencies?: string[] /** Goal metadata */ metadata?: Record<string, unknown> } /** * Department definition */ export interface Department { /** Department name */ name: string /** Department description */ description?: string /** Department head */ head?: string /** Team members */ members?: string[] /** Department budget */ budget?: number /** Department goals */ goals?: GoalDefinition[] } /** * Team definition */ export interface Team { /** Team name */ name: string /** Team description */ description?: string /** Team lead */ lead?: string /** Team members */ members?: string[] /** Team objectives */ objectives?: string[] } /** * Organizational structure */ export interface OrganizationalStructure { /** Departments/divisions */ departments?: Department[] /** Reporting hierarchy */ hierarchy?: Record<string, string[]> /** Team compositions */ teams?: Team[] } /** * Vision statement definition */ export interface VisionDefinition { /** Vision statement */ statement: string /** Target timeframe */ timeframe?: string /** Success indicators */ successIndicators?: string[] /** Vision metadata */ metadata?: Record<string, unknown> } /** * Product definition */ export interface ProductDefinition { /** Product name */ name: string /** Product description */ description?: string /** Product category */ category?: string /** Target customer segment */ targetSegment?: string /** Value proposition */ valueProposition?: string /** Pricing model */ pricingModel?: 'one-time' | 'subscription' | 'usage-based' | 'freemium' | 'tiered' /** Price */ price?: number /** Currency */ currency?: Currency /** Cost of goods sold */ cogs?: number /** Features */ features?: string[] /** Product roadmap */ roadmap?: RoadmapItem[] /** Product metadata */ metadata?: Record<string, unknown> } /** * Service definition */ export interface ServiceDefinition { /** Service name */ name: string /** Service description */ description?: string /** Service category */ category?: string /** Target customer segment */ targetSegment?: string /** Value proposition */ valueProposition?: string /** Pricing model */ pricingModel?: 'hourly' | 'fixed' | 'retainer' | 'value-based' /** Base price */ price?: number /** Currency */ currency?: Currency /** Estimated delivery time */ deliveryTime?: string /** Service level agreement */ sla?: ServiceLevelAgreement /** Service metadata */ metadata?: Record<string, unknown> } /** * Roadmap item for products */ export interface RoadmapItem { /** Item name */ name: string /** Description */ description?: string /** Target quarter/date */ targetDate?: Date /** Priority */ priority?: 'critical' | 'high' | 'medium' | 'low' /** Status */ status?: 'planned' | 'in-progress' | 'completed' | 'cancelled' } /** * Service level agreement */ export interface ServiceLevelAgreement { /** Uptime percentage */ uptime?: number /** Response time */ responseTime?: string /** Support hours */ supportHours?: string /** Penalties for SLA violations */ penalties?: string } /** * Business process definition */ export interface ProcessDefinition { /** Process name */ name: string /** Process description */ description?: string /** Process category */ category?: 'core' | 'support' | 'management' /** Process owner */ owner?: string /** Process steps */ steps?: ProcessStep[] /** Inputs required */ inputs?: string[] /** Outputs produced */ outputs?: string[] /** Process metrics */ metrics?: ProcessMetric[] /** Process metadata */ metadata?: Record<string, unknown> } /** * Process step definition */ export interface ProcessStep { /** Step number */ order: number /** Step name */ name: string /** Step description */ description?: string /** Responsible role/person */ responsible?: string /** Estimated duration */ duration?: string /** Step automation level */ automationLevel?: 'manual' | 'semi-automated' | 'automated' } /** * Process metric */ export interface ProcessMetric { /** Metric name */ name: string /** Metric description */ description?: string /** Target value */ target?: number /** Current value */ current?: number /** Unit of measurement */ unit?: string } /** * Workflow definition (automation sequence) */ export interface WorkflowDefinition { /** Workflow name */ name: string /** Workflow description */ description?: string /** Trigger conditions */ trigger?: WorkflowTrigger /** Workflow actions */ actions?: WorkflowAction[] /** Workflow metadata */ metadata?: Record<string, unknown> } /** * Workflow trigger */ export interface WorkflowTrigger { /** Trigger type */ type: 'event' | 'schedule' | 'webhook' | 'manual' /** Event name (for event triggers) */ event?: string /** Schedule expression (for scheduled triggers) */ schedule?: string /** Webhook URL (for webhook triggers) */ webhook?: string } /** * Workflow action */ export interface WorkflowAction { /** Action order */ order: number /** Action type */ type: 'send' | 'create' | 'update' | 'delete' | 'notify' | 'call' | 'wait' /** Action description */ description?: string /** Action parameters */ params?: Record<string, unknown> /** Condition for executing this action */ condition?: string } /** * Key Performance Indicator */ export interface KPIDefinition { /** KPI name */ name: string /** KPI description */ description?: string /** KPI category */ category?: 'financial' | 'customer' | 'operations' | 'people' | 'growth' /** Measurement unit */ unit?: string /** Target value */ target?: number /** Current value */ current?: number /** Measurement frequency */ frequency?: TimePeriod /** Data source */ dataSource?: string /** Calculation formula */ formula?: string /** KPI metadata */ metadata?: Record<string, unknown> } /** * Objective and Key Results (OKR) */ export interface OKRDefinition { /** Objective statement */ objective: string /** Objective description */ description?: string /** Time period */ period?: string /** Owner */ owner?: string /** Key results */ keyResults?: KeyResult[] /** Status */ status?: 'not-started' | 'on-track' | 'at-risk' | 'completed' /** Confidence level */ confidence?: number /** OKR metadata */ metadata?: Record<string, unknown> } /** * Key result within an OKR */ export interface KeyResult { /** Key result description */ description: string /** Metric to measure */ metric: string /** Starting value */ startValue?: number /** Target value */ targetValue: number /** Current value */ currentValue?: number /** Unit of measurement */ unit?: string /** Progress percentage */ progress?: number } /** * Financial metrics and calculations */ export interface FinancialMetrics { /** Revenue */ revenue?: number /** Cost of goods sold */ cogs?: number /** Gross profit */ grossProfit?: number /** Gross margin percentage */ grossMargin?: number /** Operating expenses */ operatingExpenses?: number /** Operating income */ operatingIncome?: number /** Operating margin percentage */ operatingMargin?: number /** Net income */ netIncome?: number /** Net margin percentage */ netMargin?: number /** EBITDA */ ebitda?: number /** EBITDA margin percentage */ ebitdaMargin?: number /** Cash flow from operations */ operatingCashFlow?: number /** Free cash flow */ freeCashFlow?: number /** Currency */ currency?: Currency /** Period */ period?: TimePeriod } /** * Financial statement data */ export interface FinancialStatement { /** Statement type */ type: 'income' | 'balance-sheet' | 'cash-flow' /** Period */ period: string /** Line items */ lineItems: Record<string, number> /** Currency */ currency: Currency /** Metadata */ metadata?: Record<string, unknown> } /** * Business context for $ helper */ export interface BusinessContext { /** Current business entity */ business?: BusinessDefinition /** Active goals */ goals?: GoalDefinition[] /** Active OKRs */ okrs?: OKRDefinition[] /** Tracked KPIs */ kpis?: KPIDefinition[] /** Financial data */ financials?: FinancialMetrics /** Custom context data */ [key: string]: unknown } /** * $ helper for business operations */ export interface BusinessOperations { /** Format currency value */ format: (amount: number, currency?: Currency) => string /** Calculate percentage */ percent: (value: number, total: number) => number /** Calculate growth rate */ growth: (current: number, previous: number) => number /** Calculate margin */ margin: (revenue: number, cost: number) => number /** Calculate return on investment */ roi: (gain: number, cost: number) => number /** Calculate customer lifetime value */ ltv: (averageValue: number, frequency: number, lifetime: number) => number /** Calculate customer acquisition cost */ cac: (marketingSpend: number, newCustomers: number) => number /** Calculate burn rate */ burnRate: (cashStart: number, cashEnd: number, months: number) => number /** Calculate runway */ runway: (cash: number, burnRate: number) => number /** Access business context */ context: BusinessContext /** Log business event */ log: (event: string, data?: unknown) => void }