Index: openacs-4/packages/assessment/www/doc/data_collection.html
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/doc/data_collection.html,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/assessment/www/doc/data_collection.html 4 Aug 2004 19:52:41 -0000 1.6
+++ openacs-4/packages/assessment/www/doc/data_collection.html 5 Aug 2004 01:29:06 -0000 1.7
@@ -109,38 +109,25 @@
procedurally sign all as_item_data at once if the assessment author requires only a section-level or assessment-level
signature.
+ "Events" related to assessments In some applications (like clinical trials), it is important to define
+ a series of "named" assessment events (like "baseline" "one month" "six months" etc) at which time assessments
+ are to be performed. Earlier we included an "event_id" attribute in data collection entities (notably as_item_data)
+ to make mapping of these events to their data easy. This denormalization makes some sense for efficiency considerations,
+ but it doesn't prove to be generally applicable enough to most contexts, so we've removed it. Instead, any
+ client package using Assessment in this fashion should implement its own relationships (presumably with acs_rels).
+ "Status" of data collection entities An assessment author may specify different allowable steps
+ for her assessment -- such as whether a user can "save&resume" between sessions, whether a second user needs
+ to "review&confirm" entered data before it becomes "final", etc etc. Rather than try to anticipate these kinds
+ of workflow options (and considering that many uses of Assessment won't want to track any such status), we've
+ decided to move this out of the data model for Assessment per se and into Workflow. Assessment authors will have
+ a UI through which they can configure an applicable workflow (defining states, roles, actions) for the assessment.
- While this doesn't impact the datamodel structure of this data collection subsystem per se, we do add an
- important innovation to Assessment that wasn't used in "complex survey" or
- questionnaire. When a user initiates an Assessment Session (either by requesting the assessment form
- to complete herself -- such as in an online survey -- or by an admin user "assigning" the assessment to be
- performed by -- or about -- a subject at some point in the future), an entire set of
- Assessment data collection objects is created (literally, rows are inserted into all the
- relevant tables -- as_section_data, as_item_data). Since these are CR-based entities, this means that
- a cr_item and the initial cr_revision record are created for each of these entities. Then when
- the user submits a form containing responses to one or more items in the assessment, the database
- action consists of updates in the CR, not insertions. This contrasts to the existing "survey" packages,
- in which "survey_response" or "survey_question_response" rows are only inserted once the user submits
- the html form.
- Why is this a good idea? Here's the use case: for an educational course, a teacher plans a set of six
- exams that the students can complete at their own rate. The teacher wants Assessment to tell her at any
- moment the status -- at the individual item level -- the status of each student's progress through the exam
- series. In fact, the UI to do this should create a grid consisting of columns corresponding to the exams (and
- the individual exam questions in a drill-down) and rows consisting of each student. Each cell in this grid
- will be colored red if the item is unanswered, yellow if answered but not "confirmed" (ie the student has "saved&resumed"
- the exam and wants to revise it further), and green if "confirmed" ie "handed in".
- If the data collection subsystem doesn't create a set of "empty" records, the only way that procedurally this
- kind of report can be generated is by repeatedly looping through the assessment's metadata and looking for the
- existence or nonexistence of corresponding records in the data collection entities for each of the students. This
- is the way the current survey and questionnaire packages have had to do it; it is ugly, error prone, and inefficient.
- We need to do it differently in Assessment!
Synopsis of Data-Collection Datamodel
Here's the schema for this subsystem:
- Source Graffle file
+
@@ -173,8 +160,6 @@
style="color: rgb(255, 0, 0);">
staff_id - references Users if someone is doing the
Assessment as a proxy for the real subject
- event_id - this is a foreign key to the "event" during which this assessment is
- being performed -- eg "second term final" or "six-month follow-up visit" or "Q3 report".
target_datetime - when the subject should do the Assessment
creation_datetime - when the subject initiated the
Assessment
@@ -183,8 +168,6 @@
last_mod_datetime - the most recent submission
completed_datetime - when the final submission produced a
complete Assessment
- session_status - Status of the session (and therefore of the
- assessment with regards to the subject)
ip_address - IP Address of the entry
percent_score - Current percentage of the subject achieved so
@@ -210,9 +193,6 @@
section_id
subject_id
staff_id
- event_id - this is a foreign key to the "event" during which this assessment is
- being performed -- eg "second term final" or "six-month follow-up visit" or "Q3 report".
- section_status
@@ -233,17 +213,6 @@
subject_id
staff_id
item_id
- item_status - Status of the answer; defaults to "unanswered". Other options could include
- "submitted, deferred, confirmed, final, is_unknown" -- but this shouldn't be hard-wired into the sql but
- rather be something that can be configured via categories. Note that this single field
- can replace the previous "is_unknown_p" field which we previously added.
- This field is important to clearly
- distinguish an Item value that is unanswered from a value that means
- "We've looked for this answer and it doesn't exist" or "I don't know
- the answer to this". Put another way, if none of the other "value"
- attributes in this table have values, did the subject just decline to
- answer it? Or is the "answer" actually this: "there is no answer". This
- attribute toggles that clearly when set to "is_unknown".
choice_id_answer - references as_item_choices
boolean_answer
numeric_answer