...
This documentation describes about the generation of the batch wise assessment report within the course. The report should generate with below fields. For more detail refer this PRD.
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
External ID // External ID is the state ID provided by state for a teacher User ID // User Identifier User Name Email ID Mobile Number Organisation Name District Name School name Assessment Name // Name of the assessment/worksheet/content Total Score // Total score of the all assessment in a course( Eg: 2/3+3/4+2/3=7/10 ) |
...
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
usr_external_identity // To get the user external id information user // to get the user information course_batch // To get the details about the batch enrolled to course user_courses // To get the information about the user enrolled to courses user_org // to get the user organisation details assessment_historyprofile (new) // Assessment result |
...
As per the above diagram, End user will sync the assess events through api, which will update the database with computed values. The assessment data product which read data from the database and will generate the reports per batch and uploads to azure cloud storage.
Assessment update API:
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
METHOD: POSTPATCH URI: action/data/v3/assess/telemetry BODY: { "id": "sunbird.telemetry", "ver": "3.0", "ets": 1566884714550, "events": [] // Only ASSESS Events } |
Disadvantages:
- Need to
validate
andde-dup
the the events.
...
/v1/content/state/update // End point
REQUEST: {
"request": {
"contents": [ ],
"assessments": [
{
"assessmentTs": 1567591211000, //Assessment time in epoch
"batchId":"", // Batch Identifier - required
"courseId":"", // Course Identifier - required
"userId":"", // User Identifier - required
"attemptId":"", // Attempt Identifier - required
"contentId": "", // Content Identifier - required
"events": [ ] //ONLY ASSESS Events - required
}
]
}
} |
Request Structure:
Events related to particular to batchId, courseId, userId, attemptId, contentId should be grouped together while calling this API.
attemptId: Should be generated from Hashing HASH(courseId, userId, contentId, batchId)
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
CREATE TABLE assessment_histroy({ "id": "api.content.state.update", "ver": "v1", "ts": "2019-09-04 12:47:08:954+0000", "params": { "resmsgid": null, "msgid": "bec2defc-ddca-7b37-6a24-1dcbdfb23d48", batch_id: text // Batch identifier."err": null, user_id"status": text"success", // User Identifier. attempt_id: index, // Question Attempt identifier, To track the number of attempts on that question. course_id: text, // Course Identifier. assessment_id: text // Identifier of the assessment/content/worksheet assessment_name: text // Name of the assessment/content/worksheet question: jsonb // array[objects] // Question details spec object date_time: timestamp // Time stamp, To know last updated time."errmsg": null }, "responseCode": "OK", "result": { "<contentId>": "SUCCESS" } } |
Disadvantages:
- Need to
validate
andde-dup
the the events.
Table Schema:
Question object :
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
CREATE TABLE assessment_aggregator ( batch_id text, user_id text, course_id text, content_id text, attempt_id text, updated_on timestamp, created_on timestamp, last_attempted_on timestamp, total_score int, total_max_score int, question list<frozen<question>>, PRIMARY KEY (batchcontent_id, attempt_id, user_id, course_id, assessmentbatch_id ) ) CREATE INDEX ON assessment_aggregator ) |
Question object :
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
question:{ "qid": "do_957399094343"(last_attempted_on); CREATE TYPE question( id text, " max_score": 5int, " score": 2int, " type" :"mcq/mmcq/ftb/mtf" text, "title": "Choose valid odd number" "pass": "Yes"/"No", "desc":"Description of the question", "duration": 5 } title text, resvalues list<map<text,text>>, params list<map<text,text>>, description text, duration decimal ); |
Challenges:
- How to capture the
attempts? i.e. Number of times the particular user is attempted particular question.
- How to capture the
batch-id
andcourse-id
...