@startuml

' https://www.rijkshuisstijl.nl/organisatiespecifieke-richtlijnen/ministerie-van-binnenlandse-zaken-en-koninkrijksrelaties/deelidentiteit-kerndepartement-bzk
' https://www.rijkshuisstijl.nl/basiselementen/basiselementen-online/online-kleuren
'
' # Communicatiekleuren
' Het kerndepartement van BZK heeft uit het kleurenpalet van de rijkshuisstijl drie kleuren (elk met tint1 / tint2) gekozen:
' - Rijksoverheid hemelblauw #007bc7 (#b2d7ee/#d9ebf7)
' - Rijksoverheid rood #d52b1e (#f2bfbb/#f9dfdd)
' - Rijksoverheid groen #39870c (#c3dbb6/#e1eddb)
' Het gebruik van deze kleuren in combinatie met veel wit wordt gestimuleerd.
'
' # Tinten voor achtergrondkaders, grafieken en tabellen
' Voor achtergrondkaders, grafieken en tabellen kunnen 7 neutrale grijstinten of tinten van een communicatiekleur in stappen van 20% worden toegepast. Voor tekstachtergrond wordt grijstint1 of communicatiekleur tint2 aanbevolen om aan de contrasteisen voor een goede leesbaarheid te voldoen.
'
' Rijksoverheid grijs 1 #f3f3f3
' Rijksoverheid grijs 2 #e6e6e6
' Rijksoverheid grijs 3 #cccccc
' Rijksoverheid grijs 4 #b4b4b4
' Rijksoverheid grijs 5 #999999
' Rijksoverheid grijs 6 #696969
' Rijksoverheid grijs 7 #535353

' skinparam linetype ortho
' skinparam linetype polyline

skinparam shadowing false

skinparam class {
    ArrowColor #39870c
    ArrowThickness 1.5
    BackgroundColor #ffffff
    BorderColor #007bc7
    BorderColor<<extern>> #999999
    FontColor<<extern>> #999999
'     StereotypeFontStyle italic
}

skinparam package {
    FontColor #d52b1e
    FontStyle normal
}

hide empty members

hide circle

hide stereotype

' hide AbstractObject

' hide MetaObject

package "Fysiek" <<rectangle>> #e6e6e6 {
    AbstractBouwwerk <|-- Bouwwerk
    AbstractBouwwerk <|-- Bouwwerkdeel
    Gebouw "1" *-- "1..*" Bouwwerk
}

package "Functie" <<rectangle>> #e6e6e6 {
    package "Gebruik" <<rectangle>> #f3f3f3 {
        AbstractGebruik <|-- Gebruikseenheid
        AbstractGebruik <|-- Voorziening
        Gebruikseenheid "*" --> "*" Voorziening
    }
    package "Indeling" <<rectangle>> #f3f3f3 {
        AbstractIndeling <|-- Verblijfseenheid
    }
    package "Vindbaarheid" <<rectangle>> #f3f3f3 {
        class Toegang {
        }
        class Verdieping {
        }
    }
}

' package "Representatie" <<rectangle>> #e6e6e6 {
'     class AbstractRepresentatie {
'     }
'     class GebouwRepresentatie {
'     }
'     class GebruikseenheidRepresentatie {
'     }
' '     class VerblijfseenheidRepresentatie {
' '     }
' }

' together {
'     class AbstractObject
'     class MetaObject
' }

together {
    class Adres
    class Bouwbesluit
}

' together {
'     class AbstractBouwwerk
'     class Bouwwerk
'     class Bouwwerkdeel
' }
'
' together {
'     class Gebruikseenheid
'     class Verblijfseenheid
' }
'
' together {
'     class Verblijfseenheid
'     class Verdieping
' }

AbstractObject <|-- AbstractBouwwerk
AbstractObject <|-- AbstractIndeling
AbstractObject <|-- Gebouw
AbstractObject <|-- AbstractGebruik
AbstractObject "1" <- "1..*" MetaObject
Bouwwerk "1" *-- "1..*" Bouwwerkdeel
Gebruikseenheid "*" --> "1..*" Gebouw
Gebruikseenheid "1" o-- "*" Verblijfseenheid
Bouwwerk "*" *-- "*" Voorziening
Bouwwerk "*" ..> "1..*" Bouwbesluit
Verblijfseenheid "0..1" --> "*" Voorziening
Verblijfseenheid "*" --> "1..*" Verdieping
AbstractIndeling <|-- Verdieping
Gebouw "1" *-- "*" AbstractIndeling
Gebruikseenheid "1" --> "*" Toegang
Toegang "0..1" --> "1" Adres : hoofdadres
Toegang "0..1" --> "*" Adres : nevenadres
' Gebouw "1" <|-- "1..*" GebouwRepresentatie
' AbstractRepresentatie <|-- GebouwRepresentatie
' Gebruikseenheid "1" <|-- "1..*" GebruikseenheidRepresentatie
' AbstractRepresentatie <|-- GebruikseenheidRepresentatie
' ' Verblijfseenheid "1" <|-- "1..*" VerblijfseenheidRepresentatie
' ' AbstractRepresentatie <|-- VerblijfseenheidRepresentatie

