@startuml

' --------v-v-v-v-v-v-v-v--------
' 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 defaultFontColor black
skinparam defaultFontName Lucida Sans
skinparam defaultFontSize 11
skinparam defaultFontStyle normal
skinparam defaultMonospacedFontName Lucida Sans Typewriter
' skinparam defaultTextAlignment left
' skinparam lineType ortho
' skinparam lineType polyline
skinparam shadowing false
skinparam wrapWidth 165

skinparam class {
    ArrowColor #39870c
    ArrowFontSize 10
'     ArrowTextAlignment center
    ArrowThickness 1.5
'     AttributeFontColor #000000
    AttributeIconSize 0
    BackgroundColor #ffffff
    BorderColor #007bc7
    BorderThickness 2
    FontColor #007bc7
    FontSize 12
    FontStyle bold
'     StereotypeFontStyle italic
'     StereotypeFontColor #000000
}

skinparam class<<extern>> {
    AttributeFontColor #b4b4b4
    BorderColor #b4b4b4
    FontColor #b4b4b4
    StereotypeFontColor #b4b4b4
}

skinparam class<<vrijwillig>> {
    BorderThickness 1
    FontStyle normal
}

skinparam note {
    BackgroundColor #fdf6bb
    BorderColor #f9e11e
    FontColor #007bc7
}

skinparam package {
    BackgroundColor #f3f3f3
    BorderColor #d52b1e
    FontColor #d52b1e
    FontSize 12
    FontStyle bold
    Style rectangle
}

skinparam package<< subpackage >> {
    BackgroundColor #e6e6e6
    BorderColor #e6e6e6
    FontStyle normal
}

hide circle

hide empty members

hide stereotype

' hide AbstractObject


' =================================================================================================


' hide Eigendom

' hide Gebruik

package "FUNCTIE" {
    package "Gebruik" << subpackage >> {
        class Gebruikseenheid {
        }
        class Gebruiksdeel {
        }
    '     note top of Gebruiksdeel : Een woning die alleen bereikbaar is via een winkel vormt een apart gebruiksdeel binnen dezelfde verblijfseenheid als de winkel. Deze gebruiksdelen gebruiken tezamen de gehele verblijfseenheid van de winkel met woning. Idem bij een bedrijfsverzamelgebouw. Als een gebruikseenheid de gehele verblijfseenheid gebruikt, is er geen gebruiksdeel.
    }
    package "Eigendom" << subpackage >> {
        class Eigendomseenheid {
        }
        class Eigendomsdeel {
        }
'         note right of Eigendomseenheid : Relaties met fysieke objecten op eenzelfde manier te modelleren als bij een gebruikseenheid, maar omwille van de leesbaarheid hier niet verder uitgewerkt.
'         note "Relaties met fysieke objecten op eenzelfde manier te modelleren als bij een gebruikseenheid, maar omwille van de leesbaarheid hier niet verder uitgewerkt." AS n1
    }
    note right of Eigendomseenheid : Relaties met fysieke objecten op eenzelfde manier te modelleren als bij een gebruikseenheid, maar omwille van de leesbaarheid hier niet verder uitgewerkt.
}

package "FYSIEK" {
'     package "Gebeurtenis" << subpackage >> {
'         class Bouwwerk << Objecttype >> {
'         }
'     }
    class Bouwlaag << Objecttype >> << vrijwillig >> {
    }
'     class Gebouw << Objecttype >> {
'     }
    class Toegang << Objecttype >> {
    }
    class Voorziening << Objecttype >> {
    }
    package "Gebouwdelen" << subpackage >> {
        class Verblijfseenheid << Objecttype >> {
        }
        class Verkeerseenheid << Objecttype >> {
        }
        class Resteenheid << Objecttype >> {
        }
    }
}

' ABSTRACT
' AbstractObject <|-- Gebruikseenheid
' AbstractObject <|-- Gebruiksdeel
' AbstractObject <|-- Eigendomseenheid
' AbstractObject <|-- Eigendomsdeel

' FYSIEK
' Verkeerseenheid "*" -> "2..*" Verblijfseenheid
' Verblijfseenheid "1" --> "1..*" Toegang

' GEBRUIK
Gebruikseenheid "*" --> "*" Voorziening : gebruikt >
Gebruikseenheid "1" o-- "*" Verblijfseenheid
Gebruikseenheid "*" --> "*" Resteenheid : gebruikt >
Gebruikseenheid "1" -right-> "*" Gebruiksdeel : gebruikt >
Gebruikseenheid "1" --> "+ hoofdtoegang\nmet adres 1" Toegang : gebruikt >
Gebruikseenheid "*" --> "*" Bouwlaag : ligt\nop >
Gebruikseenheid "2..*" --> "*" Verkeerseenheid : gebruikt >
Gebruiksdeel "2..*" --* "1" Verblijfseenheid

' EIGENDOM
Gebruikseenheid "*" -left-> "*" Eigendomseenheid : gebruikt >
Gebruikseenheid "*" -left-> "*" Eigendomsdeel : gebruikt >
Eigendomseenheid "1" --> "*" Eigendomsdeel : bezit

abstract class AbstractObject << Objecttype >> {
    + identificatie
    + documentdatum
    + documentnummer
    + geconstateerd
    + status
}

note top of AbstractObject : Extra attributen voor alle objecttypen, maar omwille van de leesbaarheid hier niet verder uitgewerkt.

class Eigendomsdeel << Objecttype >> << extern >> {
'     --
    Aaneengesloten gedeelte van een gebouwdeel dat in eigendom is van een andere eigendomseenheid dan de andere eigendomsdelen van hetzelfde gebouwdeel.
}

class Eigendomseenheid << Objecttype >> << extern >> {
'     --
    Kleinste ondeelbare samenstel van alle gebouwdelen en voorzieningen die als geheel onderwerp kan zijn van goederenrechtelijke rechtshandelingen.
}

class Gebruiksdeel << Objecttype >> {
    + geometrie
    + oppervlakte
    --
    Aaneengesloten gedeelte van een verblijfseenheid dat wordt gebruikt door een andere gebruikseenheid dan de andere gebruiksdelen van dezelfde verblijfseenheid.
}

class Gebruikseenheid << Objecttype >> {
    + feitelijkGebruik
    + gebruiksdoel: Gebruiksdoel [1..*]
    + vergundGebruik
    --
    Kleinste ondeelbare samenstel van alle nabijgelegen gebouwdelen en voorzieningen die als geheel wordt gebruikt en in functioneel opzicht zelfstandig is.
}

@enduml
