From 2e013b436c2cd2331e0ca78693e06a802b1fd400 Mon Sep 17 00:00:00 2001 From: Some User Date: Tue, 10 Sep 2024 18:57:51 -0400 Subject: [PATCH] Day 8 --- .../CampusVisits.md | 61 ------- Day 6-7 (problem domain entities)/uml.png | Bin 26584 -> 0 bytes .../Campus visits.html | 150 ++++++++++++++++++ .../CampusVisits.md | 134 ++++++++++++++++ .../entityRelationships.png | Bin 0 -> 26506 bytes .../entityRelationships.puml | 44 +++++ .../eventsAndVisitStates.png | Bin 0 -> 26497 bytes .../eventsAndVisitStates.puml | 27 ++++ 8 files changed, 355 insertions(+), 61 deletions(-) delete mode 100644 Day 6-7 (problem domain entities)/CampusVisits.md delete mode 100644 Day 6-7 (problem domain entities)/uml.png create mode 100644 Day 6-8 (writing a requirements document)/Campus visits.html create mode 100644 Day 6-8 (writing a requirements document)/CampusVisits.md create mode 100644 Day 6-8 (writing a requirements document)/entityRelationships.png create mode 100644 Day 6-8 (writing a requirements document)/entityRelationships.puml create mode 100644 Day 6-8 (writing a requirements document)/eventsAndVisitStates.png create mode 100644 Day 6-8 (writing a requirements document)/eventsAndVisitStates.puml diff --git a/Day 6-7 (problem domain entities)/CampusVisits.md b/Day 6-7 (problem domain entities)/CampusVisits.md deleted file mode 100644 index e9ae25d..0000000 --- a/Day 6-7 (problem domain entities)/CampusVisits.md +++ /dev/null @@ -1,61 +0,0 @@ - -# Campus visits - -## Overview - -In the Math and CS Department, the current workflow for campus visits works as follows. - 1. The department secretary receives a campus visit request from the campus visit office. - 1. The secretary sends an email to the computer science professors asking if someone could take the visit. Information pertaining to the visit is included in this email (prospective student's name, anticipated major, hometown, date of visit, and possible times that could be scheduled that day). - 1. Professors email back saying that they can take the visit (or not) and at what time. - -The main problem is with the last step. Professors will often delay in responding, for a variety of reasons. For example: - - A professor might be *technically* available for a certain day, but it would be hectic to fit it in so they would rather someone else take that one. - - Professors might delay in responding, reasoning that if they delay then someone else will take it. - - A professor might not be able to take the visit, but won't actually respond saying so. - -This results in the secretary having to send multiple emails asking for someone to take the visit, and/or the CS chair polling the secretary to see if a visit is taken yet. When an incoming student doesn't know if they will be meeting with a professor it sets a bad impression, especially for those who travel great distances for the campus visit. - -## System expectations - -We would like a system to address the following: - -- There should be some way of encouraging a balance between the number of visits assigned to various professors (perhaps there should be a record of number of visits taken, etc.) -- We expect a quick turnaround time, so that the student has confirmation of which professor they are meeting with in, say, within a few days of the visit info coming to the department secretary. -- The system should eliminate the need for the secretary to nag and for the CS chair to keep polling to see if visits are taken or not. -- Address the "social loafing" problem by managing better communication between the professors (for example, some quick and convenient way of expressing "I can do this visit if nobody else is available, but I would rather not"). The system may take this information into account when sending auto-notifications to the faculty. - -## Entities - -- Users - - *Coordinator* (boolean) - true iff the user coordinates between CV office and faculty. - - *Admin* (boolean) - true for superuser priviledges, such as creating and deleting users. - - *Guide* (boolean) - true iff the user can do campus visits for Computer Science. - - *Unavailable times* - (for guides only) a weekly schedule of regularly unavailable times for campus visits -- Visits - - *Visitors* - a list of people in the visiting group - - *Possible times* - a list of time intervals in which the visitors are available on the visit day - - *Day* - a calendar day for which the visit has been scheduled of the campus visit office - - *Decided time* - a time at which the guide has agreed to meet for this visit - - *Decided guide* - the guide which has agreed to conduct this visit - - *Status* - the current status of this visit: - - *Proposed* - created by the CV office, but no guide assigned - - *assigned* - a guide has agreed to do the visit, at a decided time - - *completed* - the guide has conducted the visit - - *cancelled* - the visit has been cancelled before it could be conducted -- Visitors - - *Role* - the type of visitor: prospective student, parent, or guest (other). - - *Antipicated start semester* - the start semester, as reported by the CV office - - *Antipicated majors, minors* - desired major(s) and minor(s), from the CV office - - *Type* - category (for prospective students only): high school, transfer, or non-traditional - - *Hometown* - name of city and state of origin - - *Notes* - other information pertaining to the visit that should be made known to its guide -- Committment - the level of committment expressed by a given guide for a given visit - - *Level* - possible values for involvement are: unknown, cannot, prefer not, can do, will do - -![UML Diagram](uml.png "Entity relations") - -## Events - - - -TODO: Have conflicts reported by the system if detected. diff --git a/Day 6-7 (problem domain entities)/uml.png b/Day 6-7 (problem domain entities)/uml.png deleted file mode 100644 index 8101a38b65a222acea13fc23f8e913a603737fe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26584 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 visits.md +

