@startuml
!define LIGHTGREEN
!includeurl https://raw.githubusercontent.com/Drakemor/RedDress-PlantUML/master/style.puml

scale 4

skinparam classAttributeIconSize 0

title <b>"Personal Finance Management"</b>\nDomain Model

'__Layout
together {
    object PERSON
    class dummy
}
PERSON -[hidden] dummy
dummy -[hidden]down- GROUP
hide dummy

together {
    object TRANSACTION
    object SCHEDULING
}
TRANSACTION -[hidden] SCHEDULING

CATEGORY -[hidden]down- TRANSACTION

TRANSACTION -[hidden]down- LEDGER

'__Connections
PERSON "1..*" -- "1" ADDRESS : has >
PERSON "1..*" -- "*" GROUP : can be grouped >
PERSON "1" -- "*" CATEGORY : defines >
PERSON "0..1" -- "*" ACCOUNT : specifies >
PERSON "0..1" -- "1" LEDGER : holds >

PERSON <-- PERSON : <size:10><b>0..1<size:8><b><color: #FFFFFF>.................\n<size:8><b>Father<size:8><b><color: #FFFFFF>.................
PERSON <-- PERSON : <size:10><b>0..1<size:8><b><color: #FFFFFF>.................\n<size:8><b>Mother<size:8><b><color: #FFFFFF>.................
PERSON <-- PERSON : <size:10><b>*\n<size:8><b>Sibling(s)

GROUP "1" -- "*" CATEGORY : defines >
GROUP "0..1" -- "*" ACCOUNT : specifies >
GROUP "0..1" -- "1" LEDGER : holds >

CATEGORY "1" -- "*" TRANSACTION : classifies >
CATEGORY "1" -- "*" SCHEDULING : classifies >

ACCOUNT "1" -[#0000FF]-- "*" TRANSACTION : <color: #0000FF><b>Credit
ACCOUNT "1" -[#0000FF]-- "*" TRANSACTION : <color: #0000FF><b>Debit
ACCOUNT "1" -[#006600]-- "*" SCHEDULING : <color: #006600><b>Credit
ACCOUNT "1" -[#006600]-- "*" SCHEDULING : <color: #006600><b>Debit

TRANSACTION "1..*" -- "1" SCHEDULING : may have >

LEDGER "1" -- "*" TRANSACTION : records >

'__Conceptual classes {attributes}
object PERSON {
-Name
-Birthplace
-Birthdate
<size: 80><color: #CCCCCC>.
}
object ADDRESS {
-Street
-Door Number
-Postal Code
-City
-Country
}
object GROUP {
-People in charge
-Member(s)
-Denomination
-Description
-Date of creation
}
object LEDGER {
-Records
}
object TRANSACTION {
-Type (credit or debit)
-Description
-Date
-Amount
}
object CATEGORY {
-Denomination
}
object SCHEDULING {
-Type (credit or debit)
-Destiny account
-Origin account
-Description
-Amount
-Date
-Periodicity
}
object ACCOUNT {
-Denomination
-Description
}

@enduml