@startuml
!include style.puml
skinparam arrowThickness 1.1
skinparam arrowColor MODEL_COLOR
skinparam classBackgroundColor MODEL_COLOR

Package Model as ModelPackage <<Rectangle>>{
Class "<<interface>>\nReadOnlyAddressBook" as ReadOnlyAddressBook
Class "<<interface>>\nReadOnlyUserPrefs" as ReadOnlyUserPrefs
Class "<<interface>>\nModel" as Model
Class AddressBook
Class ModelManager
Class UserPrefs

Class UniquePatientList
Class Patient
Class Address
Class Name
Class Phone
Class Tag
Class Note

Class I #FFFFFF
}

Class HiddenOutside #FFFFFF
HiddenOutside ..> Model

AddressBook .up.|> ReadOnlyAddressBook

ModelManager .up.|> Model
Model .right.> ReadOnlyUserPrefs
Model .left.> ReadOnlyAddressBook
ModelManager -left-> "1" AddressBook
ModelManager -right-> "1" UserPrefs
UserPrefs .up.|> ReadOnlyUserPrefs

AddressBook *--> "1" UniquePatientList
UniquePatientList --> "~* all" Patient
Patient *--> Name
Patient *--> Phone
Patient *--> Address
Patient *--> "*" Tag
Patient *--> "*" Note

Patient -[hidden]up--> I
UniquePatientList -[hidden]right-> I

Name -[hidden]right-> Phone
Phone -[hidden]right-> Address

ModelManager --> "~* filtered" Patient
@enduml
