Skip to content
This repository has been archived by the owner on Feb 9, 2021. It is now read-only.

User Stories

ntoll edited this page May 25, 2012 · 2 revisions

User stories organised by subject.

Administration

Stories relating to basic administrative tasks associated with the website.

New users

There should be a link on every public facing page that allows users to either sign up or log in. this should be especially so on the homepage. In the first instance I suggest we piggy-back on Django's built in user and group management (see: https://docs.djangoproject.com/en/dev/topics/auth/) with perhaps the addition of something like django-social-auth to allow users to link their presence on social networks with their checklisthq.com account (see: https://github.com/omab/django-social-auth)

Existing User Administration

If / when a user is logged in, there should be an obvious means to changing their settings. I suggest we piggy-back on Django's built in user management (see above).

Admin site

There should be an admin area in the application that allows super-users to administer the site (add users, change data, delete things). We should use Django's built in admin capabilities (see: https://docs.djangoproject.com/en/1.4/ref/contrib/admin/) but change the default path from /admin to something less obvious.

Checklist Curation

Stories relating to the life-cycle of a checklist from creation to deletion.

Checklist attributes

Every checklist should have at least the following attributes:

  • A title (text)
  • An owner (FK to a user)
  • Content (the text of the checklist expressed as checklistDSL)
  • Tags (perhaps we can piggy-back on some of the options described here: http://davidfischer.name/2010/09/django-taggit-vs-django-tagging/)
  • Created timestamp.
  • Type of checklist ie. whether or not different sections need to be completed sequentially or Non-sequentially.

Given that we want checklists to be versioned I suggest the checklist table contain one row for each version of a checklist with a unique id for the checklist (a uuid4) and a unique constraint on the uuid and head flag (indicating what row is currently the latest version). To this end, the checklist table probably needs the following fields:

  • UUID (universally unique ID) that tracks the identity of the checklist across users / revisions.
  • A unique SHA1 value for each version derived from the content, timestamp and other unique fields described above.
  • DSL_Version - if we ever enhance or change the DSL we need to know which version of the interpreter to use with a specific checklist.
  • Parents - a list of sha1 values indicating the parent revisions contributing to the current revision.
  • Commit message - a la VCS systems.

Checklist dashboard

It should be possible to see recent activity associated with your checklists. This could also be exposed as an RSS/ATOM feed (see: https://docs.djangoproject.com/en/1.4/ref/contrib/syndication/). Activities to log include:

  • Branching
  • Merging
  • Edits
  • Comments

Create / Clone a Checklist

There should be an obvious way to create a new checklist and fill in the required details (as described above). In addition, it should be possible to clone existing checklists from other users and have the details filled in automatically.

Edit a checklist

It should be possible to edit the content and tags of a checklist. There should be an obvious preview button so we don't hit the database with unfinished / incomplete changes. There should also be an opportunity for the person making the edits to leave a commit message describing what they changed.

An option of a creating/ editing a checklist using a simple GUI interface

The less technically inclined might be scared by the text based input. A switch should be present to give an alternative graphical user interface to create/ edit checklists. Ideally this should not require a page reload.

Comments

It should be possible to add comments to a specific version of a checklist. Django has a commenting library built in (see: https://docs.djangoproject.com/en/1.4/ref/contrib/comments/) but I'm not sure how good it is.

Checklist diff view

It should be possible to compare two versions of the same checklist (as identified by it's UUID). See http://docs.python.org/library/difflib.html#difflib.HtmlDiff (part of the Python standard library) and the discussion here: http://stackoverflow.com/questions/1576459/generate-pretty-diff-html-in-python

Merge checklists

There should be a way to merge two different versions of the same checklist (identified by the UUID). If there are conflicts the merging user should be given the opportunity to make modifications before submitting the final version.

Delete checklist

Deleting a checklist must not remove all other child versions. Rows in the checklist table should be marked with a deleted flag and not actually deleted from the database (ergo this table is likely to grow a lot).

Checklist usage

Stories relating to how a checklist is used by medical practitioners "in the wild".

Create a new "run" of a specific checklist

Assign roles in a run / invite participants.

Auto-update fields (AJAX and long-polling perhaps).

Mark a run as complete.

View run history.

Ensure only participants have access to the run.

Exporting a checklist out of ChecklistHQ.com

Checklists can be exported to standalone platforms that can track it's own runs of the checklist. This is to enable use within closed environments to preserve patient confidentiality and to overcome information governance issues. Metadata should be present within this file to enable version tracking.

Printing a checklist for use in paper

An ability to create an formatted version of the checklist to be used on paper. This should have certain pre-defined templates and font size can and layout can be automatically adjusted.

Using a checklist in a closed electronic system