Some User 1 year ago
parent 1e1f1a0dd7
commit 2e013b436c

@ -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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

@ -0,0 +1,150 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><title>Campus visits.md</title><style></style></head><body id="preview">
<h1 class="code-line" data-line-start="1" data-line-end="2"><a id="Campus_visits_1"></a>Campus visits</h1>
<p class="has-line-data" data-line-start="3" data-line-end="5">Prepared by: Michael Kowalczyk<br>
Revision date: 9/10/2024</p>
<h2 class="code-line" data-line-start="6" data-line-end="7"><a id="Overview_6"></a>Overview</h2>
<p class="has-line-data" data-line-start="8" data-line-end="9">In the Math and CS Department, the current workflow for campus visits works as follows.</p>
<ol>
<li class="has-line-data" data-line-start="9" data-line-end="10">The department secretary receives a campus visit request from the campus visit office.</li>
<li class="has-line-data" data-line-start="10" data-line-end="11">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 students name, anticipated major, hometown, date of visit, and possible times that could be scheduled that day).</li>
<li class="has-line-data" data-line-start="11" data-line-end="13">Professors email back saying that they can take the visit (or not) and at what time.</li>
</ol>
<p class="has-line-data" data-line-start="13" data-line-end="14">The main problem is with the last step. Professors will often delay in responding, for a variety of reasons. For example:</p>
<ul>
<li class="has-line-data" data-line-start="14" data-line-end="15">A professor might be <em>technically</em> available for a certain day, but it would be hectic to fit it in so they would rather someone else take that one.</li>
<li class="has-line-data" data-line-start="15" data-line-end="16">Professors might delay in responding, reasoning that if they delay then someone else will take it.</li>
<li class="has-line-data" data-line-start="16" data-line-end="18">A professor might not be able to take the visit, but wont actually respond saying so.</li>
</ul>
<p class="has-line-data" data-line-start="18" data-line-end="19">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 doesnt 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.</p>
<h2 class="code-line" data-line-start="20" data-line-end="21"><a id="System_expectations_20"></a>System expectations</h2>
<p class="has-line-data" data-line-start="22" data-line-end="23">We would like a system to address the following:</p>
<ul>
<li class="has-line-data" data-line-start="24" data-line-end="25">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.)</li>
<li class="has-line-data" data-line-start="25" data-line-end="26">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.</li>
<li class="has-line-data" data-line-start="26" data-line-end="27">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.</li>
<li class="has-line-data" data-line-start="27" data-line-end="29">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.</li>
</ul>
<h2 class="code-line" data-line-start="29" data-line-end="30"><a id="Entities_29"></a>Entities</h2>
<ul>
<li class="has-line-data" data-line-start="31" data-line-end="40">User
<ul>
<li class="has-line-data" data-line-start="32" data-line-end="33"><em>Name</em> - persons name</li>
<li class="has-line-data" data-line-start="33" data-line-end="34"><em>Email</em> - email address used for login and notifications</li>
<li class="has-line-data" data-line-start="34" data-line-end="35"><em>Password</em> - for logging into the web portal</li>
<li class="has-line-data" data-line-start="35" data-line-end="39"><em>Roles</em> - zero or more of these options: coordinator, admin, or faculty.
<ul>
<li class="has-line-data" data-line-start="36" data-line-end="37"><em>coordinator</em> - communicates with the CV office and communicates with faculty to determine who is doing a visit</li>
<li class="has-line-data" data-line-start="37" data-line-end="38"><em>Admin</em> - has superuser priviledges, such as creating and deleting users.</li>
<li class="has-line-data" data-line-start="38" data-line-end="39"><em>Faculty</em> - a user who can do campus visits for Computer Science.</li>
</ul>
</li>
<li class="has-line-data" data-line-start="39" data-line-end="40"><em>Available times</em> - (for faculty only) a weekly schedule of regularly available times for campus visits</li>
</ul>
</li>
<li class="has-line-data" data-line-start="40" data-line-end="53">Visit
<ul>
<li class="has-line-data" data-line-start="41" data-line-end="42"><em>Visitors</em> - a list of people in the visiting group</li>
<li class="has-line-data" data-line-start="42" data-line-end="43"><em>Possible times</em> - a list of time intervals in which the visitors are available on the visit day</li>
<li class="has-line-data" data-line-start="43" data-line-end="44"><em>Day</em> - the calendar day for which the visit has been scheduled with the campus visit office</li>
<li class="has-line-data" data-line-start="44" data-line-end="45"><em>DecidedTime</em> - the time at which the faculty member has agreed to meet for this visit</li>
<li class="has-line-data" data-line-start="45" data-line-end="46"><em>DecidedGuide</em> - the faculty member who has agreed to conduct this visit</li>
<li class="has-line-data" data-line-start="46" data-line-end="52"><em>Status</em> - the current status of this visit:
<ul>
<li class="has-line-data" data-line-start="47" data-line-end="48"><em>proposed</em> - the visit is known to the department, but no faculty is assigned</li>
<li class="has-line-data" data-line-start="48" data-line-end="49"><em>assigned</em> - a faculty member has agreed to do the visit at a <em>decided time</em></li>
<li class="has-line-data" data-line-start="49" data-line-end="50"><em>confirmed</em> - the secretary has informed the Campus Visit office of the <em>decidedGuide</em> and <em>decidedTime</em></li>
<li class="has-line-data" data-line-start="50" data-line-end="51"><em>completed</em> - the <em>decidedGuide</em> has conducted the visit</li>
<li class="has-line-data" data-line-start="51" data-line-end="52"><em>canceled</em> - the visit has been canceled before it could be conducted</li>
</ul>
</li>
<li class="has-line-data" data-line-start="52" data-line-end="53"><em>Notes</em> - other information pertaining to the visit that would be useful to the <em>decidedGuide</em></li>
</ul>
</li>
<li class="has-line-data" data-line-start="53" data-line-end="60">Visitor
<ul>
<li class="has-line-data" data-line-start="54" data-line-end="55"><em>Name</em> - actual name</li>
<li class="has-line-data" data-line-start="55" data-line-end="56"><em>Role</em> - the type of visitor: prospective student, parent, or guest (other).</li>
<li class="has-line-data" data-line-start="56" data-line-end="57"><em>Antipicated start semester</em> - the start semester, as reported by the CV office</li>
<li class="has-line-data" data-line-start="57" data-line-end="58"><em>Antipicated majors, minors</em> - desired major(s) and minor(s), from the CV office</li>
<li class="has-line-data" data-line-start="58" data-line-end="59"><em>Type</em> - category (for prospective students only): high school, transfer, or non-traditional</li>
<li class="has-line-data" data-line-start="59" data-line-end="60"><em>Hometown</em> - name of city and state of origin</li>
</ul>
</li>
<li class="has-line-data" data-line-start="60" data-line-end="63">Committment - the level of committment associated with a given faculty member for a particular visit
<ul>
<li class="has-line-data" data-line-start="61" data-line-end="63"><em>Level</em> - possible values for involvement are: unknown, cannot, prefer not, can do</li>
</ul>
</li>
</ul>
<p class="has-line-data" data-line-start="63" data-line-end="64"><img src="entityRelationships.png" alt="UML Diagram" title="Entity relations"></p>
<h2 class="code-line" data-line-start="65" data-line-end="66"><a id="Queries_65"></a>Queries</h2>
<p class="has-line-data" data-line-start="67" data-line-end="68">These queries can be performed by any user.</p>
<ul>
<li class="has-line-data" data-line-start="69" data-line-end="70"><strong>Q1</strong> - List visits. <em>Parameters: startDate, endDate, assignedFaculty, currentStatus</em> (any or all of these can be omitted, and assignedFaculty may be “none” to search for unassigned visits). <em>Result:</em> For each visit matching all of the parameters given: list student name(s), day, possibleTimes, decidedTime, decidedGuide, and status. Sorted by visit day.</li>
<li class="has-line-data" data-line-start="70" data-line-end="71"><strong>Q2</strong> - View visit. <em>Parameters: visitID</em>. View all attributes for the given visit, and also the associated committment level for each faculty member in the system.</li>
<li class="has-line-data" data-line-start="71" data-line-end="72"><strong>Q3</strong> - View faculty stats. <em>Parameters: startDate, endDate</em>. For each faculty <em>f</em>, list the number of visits <em>v</em> for which <em>v.decidedGuide = f</em> and also the number of visits <em>v</em> for which <em>v.decidedGuide = f</em> and <em>v.status = completed</em>. For both of these sums, the visits are restricted to <em>startDate &lt;= v.day &lt;= endDate</em>.</li>
<li class="has-line-data" data-line-start="72" data-line-end="74"><strong>Q4</strong> - List users. <em>Parameters: none</em>. This query is available for <em>admin</em> and <em>coordinator</em> only. For each user <em>u</em> in the system, list <em>u.name, u.roles, u.availableTimes</em> (if <em>u.roles</em> includes <em>faculty</em>), and <em>email</em>.</li>
</ul>
<h2 class="code-line" data-line-start="74" data-line-end="75"><a id="Events_74"></a>Events</h2>
<p class="has-line-data" data-line-start="76" data-line-end="77">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.</p>
<ul>
<li class="has-line-data" data-line-start="77" data-line-end="78"><em>VisitRequest</em> - the Campus Visit office contacts the department secretary with information pertaining to a new campus visit. <em>Parameters</em>: date, possible times, student name, other visitor names, and majors/minors of interest. <em>Source:</em> department secretary keys in the data (coordinator role).</li>
<li class="has-line-data" data-line-start="78" data-line-end="79"><em>ClaimVisit</em> - a faculty member decides to do a visit. <em>Parameters</em>: visit, decidedGuide, decidedTime. <em>Source:</em> faculty member.</li>
<li class="has-line-data" data-line-start="79" data-line-end="80"><em>ConfirmVisit</em> - the department secretary contacts the Campus Visit office that someone has taken the visit. Parameters: visits <em>decidedGuide</em> and <em>decided time</em>. <em>Source:</em> department secretary (coordinator role).</li>
<li class="has-line-data" data-line-start="80" data-line-end="81"><em>CancelVisit</em> - the campus visit office notifies the department secretary that the visit has been cancelled by the student. <em>Parameters:</em> Visit. <em>Source:</em> department secretary (coordinator role).</li>
<li class="has-line-data" data-line-start="81" data-line-end="82"><em>AbaondonVisit</em> - some circumstance has caused the faculty member to vacate the guide position for a visit. <em>Parameters:</em> Visit. <em>Source:</em> faculty member.</li>
<li class="has-line-data" data-line-start="82" data-line-end="84"><em>VisitTimePassed</em> - the <em>decidedTime</em> for the visit plus an hour has passed in Eastern Time.</li>
</ul>
<p class="has-line-data" data-line-start="84" data-line-end="85"><img src="eventsAndVisitStates.png" alt="UML Diagram" title="Event sequences"></p>
<h2 class="code-line" data-line-start="86" data-line-end="87"><a id="Notifications_86"></a>Notifications</h2>
<p class="has-line-data" data-line-start="88" data-line-end="89"><strong>R1</strong> - The system notifies faculty via email under any of the following circumstances:</p>
<ul>
<li class="has-line-data" data-line-start="89" data-line-end="90">A new <em>visitRequest</em> is made</li>
<li class="has-line-data" data-line-start="90" data-line-end="91">The faculty member is the <em>decidedGuide</em> for a visit which is scheduled for tomorrow</li>
<li class="has-line-data" data-line-start="91" data-line-end="93">Periodic reminders for faculty members who have an unknown committment level for one or more proposted visits.</li>
</ul>
<p class="has-line-data" data-line-start="93" data-line-end="94"><strong>R2</strong> - The system notifies coordinators via email under any of the following circumstances:</p>
<ul>
<li class="has-line-data" data-line-start="94" data-line-end="95">Periodic reminders for visits that are in the <em>proposed</em> state.</li>
<li class="has-line-data" data-line-start="95" data-line-end="97">A time conflict has been detected between two different visits.</li>
</ul>
<p class="has-line-data" data-line-start="97" data-line-end="98"><strong>R3</strong> - 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)</p>
<h2 class="code-line" data-line-start="99" data-line-end="100"><a id="Platform_99"></a>Platform</h2>
<p class="has-line-data" data-line-start="100" data-line-end="101"><strong>R4</strong> - All users can log into the system as a web app to perform actions suitable to their role(s).</p>
<p class="has-line-data" data-line-start="102" data-line-end="103"><strong>R5</strong> - 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.</p>
<h2 class="code-line" data-line-start="104" data-line-end="105"><a id="User_permissions_104"></a>User permissions</h2>
<p class="has-line-data" data-line-start="105" data-line-end="106">Users act in different roles with regard to editing the systems internal model of campus visits.</p>
<p class="has-line-data" data-line-start="107" data-line-end="108">Users with the coordinator role can:</p>
<ul>
<li class="has-line-data" data-line-start="108" data-line-end="109"><strong>R6</strong> - adjust notification frequency for <strong>R1</strong> and <strong>R2</strong> on a per-visit basis.</li>
<li class="has-line-data" data-line-start="109" data-line-end="110"><strong>R7</strong> - establish a new visit request.</li>
<li class="has-line-data" data-line-start="110" data-line-end="111"><strong>R8</strong> - claim a visit, acting on behalf of a faculty member (Note: in this case, the faculty member must still get the visit claim notification).</li>
<li class="has-line-data" data-line-start="111" data-line-end="113"><strong>R9</strong> - set an <em>assigned</em> visit to <em>confirmed</em>, and can set a visit to <em>canceled</em> at any time.</li>
</ul>
<p class="has-line-data" data-line-start="113" data-line-end="114">Users with the faculty role can:</p>
<ul>
<li class="has-line-data" data-line-start="114" data-line-end="115"><strong>R10</strong> - set a level of committment and/or claim visits that are in the <em>proposed</em> state. Note that a &quot;<em>can do</em>&quot; level of committment is implied when a faculty member is the guide for a given visit.</li>
<li class="has-line-data" data-line-start="115" data-line-end="116"><strong>R11</strong> - abandon visits for which they are the <em>decidedGuide</em>.</li>
<li class="has-line-data" data-line-start="116" data-line-end="118"><strong>R12</strong> - edit <em>availableTimes</em></li>
</ul>
<p class="has-line-data" data-line-start="118" data-line-end="119">Users with the admin role can:</p>
<ul>
<li class="has-line-data" data-line-start="119" data-line-end="120"><strong>R13</strong> - create a new user.</li>
<li class="has-line-data" data-line-start="120" data-line-end="122"><strong>R14</strong> - change any users name, email, password, or roles.</li>
</ul>
<p class="has-line-data" data-line-start="122" data-line-end="123">Any user can:</p>
<ul>
<li class="has-line-data" data-line-start="123" data-line-end="125"><strong>R15</strong> - change their password.</li>
</ul>
<h2 class="code-line" data-line-start="125" data-line-end="126"><a id="Security_125"></a>Security</h2>
<ul>
<li class="has-line-data" data-line-start="126" data-line-end="127"><strong>R16</strong> - The web app portal is password-protected and served over HTTPS, exclusively.</li>
<li class="has-line-data" data-line-start="127" data-line-end="129"><strong>R17</strong> - 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.</li>
</ul>
<h2 class="code-line" data-line-start="129" data-line-end="130"><a id="Preferences_129"></a>Preferences</h2>
<p class="has-line-data" data-line-start="130" data-line-end="131">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.</p>
<h2 class="code-line" data-line-start="131" data-line-end="132"><a id="Likely_changes_131"></a>Likely changes</h2>
<p class="has-line-data" data-line-start="132" data-line-end="133">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.</p>
</body></html>

@ -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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

@ -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
Loading…
Cancel
Save