Version 63 (modified by Fran Boon, 13 years ago) ( diff )


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 here. If you know Python, JavaScript or CSS design, please consider joining the collaboration!

The notes from RHoK 2010 are in 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:

You are free to register here & play!

Development branch is here:

Laura from CERT Chicago will be at the event in Austin, TX

Sahana developers can be found on 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. Volunteer and Event database user interface

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:


User Story 1: Setup for initial CERT training.

1a. Events


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:

Add Event

1b. Qualifications

Qualifications (hrm_skill) can be automatically assigned to a user, with an appropriate Skill Level (hrm_competency) by confirmed Participation in the requisite training Events (hrm_experience). They can also be added by an admin when they upload a scan of ther relevant paper certification.

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.

Add Qualification (Internal Training)

Some of the students are already AED / CPR certified, so Joe also creates a qualification for that. The students will send Joe a copy of their certification which he will then attach to their profile.

Add Qualification (External Certification)

Determining which volunteers have completed all the requirements for a given qualification will be refreshed by a background scheduled task or forced by selecting "Refresh All Qualifications" on the Qualifications page.

View Qualifications

1c. 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.

1d. 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)

Volunteer Profile: Info

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)

Volunteer Profile: Qualifications

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.

Volunteer Profile: Participation

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.

Volunteer Profile: Notes

Events tab

This is a read only page that indicates which past deployments the volunteer has responded to at what his / her response was.

Volunteer Profile: Events

2. Deployment

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. (Note: Admins can also send notifications to a contact list without affiliation to an event)

Note: the list of volunteers is already filtered to those in the Contact List (pr_group) for that event type

Add Deployment

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"

Add Deployment With Preview

Here is a flow chart of the whole deployment process:

Deployment Workflow

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)

Sample Volunteer Callout List

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


  • 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:

Emergency Contacts

Add support for Emergency Contacts

This could be done by porting across the work done on this in the LA branch:

Volunteer Status

Ensure that we have Active/Pending statuses available for a volunteer:

Work on the 'rheader' to show this status & the total volunteer hours:

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:

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:

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

Scheduled Task

We need a scheduled task to update the certifications database - to check for expiry. (updates from particpation in training Events should be done automatically onaccept)

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:

This could just be an S3Search with preset filters?

Process Replies

Process SMS/Email replies from Volunteers

Can use parserdooth() in controllers/

Ideally this would be moved into modules/s3/ although this can happen later (Faster to RAD outside modules as no need to restart web2py to see changes)


Create the Roster to be sent to the Incident Commander

This should be displayed nicely on a Mobile device allow volunteers to be checked-in/checked-out.

This page may be useful reading:

Sending a PDF of the Roster provides a good backup process in case Power/Comms are down.

Scale Uploaded Images

Scale uploaded Profile Pictures

See: ScaleUploadedImages

Attachments (20)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.