Campus visits

+

Prepared by: Michael Kowalczyk
+Revision date: 9/10/2024

+

Overview

+

In the Math and CS Department, the current workflow for campus visits works as follows.

+
    +
  1. The department secretary receives a campus visit request from the campus visit office.
  2. +
  3. The secretary sends an email to the computer science professors asking if someone could take the visit. Information pertaining to the visit is included in this email (prospective student’s name, anticipated major, hometown, date of visit, and possible times that could be scheduled that day).
  4. +
  5. Professors email back saying that they can take the visit (or not) and at what time.
  6. +
+

The main problem is with the last step. Professors will often delay in responding, for a variety of reasons. For example:

+
    +
  • A professor might be technically available for a certain day, but it would be hectic to fit it in so they would rather someone else take that one.
  • +
  • Professors might delay in responding, reasoning that if they delay then someone else will take it.
  • +
  • A professor might not be able to take the visit, but won’t actually respond saying so.
  • +
+

This results in the secretary having to send multiple emails asking for someone to take the visit, and/or the CS chair polling the secretary to see if a visit is taken yet. When an incoming student doesn’t know if they will be meeting with a professor it sets a bad impression, especially for those who travel great distances for the campus visit.

+

System expectations

+

We would like a system to address the following:

+
    +
  • There should be some way of encouraging a balance between the number of visits assigned to various professors (perhaps there should be a record of number of visits taken, etc.)
  • +
  • We expect a quick turnaround time, so that the student has confirmation of which professor they are meeting with in, say, within a few days of the visit info coming to the department secretary.
  • +
  • The system should eliminate the need for the secretary to nag and for the CS chair to keep polling to see if visits are taken or not.
  • +
  • Address the “social loafing” problem by managing better communication between the professors (for example, some quick and convenient way of expressing “I can do this visit if nobody else is available, but I would rather not”). The system may take this information into account when sending auto-notifications to the faculty.
  • +
+

Entities

+
    +
  • User +
      +
    • Name - person’s name
    • +
    • Email - email address used for login and notifications
    • +
    • Password - for logging into the web portal
    • +
    • Roles - zero or more of these options: coordinator, admin, or faculty. +
        +
      • coordinator - communicates with the CV office and communicates with faculty to determine who is doing a visit
      • +
      • Admin - has superuser priviledges, such as creating and deleting users.
      • +
      • Faculty - a user who can do campus visits for Computer Science.
      • +
      +
    • +
    • Available times - (for faculty only) a weekly schedule of regularly available times for campus visits
    • +
    +
  • +
  • Visit +
      +
    • Visitors - a list of people in the visiting group
    • +
    • Possible times - a list of time intervals in which the visitors are available on the visit day
    • +
    • Day - the calendar day for which the visit has been scheduled with the campus visit office
    • +
    • DecidedTime - the time at which the faculty member has agreed to meet for this visit
    • +
    • DecidedGuide - the faculty member who has agreed to conduct this visit
    • +
    • Status - the current status of this visit: +
        +
      • proposed - the visit is known to the department, but no faculty is assigned
      • +
      • assigned - a faculty member has agreed to do the visit at a decided time
      • +
      • confirmed - the secretary has informed the Campus Visit office of the decidedGuide and decidedTime
      • +
      • completed - the decidedGuide has conducted the visit
      • +
      • canceled - the visit has been canceled before it could be conducted
      • +
      +
    • +
    • Notes - other information pertaining to the visit that would be useful to the decidedGuide
    • +
    +
  • +
  • Visitor +
      +
    • Name - actual name
    • +
    • Role - the type of visitor: prospective student, parent, or guest (other).
    • +
    • Antipicated start semester - the start semester, as reported by the CV office
    • +
    • Antipicated majors, minors - desired major(s) and minor(s), from the CV office
    • +
    • Type - category (for prospective students only): high school, transfer, or non-traditional
    • +
    • Hometown - name of city and state of origin
    • +
    +
  • +
  • Committment - the level of committment associated with a given faculty member for a particular visit +
      +
    • Level - possible values for involvement are: unknown, cannot, prefer not, can do
    • +
    +
  • +
