[[TOC]] = Survey Tool Blue Print - Assessment Data Analysis Tool (ADAT) = == Introduction == ADAT will provide IFRC with a flexible tool to create assessments and analyse the data. == Features == * Easily create customised assessments * Reusable list of questions which can be used in multiple assessments * Ability to compare the same questions from different assessments == Back Ground == This blue print describes the extensions to use the Survey Tool to implement the ADAT project for IFRC. It is based on the initial specification from the GSoC project: http://wiki.sahanafoundation.org/doku.php/foundation:surveytool_spec, although reflecting changes due to improvements to the Sahana Eden Framework and lessons learned from the GSoC project. == Statistics == Some further information about the Statistics behind ADAT can be found in BluePrint/SurveyTool/Statistics == Data Model == [[Image(data_model.png)]][[BR]] [http://yuml.me/diagram/scruffy/class/edit/%23%20Cool%20UML%20Diagram,%20%5BTemplate%5D+1-%3E0..*%5BSections%5D,%20%5BSections%5D+1-%20%3E0..*%5BSurvey%20Question%5D,%20%5BQuestion%5D+1-%3E0..*%5BSurvey%20Question%5D%20%20,%20%5BTemplate%5D+1-%3E0..*%5BSeries%5D,%20%5BSeries%5D+1-%3E0..*%5BTable%20for%20Survey%20Answers%5D,%20%5BTemplate%5Dused%20to%20define-.-%3E%5BTables%20for%20Survey%20Answers%5D.] === Implemented model === [[Image(survey_implementation.png)]][[BR]] [http://yuml.me/diagram/class/edit/%23%20Cool%20UML%20Diagram,%20%5Bsurvey_template%5D+1-%3E0..*%5Bsurvey_sections%5D,%20%5Bsurvey_template%5D+1-%3E0..*%5Bsurvey_question_list%5D,%20%5Bsurvey_template%5D+1-%3E0..*%5Bsurvey_series%5D,%20%5Bsurvey_sections%5D+1-%20%3E0..*%5Bsurvey_question_list%5D,%20%5Bsurvey_question%5D+1-%3E0..*%5Bsurvey_question_metadata%5D,%20%5Bsurvey_question%5D+1-%3E0..*%5Bsurvey_question_list%5D] # Cool UML Diagram [survey_template]+1->0..*[survey_sections] [survey_template]+1->0..*[survey_question_list] [survey_template]+1->0..*[survey_series] [survey_sections]+1- >0..*[survey_question_list] [survey_question]+1->0..*[survey_question_metadata] [survey_question]+1->0..*[survey_question_list] === Template === Table to store all the information about an assessment === Series === Table to store data related to a specific "instance" of a template: * Title * Conducted By (Person & Organisation) * Logo (Default from Org Logo) * Language * Duration === Sections === Used to split an assessment up into different sections * Reuse the existing 'subheadings' functionality to split a create form into different "sections" (with headings) * see rat() in {{{controllers/assess.py}}} === Section Question === Table to link questions with sections === Question === Library of questions which can be reused on numerous assessment templates. This table will have to store all information needed to construct the questions (widget definition). [[BR]] See http://wiki.sahanafoundation.org/doku.php/foundation:surveytool_spec#question_data_types for types of questions. === Tables for Survey Answers === Table to store data for completed assessments will be defined dynamically when that assessment is first filled. The name of this table will be stored in the template table. The Survey will be accessed via the REST Controller to be filled out, analysed, exported, etc.[[BR]] This can certainly utilise the new S3Request capability to handle foreign table access, so that you do not need a dedicated controller per survey table, but can just create a suitable request substitute from the controller, like:[[BR]] {{{r = s3mgr.parse_request(prefix=xxx, name=yyy) output = r()}}}[[BR]] or, if you want more granular control, then use it URL-like:[[BR]] {{{r = s3mgr.parse_request(c=xxx, f=yyy, args="create", vars="...") output = r()}}}[[BR]] where xxx_yyy is the respective survey answer table. == Work Flow == === Create Assessment Template === 1. Enter basic data for the Template 1. Add a Section to the Template 1. Add a Question to the Section, by either: 1. Creating a new Question 1. Reusing an existing Question 1. Repeat steps 2. & 3. as required === Fill Assessment === 1. Select a Assessment Template to complete 1. ''If this is a new template'' 1. Create a table based on data in the Template, Sections, Section Questions and Question. 1. Lock all of the records in these tables (Template can't be modified after it's been used. 1. Optional: Create a copy of the template (and components) so that it can be modified at a later date. 1. Open the table for the Assessment Template in a regular Create view === Analyse Assessment === Much of the initial work on ADAT will focus on the analysis of the assessment data. This will be broken down into two distinct areas: * Analysis of the forms itself * Analysis of the data gathered by using the forms. The analysis of the forms will help to answer the questions, "What sort of analysis can be performed with this form?" and "Which questions can't be analysed easily?" The analysis of the data will fall into several distinct categories, which build upon each other: * Simple summary of each question * Charts based on the data for one question * Mapping of point location * Basic statistical analysis of numerical data * Analysis combining multiple numerical questions * Mapping of areas (showing basic statistical data visually) * Advanced statistical analysis, including: * Identifying potential outliers * Regression test ==== Template Analysis ==== The template will consists of questions, each question will have a question type associated with it. These question types will form the basis of the analysis: ||=Questions Type=||=Type of analysis possible=|| ||Location||Mapping analysis will be possible (for the whole form)|| ||String or texts||Minimal analysis (count for equality would be possible, such as answering the question how many assessment forms has this person submitted)|| ||Option||Charts and frequency tables|| ||Rating||Charts, frequency tables and basic statistical analysis|| ||Numerical||Statistical and multi-value analysis|| ||Date and Time||Would allow for time based analysis|| The basic form analysis can be broken down into the following sequence: * Identify the number of questions of each type * Identify if the Completed Survey can be displayed on a map * Identify the number (and ratio) of text based questions * Generate a rating of the assessment form (very subjective but may be of use for guidance) * Identify sections that have a low rating (therefore might be improved with more quantitative data) * A matirx, showing for Each Question Show which analysis can be performed: * Statistics (Sum, Average, Max, Min) * Chart (Bar Graph) * Map (display question values on map) It may be desirable to allow certain section to be excluded from this analysis (such as the contact details of the enumerators). ==== Data Analysis ==== The system can perform some automatic analysis that will be presented in the summary and will suggest other analysis that can be done but it would require a person with an understanding of the data to drive the analysis. Once certain tasks have been set up these can be repeated by the system as new data arrives or on filtered data sets.[[BR]] MH: I don't think that we nee to go into this level of detail ==== Series Analysis ==== * How many questions were answered * for each form (a measure of the quality of the data could be linked to the number of answers provided on the form) * for each question (a measure of the quality of the question could be linked to the number of times an answer has been provided) * frequency table: * for questions of type option * optionally, for numerical data * Calculate mean for rating questions ==== Completed Survey Analysis ==== 1. Select an Survey Series * Option to select a range of completed surveys throguh a. Using the existing search method a. Selecting rows in the table (next phase) 1. Have a list of options for the type of analysis 1. Tables (& PDF & Excel) - Default 1. Charts (Bar Graphs) * User can select which 2 fields to display 1. Survey Map - A pin represents a completed survey 1. Answer Map - A coded pin represents a numeric value (Heat Map or option (Ushahidi Style) 1. Statistical (Sum, Average, Min, Max) - this could be an extension to our Datatables 1. View all the results for that Assessment Template using 1. Tables (& PDF & Excel) 1. Plots (Graphs) 1. Map 1. Statistical (Sum, Average, Min, Max) - this could be an extension to our Datatables == Additional Functionality == === Translation === Implement a generic UI feature which allows the translation of strings which are stored in the database. This could be based on the web2py admin UI. == Tasks == * Roles and permissions * Create the data model * Template and series * Section and questions * Question type, standard questions (and maybe standard sections) * Create Test Data * Design the CSV and xsl for each table * Add some basic data (as a minimum) - 1 template - 2 series - 5 questions in each section - 20 completed surveys in each series * Add additional data for extensive testing - probably need at least 11 templates (to test the pagination of dataTable row select) * UI for creating a template * Create a new template * Reuse an existing template * List all templates (filter on status - pending, active & completed) * add a section (select a standard section-?) * add or select questions * select a question type * modify a question type * UI for assessment data * List templates (silently manage the template status so if necessary it is locked) * Enter answers to the template * Remember the template that the user has been working on for easy recall * UI for basic analysis * Select the template(s) for analysis * Select the questions for analysis (optional - default will be all) * Complete the enhancement of dataTables to manage multi-row select * Provide basic summary on screen * Export details to excel (one sheet per template, one row per answer) * PDF presentation of the screen display * UI for advanced analysis * Add to the screen and PDF presentation by adding: - charts (based on question type defaults - using matplotlib) - maps (based on question type defaults) * Select analysis type for each question (default will depend upon the question type) * Select data that can be aggregated * Dynamic translation of strings * //Need to look at how web2py admin does this.// * Printed (pdf) format * Add image handling in S3PDF * Add proper header and footer handling in S3PDF