abstract class AbstractBouwwerk << Objecttype >> {
..
    Een aaneengesloten en in
    één keer gerealiseerde
    bouwkundige constructie,
    ongeacht de bereikbaarheid
    binnendoor.
}

abstract class AbstractGebruik << Objecttype >> {
..
    Kleinste functioneel ondeelbare
    eenheid van gebruik.
}

abstract class AbstractObject << Objecttype >> {
    identificatie
    geconstateerd
    status
}

abstract class AbstractIndeling << Objecttype >> {
    geometrie
}

class Adres << extern >> {
}

class Bouwwerk << Objecttype >> {
    bouwgeometrie [0..1]
    opleverdatum [1..1]
    sloopgeometrie [0..1]
    vigerendBouwbesluit [1..1]
    ..
    Het grootst mogelijke geheel
    van een bouwkundige
    constructie.
}

class Bouwwerkdeel << Objecttype >> {
    typeConstructie: TypeConstructie [1..1]
    ..
    Bouwkundig-constructief homogeen
    gedeelte van een bouwwerk.
}

class Gebouw << Objecttype >> {
    typeGebouw: TypeGebouw [1..*]
    ..
    Het grootst mogelijke homogene
    en tezamen duurzaam met de
    aarde verbonden geheel van
    aaneengesloten bouwwerken
    waarop de kleinst mogelijke
    verscheidenheid van
    attribuutwaarden integraal van
    toepassing is, ongeacht de
    bereikbaarheid binnendoor.
}

class Gebruikseenheid << Objecttype >> {
    feitelijkGebruik
    gebruiksdoel: Gebruiksdoel [1..*]
    vergundGebruik
    ..
    Samenstel van verblijfseenheden
    en gebouwen die als eenheid
    worden gebruikt.
    ==
    RELEVANT VOOR WOZ
}

class MetaObject << extern >> {
'     typeMetagegeven: TypeMetagegeven
'     waarde
}

class Bouwbesluit << extern >> {
}

class Toegang << Objecttype >> {
    geometrie
    ..
    Deur of andere voorziening
    die toegang geeft.
}

class Verblijfseenheid << Objecttype >> {
    oppervlakte
    ..
    Kleinste binnen een gebouw
    gelegen aaneengesloten eenheid
    van gebruik die volledig
    binnendoor bereikbaar is en
    ontsloten wordt via een eigen
    toegang vanaf de openbare weg,
    een erf of een gedeelde
    verkeersruimte, onderwerp kan
    zijn van goederenrechtelijke
    rechtshandelingen en in
    functioneel opzicht zelfstandig is.
    ==
    DUS ALS EEN VERBLIJFSOBJECT
    UIT DE BAG, MAAR ALTIJD
    BINNENDOOR BEREIKBAAR EN ZONDER
    GEBRUIKSDOEL EN DAAROM ZONDER
    EIS VAN VOORZIENINGEN.
}

' abstract class AbstractRepresentatie << Objecttype >> {
'     geometrie
'     levelOfDetail: LevelOfDetail [1..1]
'     schaal: Schaalbereik [1..1]
' }
'
' class GebouwRepresentatie << Objecttype >> {
'     ..
'     Authentieke gegeneraliseerde
'     representatie van een Gebouw.
' }
'
' ' class VerblijfseenheidRepresentatie << Objecttype >> {
' '     ..
' '     Authentieke gegeneraliseerde
' '     representatie van een
' '     Verblijfseenheid.
' ' }
'
' class GebruikseenheidRepresentatie << Objecttype >> {
'     ..
'     Authentieke gegeneraliseerde
'     representatie van een
'     Gebruikseenheid.
' }

class Verdieping << Objecttype >> <<Vrijwillig>> {
    verdiepingsaanduiding
    ..
    ==
    SCHRAPPEN INDIEN NIET
    RELEVANT VOOR WOZ
}

class Voorziening << Objecttype >> {
    geometrie
    typeVoorziening: TypeVoorziening
    ..
    Installatie of andere voorziening.
    ==
    RELEVANT BIJ HET INTERPRETEREN VAN
    OBJECTEN VOOR BAG, WOZ EN OOV
}

@enduml
