UNPKG

@restnfeel/agentc-starter-kit

Version:

한국어 기업용 CMS 모듈 - Task Master AI와 함께 빠르게 웹사이트를 구현할 수 있는 재사용 가능한 컴포넌트 시스템

268 lines (243 loc) 6.18 kB
/** * Configuration Control Board (CCB) Type Definitions * Manages change requests and impact assessments for CMS configuration items */ export type ChangeRequestStatus = | "submitted" | "under_review" | "impact_assessment" | "approved" | "rejected" | "deferred" | "escalated" | "remanded" | "implemented" | "closed"; export type Priority = "low" | "medium" | "high" | "critical"; export type ImpactCategory = | "cost" | "schedule" | "performance" | "security" | "system_interfaces" | "other_systems"; export type ChangeType = | "component_modification" | "template_change" | "configuration_update" | "database_schema" | "api_modification" | "security_update" | "performance_optimization"; export interface ChangeRequest { id: string; title: string; description: string; requesterId: string; requesterName: string; requestedAt: Date; priority: Priority; changeType: ChangeType; status: ChangeRequestStatus; affectedItems: ConfigurationItem[]; justification: string; expectedBenefits: string; risksIdentified: string; proposedImplementationDate?: Date; assignedReviewer?: string; ccbMeetingDate?: Date; decision?: CCBDecision; comments: Comment[]; attachments: Attachment[]; createdAt: Date; updatedAt: Date; } export interface ConfigurationItem { id: string; name: string; type: | "component" | "template" | "configuration" | "database" | "api" | "asset"; currentVersion: string; baseline: string; lastModified: Date; owner: string; dependencies: string[]; criticalityLevel: "low" | "medium" | "high" | "critical"; } export interface ImpactAssessment { id: string; changeRequestId: string; assessorId: string; assessorName: string; assessmentDate: Date; overallRisk: "low" | "medium" | "high" | "critical"; impacts: ImpactDetail[]; estimatedEffort: EffortEstimate; resourceRequirements: ResourceRequirement[]; dependencies: DependencyImpact[]; testingRequirements: string; rollbackPlan: string; mitigationStrategies: string[]; recommendations: string; approved: boolean; approvedBy?: string; approvedAt?: Date; } export interface ImpactDetail { category: ImpactCategory; description: string; severity: "minimal" | "moderate" | "significant" | "major"; likelihood: "low" | "medium" | "high"; estimatedCost?: number; scheduleImpact?: number; // days mitigationRequired: boolean; } export interface EffortEstimate { developmentHours: number; testingHours: number; deploymentHours: number; documentationHours: number; totalHours: number; estimatedCost: number; confidence: "low" | "medium" | "high"; } export interface ResourceRequirement { type: "developer" | "designer" | "qa" | "devops" | "product_manager"; skillLevel: "junior" | "mid" | "senior" | "lead"; hoursRequired: number; availability: "available" | "limited" | "unavailable"; } export interface DependencyImpact { itemId: string; itemName: string; impactType: | "breaking_change" | "compatibility_issue" | "enhancement" | "no_impact"; description: string; actionRequired: string; } export interface CCBDecision { id: string; changeRequestId: string; decision: "approved" | "rejected" | "deferred" | "escalated" | "remanded"; decisionDate: Date; decidedBy: string; rationale: string; conditions?: string[]; nextReviewDate?: Date; escalationReason?: string; votingMembers: CCBMember[]; votes: Vote[]; } export interface CCBMember { id: string; name: string; role: | "chairperson" | "technical_lead" | "product_manager" | "security_officer" | "qa_lead" | "member"; department: string; votingPower: number; // 1-3, higher numbers for more senior roles } export interface Vote { memberId: string; memberName: string; vote: "approve" | "reject" | "defer" | "abstain"; comments?: string; conditions?: string[]; } export interface Comment { id: string; authorId: string; authorName: string; content: string; createdAt: Date; isInternal: boolean; // true for CCB-only comments } export interface Attachment { id: string; fileName: string; fileSize: number; mimeType: string; uploadedBy: string; uploadedAt: Date; description?: string; url: string; } export interface CCBConfiguration { quorumSize: number; votingThreshold: number; // percentage required for approval defaultReviewDays: number; escalationThreshold: number; // days before auto-escalation meetingSchedule: string; // cron expression notificationSettings: NotificationSettings; } export interface NotificationSettings { emailEnabled: boolean; slackEnabled: boolean; webhookUrl?: string; notifyOnSubmission: boolean; notifyOnDecision: boolean; notifyOnEscalation: boolean; reminderDaysBefore: number; } // Workflow state machine types export interface CCBWorkflowState { currentStatus: ChangeRequestStatus; allowedTransitions: ChangeRequestStatus[]; requiredActions: string[]; autoTransitionRules?: AutoTransitionRule[]; } export interface AutoTransitionRule { condition: string; targetStatus: ChangeRequestStatus; delayDays?: number; } // Search and filtering types export interface CCBSearchFilters { status?: ChangeRequestStatus[]; priority?: Priority[]; changeType?: ChangeType[]; requesterId?: string; assignedReviewer?: string; dateRange?: { start: Date; end: Date; }; impactLevel?: ("low" | "medium" | "high" | "critical")[]; } export interface CCBSearchResult { items: ChangeRequest[]; totalCount: number; page: number; limit: number; hasMore: boolean; } // API response types export interface CCBApiResponse<T = unknown> { success: boolean; data?: T; error?: string; message?: string; timestamp: Date; } export interface CCBMetrics { totalRequests: number; pendingRequests: number; approvedRequests: number; rejectedRequests: number; averageProcessingTime: number; // days requestsByPriority: Record<Priority, number>; requestsByType: Record<ChangeType, number>; impactDistribution: Record<string, number>; }