+

UML Diagram

+

Queries

+

These queries can be performed by any user.

+
    +
  • Q1 - List visits. Parameters: startDate, endDate, assignedFaculty, currentStatus (any or all of these can be omitted, and assignedFaculty may be “none” to search for unassigned visits). Result: For each visit matching all of the parameters given: list student name(s), day, possibleTimes, decidedTime, decidedGuide, and status. Sorted by visit day.
  • +
  • Q2 - View visit. Parameters: visitID. View all attributes for the given visit, and also the associated committment level for each faculty member in the system.
  • +
  • Q3 - View faculty stats. Parameters: startDate, endDate. For each faculty f, list the number of visits v for which v.decidedGuide = f and also the number of visits v for which v.decidedGuide = f and v.status = completed. For both of these sums, the visits are restricted to startDate <= v.day <= endDate.
  • +
  • Q4 - List users. Parameters: none. This query is available for admin and coordinator only. For each user u in the system, list u.name, u.roles, u.availableTimes (if u.roles includes faculty), and email.
  • +
+

Events

+

There are only a few problem domain events of interest. For each of these a source is listed, which is how this event is made known to the system.

+
    +
  • VisitRequest - the Campus Visit office contacts the department secretary with information pertaining to a new campus visit. Parameters: date, possible times, student name, other visitor names, and majors/minors of interest. Source: department secretary keys in the data (coordinator role).
  • +
  • ClaimVisit - a faculty member decides to do a visit. Parameters: visit, decidedGuide, decidedTime. Source: faculty member.
  • +
  • ConfirmVisit - the department secretary contacts the Campus Visit office that someone has taken the visit. Parameters: visit’s decidedGuide and decided time. Source: department secretary (coordinator role).
  • +
  • CancelVisit - the campus visit office notifies the department secretary that the visit has been cancelled by the student. Parameters: Visit. Source: department secretary (coordinator role).
  • +
  • AbaondonVisit - some circumstance has caused the faculty member to vacate the guide position for a visit. Parameters: Visit. Source: faculty member.
  • +
  • VisitTimePassed - the decidedTime for the visit plus an hour has passed in Eastern Time.
  • +
+

UML Diagram

+

Notifications

+

R1 - The system notifies faculty via email under any of the following circumstances:

+
    +
  • A new visitRequest is made
  • +
  • The faculty member is the decidedGuide for a visit which is scheduled for tomorrow
  • +
  • Periodic reminders for faculty members who have an unknown committment level for one or more proposted visits.
  • +
+

R2 - The system notifies coordinators via email under any of the following circumstances:

+
    +
  • Periodic reminders for visits that are in the proposed state.
  • +
  • A time conflict has been detected between two different visits.
  • +
+

R3 - Both faculty and coordinators are notified if a faculty member has claimed or abandoned a visit (except for a faculty member who changed his own status)

+

Platform

+

R4 - All users can log into the system as a web app to perform actions suitable to their role(s).

+

R5 - Notifications are delivered via email, with embedded unguessable links so that likely actions pertaining to the notification can be performed in one click without logging in.

+

User permissions

+

Users act in different roles with regard to editing the system’s internal model of campus visits.

+

Users with the coordinator role can:

