@xats-org/types
Version:
Shared TypeScript types for xats
179 lines • 6.25 kB
TypeScript
/**
* xats v0.5.0 Collaborative Project Types
*
* TypeScript type definitions for collaborative project features
* introduced in xats schema version 0.5.0
*/
import type { XatsObject } from './common.js';
import type { SemanticText, Resource } from './document.js';
/**
* Collaborative project block content for structured group work
*/
export interface CollaborativeProjectContent {
/** Title of the collaborative project */
title: SemanticText;
/** Detailed description of the project objectives and requirements */
description: SemanticText;
/** Category of collaborative project */
projectType: 'research-project' | 'case-study-analysis' | 'presentation-development' | 'peer-review-activity' | 'design-challenge' | 'problem-solving-exercise' | 'creative-collaboration' | 'literature-review' | 'data-analysis-project' | 'peer-teaching-activity';
/** Defined roles for project participants with specific responsibilities */
roles: ProjectRole[];
/** Project deliverables with deadlines and assessment criteria */
deliverables: ProjectDeliverable[];
/** Peer assessment configuration for collaborative evaluation */
peerAssessment?: PeerAssessmentConfig;
/** Project timeline with phases and milestones */
timeline?: ProjectTimeline;
/** Resources available for the project */
resources?: Resource[];
/** Detailed instructions for project execution */
instructions?: SemanticText;
/** Any constraints or limitations for the project */
constraints?: SemanticText[];
}
/**
* Project role definition with responsibilities and requirements
*/
export interface ProjectRole {
/** Unique identifier for the role */
roleId: string;
/** Display name of the role */
title: string;
/** Detailed description of the role */
description: SemanticText;
/** Specific responsibilities for this role */
responsibilities: SemanticText[];
/** Skills required for this role */
requiredSkills?: string[];
/** Maximum number of participants for this role */
maxParticipants?: number;
}
/**
* Project deliverable with assessment criteria
*/
export interface ProjectDeliverable {
/** Unique identifier for the deliverable */
deliverableId: string;
/** Display name of the deliverable */
title: string;
/** Detailed description of the deliverable */
description: SemanticText;
/** Format type of the deliverable */
format: 'document' | 'presentation' | 'media' | 'code' | 'prototype' | 'report' | 'analysis' | 'other';
/** Due date for the deliverable */
dueDate?: string;
/** Whether entire group collaborates on this deliverable */
isGroupDeliverable: boolean;
/** Assessment criteria for grading */
assessmentCriteria?: AssessmentCriterion[];
}
/**
* Assessment criterion for deliverable evaluation
*/
export interface AssessmentCriterion {
/** Name of the criterion */
criterion: string;
/** Weight of this criterion in overall grade (0-1) */
weight: number;
/** Description of the criterion */
description?: SemanticText;
}
/**
* Peer assessment configuration
*/
export interface PeerAssessmentConfig {
/** Whether peer assessment is enabled */
enabled: boolean;
/** Type of peer assessment */
assessmentType?: 'peer-evaluation' | 'self-reflection' | 'mutual-feedback' | 'role-assessment' | 'contribution-rating';
/** Assessment criteria for peer evaluation */
criteria?: PeerAssessmentCriterion[];
/** Whether assessments are anonymous */
anonymity?: boolean;
/** Whether all members assess all other members */
reciprocity?: boolean;
}
/**
* Peer assessment criterion
*/
export interface PeerAssessmentCriterion {
/** Unique identifier for the criterion */
criterionId: string;
/** Display name of the criterion */
name: string;
/** Description of what this criterion measures */
description: SemanticText;
/** Scale configuration for rating */
scale: AssessmentScale;
}
/**
* Assessment scale configuration
*/
export interface AssessmentScale {
/** Type of scale */
type: 'numeric' | 'likert' | 'categorical' | 'binary';
/** Range for numeric scales */
range?: {
min: number;
max: number;
};
/** Labels for scale points or categorical options */
labels?: string[];
}
/**
* Project timeline with phases
*/
export interface ProjectTimeline {
/** Project phases with activities and deadlines */
phases?: ProjectPhase[];
/** Total estimated work hours for the project */
estimatedHours?: number;
}
/**
* Project phase definition
*/
export interface ProjectPhase {
/** Unique identifier for the phase */
phaseId: string;
/** Display name of the phase */
title: string;
/** Description of the phase activities */
description: SemanticText;
/** Phase start date */
startDate?: string;
/** Phase end date */
endDate?: string;
/** Activities to be completed in this phase */
activities?: SemanticText[];
/** References to deliverables due in this phase */
deliverableIds?: string[];
}
/**
* Collaborative project block with all metadata
*/
export interface CollaborativeProjectBlock extends XatsObject {
/** Block type URI for collaborative projects */
blockType: 'https://xats.org/vocabularies/blocks/collaborativeProject';
/** Collaborative project content */
content: CollaborativeProjectContent;
}
/**
* Utility functions for collaborative projects
*/
/**
* Validate that a collaborative project has required components
*/
export declare function validateCollaborativeProject(project: CollaborativeProjectContent): string[];
/**
* Calculate total assessment weight for deliverable
*/
export declare function calculateDeliverableWeight(deliverable: ProjectDeliverable): number;
/**
* Get all unique skills required across all roles
*/
export declare function getRequiredSkills(project: CollaborativeProjectContent): string[];
/**
* Check if project timeline is consistent with deliverable dates
*/
export declare function validateTimeline(project: CollaborativeProjectContent): string[];
//# sourceMappingURL=collaborative.d.ts.map