@startuml
abstract class Person {
  +name
}

abstract class Employee extends Person {
  +ssn
  +email
}

class Tap extends Employee {
}

class Vip extends Employee {
}

class Dean extends Vip {
}

class ResearchAssociate extends Vip {
  +field
}

class Supervisor extends ResearchAssociate {
}

class Lecturer extends ResearchAssociate {
}

class Student extends Person {
}

abstract class Org {
  +orgName
}

interface Place {
  +address
}

class University implements Place
class University extends Org {
}

class Faculty extends Org {
}
Faculty -* University
Faculty "1" *- Dean

class Institute implements Place
class Institute extends Org {
  +address
}
Institute -* Faculty
Intitute *- ResearchAssociate

abstract Project {
  +name
  +dateBegin
  +dateEnd
}

class ProjectHours {
}
ProjectHours "1" *-- Project
ProjectHours o-- ResearchAssociate

interface ProvidesEcts {
  +ects
}

class Course implements ProvidesEcts
class Course extends Project {
  +id
  +name
  +hoursWeekly
}
Course -- Lecturer

class StudentProject implements ProvidesEcts
class StudentProject extends Project {
}
StudentProject --o Vip
StudentProject -- Supervisor

class Programme {
  addActivity()
  valid()
}
Programme o- Course
Programme o- StudentProject
Programme --* Student

class Bachelorizer {
}
Bachelorizer --> Programme
@enduml