+
    +
  • R6 - adjust notification frequency for R1 and R2 on a per-visit basis.
  • +
  • R7 - establish a new visit request.
  • +
  • R8 - claim a visit, acting on behalf of a faculty member (Note: in this case, the faculty member must still get the visit claim notification).
  • +
  • R9 - set an assigned visit to confirmed, and can set a visit to canceled at any time.
  • +
+

Users with the faculty role can:

+
    +
  • R10 - set a level of committment and/or claim visits that are in the proposed state. Note that a "can do" level of committment is implied when a faculty member is the guide for a given visit.
  • +
  • R11 - abandon visits for which they are the decidedGuide.
  • +
  • R12 - edit availableTimes
  • +
+

Users with the admin role can:

+
    +
  • R13 - create a new user.
  • +
  • R14 - change any user’s name, email, password, or roles.
  • +
+

Any user can:

+
    +
  • R15 - change their password.
  • +
+

Security

+
    +
  • R16 - The web app portal is password-protected and served over HTTPS, exclusively.
  • +
  • R17 - Embedded email links pertaining to user actions are long, unguessable strings which expire after a certain number of days (which can be set by an admin). Following an expired link shows an error message.
  • +
+

Preferences

+

Unnecessary email should be minimized. Within notification frequency, it would be preferable to have a single email containing notifications for all relevant visits rather than receiving a separate email for each notification.

+ +

Likely changes

+

Rules guiding notification frequency are likely to change. The coordinator has limited control over this, but experience with the system will help to understand how to best give the coordinator more granular control.

