type Address
  {
    street: String
    city: String
    postalCode: String
  }

type Concept
  {
    id: String!
    name: String
    description: String
    image: String
  }

type Container
  {
    persons: [Person]
    organizations: [Organization]
  }

type DiagnosisConcept
  {
    id: String!
    name: String
    description: String
    image: String
  }

type EmploymentEvent
  {
    startedAtTime: Date
    endedAtTime: Date
    duration: Float
    isCurrent: Boolean
    employedAt: Organization
  }

type Event
  {
    startedAtTime: Date
    endedAtTime: Date
    duration: Float
    isCurrent: Boolean
  }

type FamilialRelationship
  {
    startedAtTime: Date
    endedAtTime: Date
    relatedTo: String
    type: FamilialRelationshipType!
    relatedTo: Person!
  }

interface HasAliases
  {
    aliases: [String]
  }

type MedicalEvent
  {
    startedAtTime: Date
    endedAtTime: Date
    duration: Float
    isCurrent: Boolean
    inLocation: Place
    diagnosis: DiagnosisConcept
    procedure: ProcedureConcept
  }

type NamedThing
  {
    id: String!
    name: String
    description: String
    image: String
  }

type Organization implements HasAliases
  {
    id: String!
    name: String
    description: String
    image: String
    missionStatement: String
    foundingDate: String
    foundingLocation: Place
    aliases: [String]
  }

type Person implements HasAliases
  {
    id: String!
    name: String
    description: String
    image: String
    primaryEmail: String
    birthDate: String
    ageInYears: Integer
    gender: GenderType
    currentAddress: Address
    hasEmploymentHistory: [EmploymentEvent]
    hasFamilialRelationships: [FamilialRelationship]
    hasMedicalHistory: [MedicalEvent]
    aliases: [String]
  }

type Place implements HasAliases
  {
    id: String!
    name: String
    aliases: [String]
  }

type ProcedureConcept
  {
    id: String!
    name: String
    description: String
    image: String
  }

type Relationship
  {
    startedAtTime: Date
    endedAtTime: Date
    relatedTo: String
    type: String
  }

interface WithLocation
  {
    inLocation: Place
  }

