UNPKG

business-as-code

Version:

Primitives for expressing business logic and processes as code

255 lines 19 kB
/** * Communication & Collaboration Entities * Meeting, Decision, ActionItem, Announcement, Feedback, Discussion */ export const Meeting = { singular: 'meeting', plural: 'meetings', description: 'A scheduled meeting or event', properties: { name: { type: 'string', description: 'Meeting name' }, description: { type: 'string', description: 'Meeting description' }, type: { type: 'string', description: 'Type of meeting', examples: ['one-on-one', 'team', 'all-hands', 'standup', 'planning', 'review', 'retrospective', 'interview', 'client', 'board', 'workshop', 'training'] }, status: { type: 'string', description: 'Meeting status', examples: ['scheduled', 'confirmed', 'in-progress', 'completed', 'cancelled', 'rescheduled', 'no-show'] }, recurring: { type: 'boolean', description: 'Is recurring meeting' }, recurrencePattern: { type: 'string', description: 'Recurrence pattern', examples: ['daily', 'weekly', 'biweekly', 'monthly', 'quarterly'], optional: true }, startTime: { type: 'date', description: 'Start date and time' }, endTime: { type: 'date', description: 'End date and time' }, duration: { type: 'number', description: 'Duration in minutes' }, timezone: { type: 'string', description: 'Meeting timezone' }, location: { type: 'string', description: 'Physical location', optional: true }, virtualLink: { type: 'string', description: 'Virtual meeting link', optional: true }, platform: { type: 'string', description: 'Meeting platform', examples: ['zoom', 'teams', 'meet', 'webex', 'in-person', 'hybrid'] }, organizer: { type: 'string', description: 'Meeting organizer' }, attendees: { type: 'string[]', description: 'Attendees list' }, requiredAttendees: { type: 'string[]', description: 'Required attendees' }, optionalAttendees: { type: 'string[]', description: 'Optional attendees' }, actualAttendees: { type: 'string[]', description: 'Actual attendees' }, agenda: { type: 'string[]', description: 'Meeting agenda items' }, objectives: { type: 'string[]', description: 'Meeting objectives' }, notes: { type: 'string', description: 'Meeting notes', optional: true }, notesUrl: { type: 'string', description: 'Notes document URL', optional: true }, recordingUrl: { type: 'string', description: 'Recording URL', optional: true }, transcriptUrl: { type: 'string', description: 'Transcript URL', optional: true }, calendarEventId: { type: 'string', description: 'Calendar event ID', optional: true }, reminderMinutes: { type: 'number', description: 'Reminder before meeting (minutes)' }, tags: { type: 'string[]', description: 'Meeting tags' }, metadata: { type: 'object', description: 'Additional metadata', optional: true }, }, relationships: { decisions: { type: 'decision[]', description: 'Decisions made', backref: 'meeting' }, actionItems: { type: 'actionItem[]', description: 'Action items', backref: 'meeting' }, project: { type: 'project', description: 'Related project', backref: 'meetings' }, deal: { type: 'deal', description: 'Related deal', backref: 'meetings' }, customer: { type: 'customer', description: 'Related customer', backref: 'meetings' }, series: { type: 'meeting', description: 'Parent series', backref: 'instances' }, instances: { type: 'meeting[]', description: 'Series instances', backref: 'series' }, }, actions: ['create', 'update', 'schedule', 'reschedule', 'cancel', 'start', 'end', 'summarize', 'record'], events: ['created', 'updated', 'scheduled', 'rescheduled', 'cancelled', 'started', 'ended', 'summarized', 'recorded'], }; export const Decision = { singular: 'decision', plural: 'decisions', description: 'A documented business decision', properties: { name: { type: 'string', description: 'Decision title' }, description: { type: 'string', description: 'Decision description' }, type: { type: 'string', description: 'Type of decision', examples: ['strategic', 'tactical', 'operational', 'technical', 'policy', 'resource', 'budget', 'hiring', 'process'] }, status: { type: 'string', description: 'Decision status', examples: ['proposed', 'under-review', 'approved', 'rejected', 'deferred', 'superseded', 'implemented'] }, outcome: { type: 'string', description: 'Decision outcome' }, rationale: { type: 'string', description: 'Decision rationale' }, alternatives: { type: 'string[]', description: 'Alternatives considered' }, impact: { type: 'string', description: 'Impact assessment' }, risks: { type: 'string[]', description: 'Associated risks' }, benefits: { type: 'string[]', description: 'Expected benefits' }, constraints: { type: 'string[]', description: 'Constraints considered' }, stakeholders: { type: 'string[]', description: 'Stakeholders consulted' }, decisionMaker: { type: 'string', description: 'Decision maker' }, approvers: { type: 'string[]', description: 'Required approvers' }, proposedBy: { type: 'string', description: 'Proposed by' }, proposedDate: { type: 'date', description: 'Date proposed' }, decidedDate: { type: 'date', description: 'Date decided' }, implementationDate: { type: 'date', description: 'Target implementation date', optional: true }, reviewDate: { type: 'date', description: 'Review date', optional: true }, expirationDate: { type: 'date', description: 'Decision expiration', optional: true }, documentUrl: { type: 'string', description: 'Decision document URL' }, category: { type: 'string', description: 'Decision category' }, priority: { type: 'string', description: 'Decision priority', examples: ['critical', 'high', 'medium', 'low'] }, reversible: { type: 'boolean', description: 'Is reversible' }, notes: { type: 'string', description: 'Additional notes', optional: true }, tags: { type: 'string[]', description: 'Decision tags' }, metadata: { type: 'object', description: 'Additional metadata', optional: true }, }, relationships: { meeting: { type: 'meeting', description: 'Decision meeting', backref: 'decisions' }, actionItems: { type: 'actionItem[]', description: 'Follow-up actions', backref: 'decision' }, project: { type: 'project', description: 'Related project', backref: 'decisions' }, supersedes: { type: 'decision', description: 'Previous decision', backref: 'supersededBy' }, supersededBy: { type: 'decision', description: 'Superseding decision', backref: 'supersedes' }, relatedDecisions: { type: 'decision[]', description: 'Related decisions', backref: 'relatedDecisions' }, }, actions: ['create', 'update', 'propose', 'review', 'approve', 'reject', 'defer', 'implement', 'supersede', 'archive'], events: ['created', 'updated', 'proposed', 'reviewed', 'approved', 'rejected', 'deferred', 'implemented', 'superseded', 'archived'], }; export const ActionItem = { singular: 'actionItem', plural: 'actionItems', description: 'An action item or follow-up task', properties: { name: { type: 'string', description: 'Action item title' }, description: { type: 'string', description: 'Action item description' }, status: { type: 'string', description: 'Action item status', examples: ['pending', 'in-progress', 'completed', 'cancelled', 'blocked', 'deferred'] }, priority: { type: 'string', description: 'Priority level', examples: ['critical', 'high', 'medium', 'low'] }, source: { type: 'string', description: 'Source of action item', examples: ['meeting', 'email', 'decision', 'review', 'audit', 'incident'] }, assignee: { type: 'string', description: 'Assigned person' }, assignedBy: { type: 'string', description: 'Assigned by' }, collaborators: { type: 'string[]', description: 'Collaborators' }, dueDate: { type: 'date', description: 'Due date' }, completedDate: { type: 'date', description: 'Completion date', optional: true }, createdDate: { type: 'date', description: 'Creation date' }, context: { type: 'string', description: 'Context or background' }, outcome: { type: 'string', description: 'Expected outcome' }, actualOutcome: { type: 'string', description: 'Actual outcome', optional: true }, blockers: { type: 'string[]', description: 'Current blockers' }, progress: { type: 'number', description: 'Progress percentage' }, notes: { type: 'string', description: 'Additional notes', optional: true }, tags: { type: 'string[]', description: 'Action item tags' }, metadata: { type: 'object', description: 'Additional metadata', optional: true }, }, relationships: { meeting: { type: 'meeting', description: 'Source meeting', backref: 'actionItems' }, decision: { type: 'decision', description: 'Related decision', backref: 'actionItems' }, task: { type: 'task', description: 'Linked task', backref: 'actionItem' }, project: { type: 'project', description: 'Related project', backref: 'actionItems' }, dependencies: { type: 'actionItem[]', description: 'Dependencies', backref: 'dependents' }, dependents: { type: 'actionItem[]', description: 'Dependent items', backref: 'dependencies' }, }, actions: ['create', 'update', 'assign', 'reassign', 'start', 'complete', 'cancel', 'defer', 'escalate'], events: ['created', 'updated', 'assigned', 'reassigned', 'started', 'completed', 'cancelled', 'deferred', 'escalated'], }; export const Announcement = { singular: 'announcement', plural: 'announcements', description: 'A company-wide or team announcement', properties: { title: { type: 'string', description: 'Announcement title' }, content: { type: 'string', description: 'Announcement content' }, summary: { type: 'string', description: 'Brief summary' }, type: { type: 'string', description: 'Type of announcement', examples: ['general', 'product', 'company', 'HR', 'policy', 'event', 'milestone', 'emergency', 'recognition'] }, status: { type: 'string', description: 'Announcement status', examples: ['draft', 'scheduled', 'published', 'archived', 'recalled'] }, priority: { type: 'string', description: 'Priority level', examples: ['urgent', 'high', 'normal', 'low'] }, audience: { type: 'string[]', description: 'Target audience', examples: ['all', 'engineering', 'sales', 'leadership', 'specific-team'] }, channels: { type: 'string[]', description: 'Distribution channels', examples: ['email', 'slack', 'intranet', 'all-hands', 'newsletter'] }, author: { type: 'string', description: 'Author' }, approver: { type: 'string', description: 'Approver', optional: true }, publishDate: { type: 'date', description: 'Publish date' }, expirationDate: { type: 'date', description: 'Expiration date', optional: true }, acknowledgmentRequired: { type: 'boolean', description: 'Requires acknowledgment' }, acknowledgmentCount: { type: 'number', description: 'Acknowledgment count' }, viewCount: { type: 'number', description: 'View count' }, attachments: { type: 'string[]', description: 'Attachment URLs' }, featured: { type: 'boolean', description: 'Is featured/pinned' }, comments: { type: 'boolean', description: 'Comments enabled' }, notes: { type: 'string', description: 'Internal notes', optional: true }, tags: { type: 'string[]', description: 'Announcement tags' }, metadata: { type: 'object', description: 'Additional metadata', optional: true }, }, relationships: { department: { type: 'department', description: 'Source department', backref: 'announcements' }, relatedAnnouncements: { type: 'announcement[]', description: 'Related announcements', backref: 'relatedAnnouncements' }, }, actions: ['create', 'update', 'draft', 'schedule', 'publish', 'recall', 'archive', 'acknowledge', 'feature'], events: ['created', 'updated', 'drafted', 'scheduled', 'published', 'recalled', 'archived', 'acknowledged', 'featured'], }; export const Feedback = { singular: 'feedback', plural: 'feedbacks', description: 'Feedback from customers, employees, or stakeholders', properties: { title: { type: 'string', description: 'Feedback title' }, content: { type: 'string', description: 'Feedback content' }, type: { type: 'string', description: 'Type of feedback', examples: ['feature-request', 'bug-report', 'complaint', 'praise', 'suggestion', 'review', 'survey-response', 'NPS'] }, source: { type: 'string', description: 'Feedback source', examples: ['customer', 'employee', 'partner', 'support', 'sales', 'survey', 'social', 'review-site'] }, status: { type: 'string', description: 'Feedback status', examples: ['new', 'acknowledged', 'under-review', 'in-progress', 'resolved', 'declined', 'archived'] }, sentiment: { type: 'string', description: 'Sentiment analysis', examples: ['positive', 'neutral', 'negative', 'mixed'] }, rating: { type: 'number', description: 'Rating score (1-5 or 1-10)' }, npsScore: { type: 'number', description: 'NPS score (-100 to 100)', optional: true }, category: { type: 'string', description: 'Feedback category', examples: ['product', 'service', 'support', 'pricing', 'UX', 'performance', 'documentation'] }, priority: { type: 'string', description: 'Priority level', examples: ['critical', 'high', 'medium', 'low'] }, submitter: { type: 'string', description: 'Feedback submitter' }, submitterEmail: { type: 'string', description: 'Submitter email', optional: true }, submitterType: { type: 'string', description: 'Submitter type', examples: ['customer', 'prospect', 'employee', 'partner', 'anonymous'] }, submittedDate: { type: 'date', description: 'Submission date' }, assignee: { type: 'string', description: 'Assigned handler' }, response: { type: 'string', description: 'Response to feedback', optional: true }, responseDate: { type: 'date', description: 'Response date', optional: true }, resolvedDate: { type: 'date', description: 'Resolution date', optional: true }, productArea: { type: 'string', description: 'Related product area' }, feature: { type: 'string', description: 'Related feature', optional: true }, channel: { type: 'string', description: 'Submission channel' }, publicUrl: { type: 'string', description: 'Public URL if applicable', optional: true }, votes: { type: 'number', description: 'Vote count (for public feedback)' }, notes: { type: 'string', description: 'Internal notes', optional: true }, tags: { type: 'string[]', description: 'Feedback tags' }, metadata: { type: 'object', description: 'Additional metadata', optional: true }, }, relationships: { customer: { type: 'customer', description: 'Related customer', backref: 'feedback' }, product: { type: 'product', description: 'Related product', backref: 'feedback' }, feature: { type: 'feature', description: 'Related feature', backref: 'feedback' }, task: { type: 'task', description: 'Created task', backref: 'feedback' }, relatedFeedback: { type: 'feedback[]', description: 'Related feedback', backref: 'relatedFeedback' }, }, actions: ['create', 'update', 'acknowledge', 'assign', 'respond', 'resolve', 'decline', 'archive', 'merge', 'upvote'], events: ['created', 'updated', 'acknowledged', 'assigned', 'responded', 'resolved', 'declined', 'archived', 'merged', 'upvoted'], }; export const Discussion = { singular: 'discussion', plural: 'discussions', description: 'A threaded discussion or conversation', properties: { title: { type: 'string', description: 'Discussion title' }, content: { type: 'string', description: 'Initial post content' }, type: { type: 'string', description: 'Type of discussion', examples: ['question', 'proposal', 'brainstorm', 'announcement', 'decision', 'RFC', 'retrospective'] }, status: { type: 'string', description: 'Discussion status', examples: ['open', 'active', 'resolved', 'closed', 'locked', 'archived'] }, category: { type: 'string', description: 'Discussion category' }, author: { type: 'string', description: 'Discussion author' }, participants: { type: 'string[]', description: 'Participants' }, mentions: { type: 'string[]', description: 'Mentioned users' }, replyCount: { type: 'number', description: 'Number of replies' }, viewCount: { type: 'number', description: 'View count' }, lastReplyDate: { type: 'date', description: 'Last reply date' }, lastReplyBy: { type: 'string', description: 'Last reply by' }, pinned: { type: 'boolean', description: 'Is pinned' }, locked: { type: 'boolean', description: 'Is locked' }, resolved: { type: 'boolean', description: 'Is resolved' }, resolvedBy: { type: 'string', description: 'Resolved by', optional: true }, resolvedDate: { type: 'date', description: 'Resolution date', optional: true }, visibility: { type: 'string', description: 'Visibility', examples: ['public', 'team', 'private', 'confidential'] }, createdDate: { type: 'date', description: 'Creation date' }, notes: { type: 'string', description: 'Internal notes', optional: true }, tags: { type: 'string[]', description: 'Discussion tags' }, metadata: { type: 'object', description: 'Additional metadata', optional: true }, }, relationships: { project: { type: 'project', description: 'Related project', backref: 'discussions' }, team: { type: 'team', description: 'Related team', backref: 'discussions' }, decision: { type: 'decision', description: 'Related decision', backref: 'discussions' }, parentDiscussion: { type: 'discussion', description: 'Parent discussion', backref: 'replies' }, replies: { type: 'discussion[]', description: 'Replies', backref: 'parentDiscussion' }, }, actions: ['create', 'update', 'reply', 'resolve', 'close', 'reopen', 'pin', 'unpin', 'lock', 'unlock', 'archive'], events: ['created', 'updated', 'replied', 'resolved', 'closed', 'reopened', 'pinned', 'unpinned', 'locked', 'unlocked', 'archived'], }; // Export all communication entities export const CommunicationEntities = { Meeting, Decision, ActionItem, Announcement, Feedback, Discussion, }; export default CommunicationEntities; //# sourceMappingURL=communication.js.map