module core waste <https://thoughtroam.abcdefghijklmnopqrstuvxyzæøå.dk/waste/core#> is

  import [ dc skos xsd ]
  import [ waste_view ]

  entity Resident is
    identity citizenId -> unknown

    viewsWasteAs -> {unique 0..6} waste_view:Grossness
  end

  entity Household is
    identity apartmentId -> unknown

    furnishedWith -> {10} Bin
    inhabitedBy -> {1..4} Resident
  end

  entity Host is
    identity HostingId -> unknown

    providesContainer -> Container
  end

  entity WasteCollector

  entity Bin is
    identity binId -> unknown

    forTrashTypeType -> TrashType
    binCapacity -> BinCapacity
    binSpareCapacity -> BinSpareCapacity
  end

  enum TrashType of
    @owl:equivalentClass = unsigned
    Food is
      @rdf:value = 1
      @skos:prefLabel = "Food waste"@en, "Mad"@da
    end
    Paper is
      @rdf:value = 2
      @skos:prefLabel = "Paper"@en, "Papir"@da
    end
    Cardboard is
      @rdf:value = 3
      @skos:prefLabel = "Cardboard"@en, "Pap"@da
    end
    Metal is
      @rdf:value = 4
      @skos:prefLabel = "Metal"@en, "Metal"@da
    end
    Glass is
      @rdf:value = 5
      @skos:prefLabel = "Glass"@en, "Glas"@da
    end
    Plastic is
      @rdf:value = 6
      @skos:prefLabel = "Plastic"@en, "Plast"@da
    end
    Textiles is
      @rdf:value = 7
      @skos:prefLabel = "Textiles"@en, "Tekstil"@da
    end
    Cartons is
      @rdf:value = 8
      @skos:prefLabel = "Paper"@en, "Papir"@da
      @skos:prefLabel = "Food and beverage cartons"@en, "Mad- og drikkekartoner"@da
    end
    Residual is
      @rdf:value = 9
      @skos:prefLabel = "Residual waste"@en, "Restaffald"@da
    end
    Hazardous is
      @rdf:value = 10
      @skos:prefLabel = "Hazardous waste"@en, "Farligt affald"@da
    end
  end

  event BinEmptied source Bin is
    binEmptied -> Bin
    binEmptiedBy -> Resident
    binEmptiedTo -> Container
    binResets -> BinSpareCapacity
  end

  event BinFilled source Bin is
    by -> Resident
  end

  event ContainerEmptied source Container is
    containerEmptied -> Container
    containerEmptiedBy -> WasteCollector
    containerEmptiedTo -> RecyclingPlant
    containerResets -> ContainerSpareCapacity
  end

  structure Container

  structure Incinerator

end