# Domain Model ## Core aggregates - Organization owns users, teams, subscriptions, taxonomy, content, assignments, and analytics. - Course owns ordered CourseVersions. A published version is immutable; editing forks a draft. - CourseVersion owns Modules, Lessons, Blocks, Assessments, and version-aware taxonomy mappings. - Assignment targets learners, teams, or rules and references the assigned CourseVersion. - LearningAttempt records delivery state against the assigned version. ## Taxonomy - TaxonomyType is organization-defined and has a stable identifier and semantic key. - TaxonomyNode has a stable identifier, optional parent, status, code, metadata, and revision history. - TaxonomyRelationship supports typed non-tree relationships without requiring a graph database. - ContentTaxonomyMapping links a versioned content object to a node with mapping type, relative weight, source, and confirmation state. - Inherited mappings are resolved, never copied to every descendant. Circular hierarchies are invalid. Referenced nodes are archived rather than deleted. ## Evidence and capability - EvidenceRecord is immutable and traces learner, taxonomy node, origin, type, normalized value, strength, course version, mapping snapshot, and occurrence time. - ScoringModel versions all calculation policies. - CapabilityScore is the current projection; CapabilitySnapshot preserves history. - SkillExpectation defines an expected level for a learner, team, role, or job family. - SkillGap exists only where an expectation exists. - ContentCoverageMetric separates learning, practice, assessment, scenario, and evidence coverage. Capability score is a strength/recency-weighted evidence projection. Confidence separately reflects effective evidence volume, strength, recency, diversity, and consistency. Exposure alone cannot yield high confidence.