[[TOC]] = RHoK 2011 = Community Emergency Response Teams (CERTs) are local groups of trained volunteers who respond when a crisis situation overwhelms established emergency response resources. There are more than 1800 CERTs, most of which don't have the money or time to implement a commercial tracking and deployment system. As with most volunteer response efforts, resource coordination is one of the primary bottlenecks to effective response. At last year's RHoK event, members of Chicago's Community Emergency Response Team formed a collaboration with the Sahana Foundation to create a community scale volunteer and deployment tracking module for the Sahana-Eden platform. This straight-forward, intuitive module will allow community-level response teams to train, track and deploy accurately and efficiently. It will allow us to quickly identify volunteers with the necessary skills (medical, search and rescue, etc) for an emergency response, improving the outcomes for the communities we serve. Chicago CERT and Sahana developers have created a set of tasks for RHoK 2011 that will allow this project to move from proof-of-concept to implementation with Chicago CERT. Sahana supports Rapid Application Development and has a worldwide network of generous, knowledgeable developers. An excellent introduction to developing for the Sahana platform is available [wiki:Book here]. If you know Python, !JavaScript or CSS design, please consider joining the collaboration! The notes from RHoK 2010 are in [wiki:BluePrintCERT]. The relevant portions for our goals this year are copied into the notes below. It is important to understand that many CERT member and administrators are not strongly technical and are intimidated by the power and complexity of the full platform. There are three functionality areas we hope to build at this year's event: 1. Create a simple, easy-to-follow, intuitive Volunteer and Event database user interface. 2. Create a search functionality that allows administrators to search for volunteers with specific characteristics and choose to send event deployment requests to those volunteers. 3. Automatically process volunteer responses to the deployment information, respond appropriately to the responses, and generate a master list of participating volunteers for the event. This is broken down into speciifc tasks at the end of this page. A demo of the current functionality has been set up at: * http://cert.sahanafoundation.org You are free to register here & play! Development branch is here: * https://code.launchpad.net/~flavour/sahana-eden/cert Laura from CERT Chicago will be at the event in Austin, TX Sahana developers can be found on [wiki:Chat IRC] at #sahana-eden: * flavour (Skype: franboon) physically in Oxford, UK * nursix (Skype: tbc) physically in Sweden * ptressel (Skype: tbc) physically in Portland, OR * graemef physically in Hanoi, VN == 1. Create a simple, easy-to-follow, intuitive Volunteer and Event database user interface == Note: In the first instance, this system will only be accessible to admins & not by the volunteers themselves, so there is less need to work on access rights - that can be added later. The following screenshot is a proposed UI design that should be simple and intuitive enough for non-technical users to be able to follow: [[Image(homepage.png)]] User Story 1: Setup for initial CERT training. === 1a. Create Event === Event types we have so far are "Training", "Emergency Deployment", "Planned Deployment", "Outreach", and "SocialCERT". Basic training is 8 classes and a final exam. CERT Administrator Joe creates an event for each class: [[Image(AddEvent.png)]] === 1b. Create Qualification === Joe also creates a qualification category that requires all classes and the exam. All the classes are internal to CERT and so go under "Training Requirements". No external credentials are required to complete basic training. The Skill Level indicates the maximum level this qualification grants to the volunteer who receives it. If the volunteer already has a higher skill level, they are not downgraded. [[Image(AddQualification1.png)]] Note: Sahana database calls a 'Qualification' a 'Skill' & a 'Skill Level' is a 'Competency Level' === 1c. === Some of the students are already AED / CPR certified, so Joe also creates qualification for that. The students will send Joe a copy of their certification which he will then attach to their profile. [[Image(AddQualification2.png)]] === 1d. Import Class Students === Joe then enters (or import) a list of the students in the class. If they already exist in the volunteer database, the class is added to their existing profile. If they do not exist in the database, a new volunteer record is created. === 1e. === Determining which volunteers have completed all the requirements for a given qualification will be refreshed on a non-configurable time interval or forced by selecting "Refresh All Qualifications" on the Qualifications page. [[Image(ViewQualifications.png)]] === 1f. Status: !Active/Pending === When volunteers first complete all the required classes for Basic Training, their status is changed from "Pending" to "Active" and are eligible for additional call-outs and training. === Sample volunteer profile pages === ==== Info tab ==== The info page is pretty straightforward. The "text" checkbox indicates that the volunteer can receive SMS messages at that number. The "Contact Lists" indicate what types of communications this volunteer will receive from CERT. I'm signed up for everything, but if I wanted to stop receiving notifications about drills I would be removed from the "Drills" contact list. (TODO: preferred method of communication) [[Image(VolunteerProfile_Info.png)]] ==== Qualifications tab ==== The qualifications and level boxes (from left to right, level 1, 2 and 3) are pulled from the qualifications database. The notes and attachments are part of the volunteer's profile. The paperclips indicate an an attached file with verification of that qualification. Note: When volunteers get access to this, they will only be able to add skills with an 'unverified' status (to be added later) [[Image(VolunteerProfile_Qualifications.png)]] ==== Participation tab ==== This is just a list of the events in which the volunteer has participated. In the future we'd like to be able to filter by event type. [[Image(VolunteerProfile_Participation.png)]] ==== Notes tab ==== This is where CERT leadership can make notes that are important or helpful for an incident commander. The information on this page will be added to the volunteer roster that is sent to the incident commander, and instructions on the appropriate types of things to write in this area will be part of our SOP. Note: When the site is extended to allow volunteers to access then this tab would NOT be visible to them. [[Image(VolunteerProfile_Notes.png)]] ==== Events tab ==== This is a read only page that indicates which past deployments the volunteer has responded to at what his / her response was. [[Image(VolunteerProfile_Events.png)]] == 2. Create a search functionality that allows administrators to search for volunteers with specific characteristics and choose to send event deployment requests to those volunteers == The deployment page allows the admin to send a request to specific volunteers. (CONSIDER: Can admins send deployment requests without affiliation to an event?) Note: the list of volunteers is already filtered to those in the 'Community' group for that event type [[Image(AddDeployment.png)]] By default all Active members are shown in the recipient list who are assigned to the appropriate contact list. For instance, if sending a deployment for a Training event, only volunteers who belong to the "Training" contact list will be shown in the recipient list. The list can be further filtered by selecting "Restrict recipients by qualification" and using multi-select to choose. The deployment notice is a standard template. Joe wants to edit before sending so he selected "Edit Request Before Sending" to bring up the preview pane. He adds a couple of notes and select "Send Deployment" [[Image(AddDeploymentWithPreview.png)]] Here is a flow chart of the whole deployment process: [[Image(Deployment_Workflow.png)]] == 3. Process Responses & Generate Roster == Automatically process volunteer responses to the deployment information, respond appropriately to the responses, and generate a master list of participating volunteers for the event As seen in the Deployment Workflow above, volunteers are expected to respond to the deployment request in specific way in order to be processed by the system. When the desired number of volunteers have responded affirmatively, the system sends regrets to all subsequent responses, generates a roster of confirmed volunteers and sends it to the incident commander. The Roster should provide the ability to check volunteers !In/Out of the Event. (Note: a tally of no-shows needs to be recorded for the volunteers) [[Image(SampleCalloutList.png)]] == Specific Tasks == Here are some specific tasks suitable to be achieved during RHoK by developers new to Sahana: === Home Page === These are the files to edit: * {{{controllers/default}}} Function: {{{index.py()}}} * {{{views/default/index.html}}} You /could/ also edit {{{views/layout.html}}} but that should be seen as lower priority. This page may be useful reading: * [wiki:DeveloperGuidelinesCSS] === Emergency Contacts === Add support for Emergency Contacts This could be done by porting across the work done on this in the LA branch: * http://bazaar.launchpad.net/~flavour/sahana-eden/la/view/head:/models/vol.py#L84 * http://bazaar.launchpad.net/~flavour/sahana-eden/la/view/head:/controllers/vol.py#L1356 === Volunteer Status === Ensure that we have !Active/Pending statuses available for a volunteer: * http://bazaar.launchpad.net/~flavour/sahana-eden/cert/view/head:/models/06_hrm.py#L154 Work on the 'rheader' to show this status & the total volunteer hours: * http://bazaar.launchpad.net/~flavour/sahana-eden/cert/view/head:/controllers/hrm.py#L727 === Information Page === Create a custom 'information' method to display the data from the pr_address & pr_contact tables on a single screen, as per the screenshot. It is suggested to implement this as a 'Custom Method' of the person() REST controller: * http://bazaar.launchpad.net/~flavour/sahana-eden/cert/view/head:/controllers/hrm.py#L471 === Events Page === This is a formatted view of the user's upcoming events It is suggested to implement this as a 'Custom Method' of the person() REST controller: * http://bazaar.launchpad.net/~flavour/sahana-eden/cert/view/head:/controllers/hrm.py#L502 This could start as just a list with a {{{response.s3.filter}}}? === Represent for Skill Competency Levels === Volunteers have 3 Competency Levels for their Skills: Level 1, Level 2, and Level 3 These should be displayed in the 3 dots format as shown in the screen shots. This is a represent function: {{{ def my_represent_function(opt): represent = ... return represent table.field.represent = my_represent_function }}} === Deployment Page === This is to send a notification to selected group of recipients for a particular event type. It is suggested to implement this as a 'Custom Method' of the event() REST controller: * http://bazaar.launchpad.net/~flavour/sahana-eden/cert/view/head:/controllers/hrm.py#L181 This could just be an S3Search with preset filters? === Scale Uploaded Images === See: [wiki:Projects/Basic#ScaleUploadedImages ScaleUploadedImages] === Roster === Create the Roster to be sent to the Incident Commander This should be displayed nicely on a Mobile device. This page may be useful reading: * BluePrintMobilePortal === Process Replies === Process SMS/Email replies from Volunteers Can use {{{parserdooth()}}} in {{{controllers/msg.py}}}: http://bazaar.launchpad.net/~flavour/sahana-eden/cert/view/head:/controllers/msg.py#L200 Ideally this would be moved into {{{modules/s3/s3msg.py}}} although this can happen later (Faster to RAD outside modules as no need to restart web2py to see changes)