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

Package Model <<Rectangle>>{
Class "<<interface>>\nReadOnlyExpenseExpert" as ReadOnlyExpenseExpert
Class "<<interface>>\nReadOnlyUserPrefs" as ReadOnlyUserPrefs
Class "<<interface>>\nModel" as Model
Class ExpenseExpert
Class ModelManager
Class UserPrefs

Class UniqueExpenseList
Class UniqueExpenseCategoryList
Class UniquePersonList
Class Budget
Class Expense
Class Description
Class ExpenseCategory
Class Amount
Class.Person
Class PersonName
Class PersonAmount
Class.BudgetAmount
Class.DDate
}

Class HiddenOutside #FFFFFF
HiddenOutside ..> Model

ExpenseExpert .up.|> ReadOnlyExpenseExpert

ModelManager .up.|> Model
Model .right.> ReadOnlyUserPrefs
Model .left.> ReadOnlyExpenseExpert
ModelManager -left-> "1" ExpenseExpert
ModelManager -right-> "1" UserPrefs
UserPrefs .up.|> ReadOnlyUserPrefs

ExpenseExpert *--> "1" UniqueExpenseList
ExpenseExpert *--> "1" UniqueExpenseCategoryList
ExpenseExpert *--> "1" UniquePersonList
ExpenseExpert *--> "1" Budget
UniqueExpenseList --> "~* all" Expense
UniquePersonList --> "~* all" Person
UniqueExpenseCategoryList *--> ExpenseCategory
Expense *--> Description
Expense *--> ExpenseCategory
Expense *--> Amount
Expense *--> Date

Expense -[hidden]right-> Description
ExpenseCategory -[hidden]right-> Amount
Budget *--> BudgetAmount
Budget *--> Date
Person *--> PersonAmount
Person *--> PersonName



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