:information_source: **Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.
+
:information_source: **Note:** For a clearer Class Diagram image, please refer to the handdrawn version below, it is exactly the same as the Class Diagram generated above, only drawn with straight lines for clarity and neatness.
-
+
diff --git a/docs/diagrams/ModelClassDiagram.puml b/docs/diagrams/ModelClassDiagram.puml
index 0de5673070d..ff937ab63c6 100644
--- a/docs/diagrams/ModelClassDiagram.puml
+++ b/docs/diagrams/ModelClassDiagram.puml
@@ -13,12 +13,23 @@ Class ModelManager
Class UserPrefs
Class UniquePersonList
-Class Person
-Class Address
-Class Email
+Class UniqueAppointmentList
+
+Class "{Abstract}\nPerson" as Person
+Class Patient
+Class Doctor
+
+Class Appointment
+Class AppointmentDate
+Class AppointmentID
+
+Class Type
+Class NRIC
Class Name
+Class DoB
Class Phone
-Class Tag
+
+Class "<
>\nType\n\nPatient\nDoctor"
Class I #FFFFFF
}
@@ -36,19 +47,22 @@ ModelManager -right-> "1" UserPrefs
UserPrefs .up.|> ReadOnlyUserPrefs
AddressBook *--> "1" UniquePersonList
-UniquePersonList --> "~* all" Person
-Person *--> Name
-Person *--> Phone
-Person *--> Email
-Person *--> Address
-Person *--> "*" Tag
+AddressBook *--> "1" UniqueAppointmentList
+UniquePersonList ---> "~* all" Person
+UniqueAppointmentList -down--> "~* all" Appointment
+Person *---> Type
+Person *---> NRIC
+Person *---> Name
+Person *---> DoB
+Person *---> Phone
-Person -[hidden]up--> I
-UniquePersonList -[hidden]right-> I
+Doctor .right.|> Person
+Patient .--|> Person
-Name -[hidden]right-> Phone
-Phone -[hidden]right-> Address
-Address -[hidden]right-> Email
+Appointment *--> AppointmentDate
+Appointment *--> AppointmentID
+Appointment *--> "2(Patient & Doctor)" NRIC
ModelManager --> "~* filtered" Person
+ModelManager --> "~* filtered" Appointment
@enduml
diff --git a/docs/images/ModelClassDiagram.png b/docs/images/ModelClassDiagram.png
index a19fb1b4ac8..b6c5d6436d5 100644
Binary files a/docs/images/ModelClassDiagram.png and b/docs/images/ModelClassDiagram.png differ
diff --git a/docs/images/ModelClassDiagramHandDrawn.png b/docs/images/ModelClassDiagramHandDrawn.png
new file mode 100644
index 00000000000..e3080c734a3
Binary files /dev/null and b/docs/images/ModelClassDiagramHandDrawn.png differ