+ + \ No newline at end of file diff --git a/Day 6-8 (writing a requirements document)/CampusVisits.md b/Day 6-8 (writing a requirements document)/CampusVisits.md new file mode 100644 index 0000000..451af02 --- /dev/null +++ b/Day 6-8 (writing a requirements document)/CampusVisits.md @@ -0,0 +1,134 @@ + +# Campus visits + +Prepared by: Michael Kowalczyk +Revision date: 9/10/2024 + +## Overview + +In the Math and CS Department, the current workflow for campus visits works as follows. + 1. The department secretary receives a campus visit request from the campus visit office. + 1. The secretary sends an email to the computer science professors asking if someone could take the visit. Information pertaining to the visit is included in this email (prospective student's name, anticipated major, hometown, date of visit, and possible times that could be scheduled that day). + 1. Professors email back saying that they can take the visit (or not) and at what time. + +The main problem is with the last step. Professors will often delay in responding, for a variety of reasons. For example: + - A professor might be *technically* available for a certain day, but it would be hectic to fit it in so they would rather someone else take that one. + - Professors might delay in responding, reasoning that if they delay then someone else will take it. + - A professor might not be able to take the visit, but won't actually respond saying so. + +This results in the secretary having to send multiple emails asking for someone to take the visit, and/or the CS chair polling the secretary to see if a visit is taken yet. When an incoming student doesn't know if they will be meeting with a professor it sets a bad impression, especially for those who travel great distances for the campus visit. + +## System expectations + +We would like a system to address the following: + +- There should be some way of encouraging a balance between the number of visits assigned to various professors (perhaps there should be a record of number of visits taken, etc.) +- We expect a quick turnaround time, so that the student has confirmation of which professor they are meeting with in, say, within a few days of the visit info coming to the department secretary. +- The system should eliminate the need for the secretary to nag and for the CS chair to keep polling to see if visits are taken or not. +- Address the "social loafing" problem by managing better communication between the professors (for example, some quick and convenient way of expressing "I can do this visit if nobody else is available, but I would rather not"). The system may take this information into account when sending auto-notifications to the faculty. + +## Entities + +- User + - *Name* - person's name + - *Email* - email address used for login and notifications + - *Password* - for logging into the web portal + - *Roles* - zero or more of these options: coordinator, admin, or faculty. + - *coordinator* - communicates with the CV office and communicates with faculty to determine who is doing a visit + - *Admin* - has superuser priviledges, such as creating and deleting users. + - *Faculty* - a user who can do campus visits for Computer Science. + - *Available times* - (for faculty only) a weekly schedule of regularly available times for campus visits +- Visit + - *Visitors* - a list of people in the visiting group + - *Possible times* - a list of time intervals in which the visitors are available on the visit day + - *Day* - the calendar day for which the visit has been scheduled with the campus visit office + - *DecidedTime* - the time at which the faculty member has agreed to meet for this visit + - *DecidedGuide* - the faculty member who has agreed to conduct this visit + - *Status* - the current status of this visit: + - *proposed* - the visit is known to the department, but no faculty is assigned + - *assigned* - a faculty member has agreed to do the visit at a *decided time* + - *confirmed* - the secretary has informed the Campus Visit office of the *decidedGuide* and *decidedTime* + - *completed* - the *decidedGuide* has conducted the visit + - *canceled* - the visit has been canceled before it could be conducted + - *Notes* - other information pertaining to the visit that would be useful to the *decidedGuide* +- Visitor + - *Name* - actual name + - *Role* - the type of visitor: prospective student, parent, or guest (other). + - *Antipicated start semester* - the start semester, as reported by the CV office + - *Antipicated majors, minors* - desired major(s) and minor(s), from the CV office + - *Type* - category (for prospective students only): high school, transfer, or non-traditional + - *Hometown* - name of city and state of origin +- Committment - the level of committment associated with a given faculty member for a particular visit + - *Level* - possible values for involvement are: unknown, cannot, prefer not, can do + +![UML Diagram](entityRelationships.png "Entity relations") + +## Queries + +These queries can be performed by any user. + +- **Q1** - List visits. *Parameters: startDate, endDate, assignedFaculty, currentStatus* (any or all of these can be omitted, and assignedFaculty may be "none" to search for unassigned visits). *Result:* For each visit matching all of the parameters given: list student name(s), day, possibleTimes, decidedTime, decidedGuide, and status. Sorted by visit day. +- **Q2** - View visit. *Parameters: visitID*. View all attributes for the given visit, and also the associated committment level for each faculty member in the system. +- **Q3** - View faculty stats. *Parameters: startDate, endDate*. For each faculty *f*, list the number of visits *v* for which *v.decidedGuide = f* and also the number of visits *v* for which *v.decidedGuide = f* and *v.status = completed*. For both of these sums, the visits are restricted to *startDate <= v.day <= endDate*. +- **Q4** - List users. *Parameters: none*. This query is available for *admin* and *coordinator* only. For each user *u* in the system, list *u.name, u.roles, u.availableTimes* (if *u.roles* includes *faculty*), and *email*. + +## Events + +There are only a few problem domain events of interest. For each of these a source is listed, which is how this event is made known to the system. +- *VisitRequest* - the Campus Visit office contacts the department secretary with information pertaining to a new campus visit. *Parameters*: date, possible times, student name, other visitor names, and majors/minors of interest. *Source:* department secretary keys in the data (coordinator role). +- *ClaimVisit* - a faculty member decides to do a visit. *Parameters*: visit, decidedGuide, decidedTime. *Source:* faculty member. +- *ConfirmVisit* - the department secretary contacts the Campus Visit office that someone has taken the visit. Parameters: visit's *decidedGuide* and *decided time*. *Source:* department secretary (coordinator role). +- *CancelVisit* - the campus visit office notifies the department secretary that the visit has been cancelled by the student. *Parameters:* Visit. *Source:* department secretary (coordinator role). +- *AbaondonVisit* - some circumstance has caused the faculty member to vacate the guide position for a visit. *Parameters:* Visit. *Source:* faculty member. +- *VisitTimePassed* - the *decidedTime* for the visit plus an hour has passed in Eastern Time. + +![UML Diagram](eventsAndVisitStates.png "Event sequences") + +## Notifications + +**R1** - The system notifies faculty via email under any of the following circumstances: +- A new *visitRequest* is made +- The faculty member is the *decidedGuide* for a visit which is scheduled for tomorrow +- Periodic reminders for faculty members who have an unknown committment level for one or more proposted visits. + +**R2** - The system notifies coordinators via email under any of the following circumstances: +- Periodic reminders for visits that are in the *proposed* state. +- A time conflict has been detected between two different visits. + +**R3** - Both faculty and coordinators are notified if a faculty member has claimed or abandoned a visit (except for a faculty member who changed his own status) + +## Platform +**R4** - All users can log into the system as a web app to perform actions suitable to their role(s). + +**R5** - Notifications are delivered via email, with embedded unguessable links so that likely actions pertaining to the notification can be performed in one click without logging in. + +## User permissions +Users act in different roles with regard to editing the system's internal model of campus visits. + +Users with the coordinator role can: +- **R6** - adjust notification frequency for **R1** and **R2** on a per-visit basis. +- **R7** - establish a new visit request. +- **R8** - claim a visit, acting on behalf of a faculty member (Note: in this case, the faculty member must still get the visit claim notification). +- **R9** - set an *assigned* visit to *confirmed*, and can set a visit to *canceled* at any time. + +Users with the faculty role can: +- **R10** - set a level of committment and/or claim visits that are in the *proposed* state. Note that a "*can do*" level of committment is implied when a faculty member is the guide for a given visit. +- **R11** - abandon visits for which they are the *decidedGuide*. +- **R12** - edit *availableTimes* + +Users with the admin role can: +- **R13** - create a new user. +- **R14** - change any user's name, email, password, or roles. + +Any user can: +- **R15** - change their password. + +## Security +- **R16** - The web app portal is password-protected and served over HTTPS, exclusively. +- **R17** - Embedded email links pertaining to user actions are long, unguessable strings which expire after a certain number of days (which can be set by an admin). Following an expired link shows an error message. + +## Preferences +Unnecessary email should be minimized. Within notification frequency, it would be preferable to have a single email containing notifications for all relevant visits rather than receiving a separate email for each notification. + +## Likely changes +Rules guiding notification frequency are likely to change. The coordinator has limited control over this, but experience with the system will help to understand how to best give the coordinator more granular control. diff --git a/Day 6-8 (writing a requirements document)/entityRelationships.png b/Day 6-8 (writing a requirements document)/entityRelationships.png new file mode 100644 index 0000000000000000000000000000000000000000..76ae4091e75cfd3d54012663d2ff0bbe0bf73940 GIT binary patch literal 26506 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 E03szlk^lez literal 0 HcmV?d00001 diff --git a/Day 6-8 (writing a requirements document)/entityRelationships.puml b/Day 6-8 (writing a requirements document)/entityRelationships.puml new file mode 100644 index 0000000..402e28c --- /dev/null +++ b/Day 6-8 (writing a requirements document)/entityRelationships.puml @@ -0,0 +1,44 @@ +'Created with https://www.planttext.com/ + +@startuml + +skin rose + +title Entity relationships + +class User { + name + email + password + roles + availableTimes +} + +class Visit { + day + possibleTimes + decidedTime + status + notes +} + +class Visitor { + name + role + startSemester + majors + minors + type + hometown +} + +class Committment { + level +} + +Visit " *\n visitors ↓" -- "1..*" Visitor +Visit "*\ndecided guide →" -right- "0..1\n← visits" User : " " +Visit " 1" -up- "*" Committment +User "1" -up- "*" Committment + +@enduml diff --git a/Day 6-8 (writing a requirements document)/eventsAndVisitStates.png b/Day 6-8 (writing a requirements document)/eventsAndVisitStates.png new file mode 100644 index 0000000000000000000000000000000000000000..34c3ccfca1a5d0003e46d00cec44708fa1635af6 GIT binary patch literal 26497 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

u+LBC#O$LXhYT1 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 Uv}k(}XqQBq>e_10Rj%LtFQ|>&Z~y=R literal 0 HcmV?d00001 diff --git a/Day 6-8 (writing a requirements document)/eventsAndVisitStates.puml b/Day 6-8 (writing a requirements document)/eventsAndVisitStates.puml new file mode 100644 index 0000000..387ad22 --- /dev/null +++ b/Day 6-8 (writing a requirements document)/eventsAndVisitStates.puml @@ -0,0 +1,27 @@ +'Created with https://www.planttext.com/ + +@startuml + +skin rose + +title Events and visit states + +label start +card proposed +card assigned +card confirmed +card completed +card canceled + +start -down-> proposed : "visitRequest" +proposed -down-> assigned : "claimVisit" +assigned -down-> confirmed : "confirmVisit" +confirmed -down-> completed : "visitTimePassed" + +proposed --> canceled : "cancelVisit" +assigned -left-> canceled : "cancelVisit" +confirmed --> canceled : "cancelVisit" + +rectangle "The abandonVisit event takes the state from\neither assigned or confirmed back to proposed" + +@enduml \ No newline at end of file