Fighting Malnutrition with SMS and Django - Presentation Transcript
Fighting Malnutrition
with SMS and Django
Andy McKay
clearwind consulting
andy@clearwind.ca
@clearwind
clearwind consulting
Lots of Plone sites
Wrote book
clearwind consulting
Prinicpal of Clear wind
Been doing Python for about 9 years
co-founder of Enfold Systems
clearwind consulting
clearwind consulting
existing project
clearwind consulting
rapidsms
clearwind consulting
Schuyler Erle
Matt Berg
Adam McKaig
and others...
clearwind consulting
deployment help?
clearwind consulting
4 days, 32 hours flight...
clearwind consulting
clearwind consulting
and yes this area is home
to a certain famous
family....
clearwind consulting
health care workers
for community health
care workers in the field
large number of children
to look after
in village (not in clinics)
clearwind consulting
clearwind consulting
identify and help
sometimes not easy to spot malnurished kids
maybe no records
let other people know the kid needs help
parents sometimes have enough trouble feeding rest
of the family
clearwind consulting
disclaimer
I am not a health care
worked or related to
development
i know the techy bits
can't speak about
efficiency of the program
clearwind consulting
Robbed of vital nutrients as
children, they grow up stunted and
sickly, weaklings in a land that still
runs on manual labor.
http://www.nytimes.com/2006/12/28/world/africa/
28malnutrition.html
clearwind consulting
muac
mid upper arm
circumfrence
Matt Berg
clearwind consulting
muac
children worker
clearwind consulting
muac sms
children worker django
clearwind consulting
muac sms sms
children worker django clinic
clearwind consulting
serial
spomskyd
clearwind consulting
serial
spomskyd
http
django route
clearwind consulting
clearwind consulting
serial
pygsm
http
since then spomskyd has
been replaced by pygsm django route
pygsm do a lot of work
sorting out all those sms
quirks
clearwind consulting
7654321 > +26 105 d v f
child 26
MUAC 105
diarrheoa
vomiting
fever
clearwind consulting
7654321 > +26 105 d v f
7654321 < MUAC> SAM+ Patient requires
IMMEDIATE inpatient care. +26 MADISON, M, F/4 (Sally).
MUAC 105 mm, Diarrhea, Fever, Vomiting
clearwind consulting
7654321 > +26 105 d v f
7654321 < MUAC> SAM+ Patient requires
IMMEDIATE inpatient care. +26 MADISON, M, F/4 (Sally).
MUAC 105 mm, Diarrhea, Fever, Vomiting
7654322 < @jdoe reports +26: SAM+, MUAC 105
mm, Diarrhea, Fever, Vomiting
clearwind consulting
malaria
clearwind consulting
7654321 > mrdt +34 y n f
malaria rapid
diagnosis
child 34
y has malari
n has no bednet
f has a fever
clearwind consulting
7654321 > mrdt +34 y n f
7654321 < MRDT> Child +34, MADISON, Molly,
F/12m has MALARIA. Child is less than 3. Please provide
1 tab of Coartem (ACT) twice a day for 3 days
clearwind consulting
Matt Berg
clearwind consulting
flew back
clearwind consulting
slept
moved house
slept, slept
http://www.flickr.com/photos/chris_gin/2388032929/sizes/l/
clearwind consulting
technical details
some of these are based on later work for Malawi
talk about a few of the bits i worked on
interesting
clearwind consulting
rapidsms
clearwind consulting
from rapidsms.message import Message
message.text
message.person rapidsms api
message.send()
message.respond(text)
message.forward(identity, text=None)
clearwind consulting
decorator for routing
clearwind consulting
# Register a new patient
@keyword(r'new (S+) (S+) ([MF]) ([d-]+)
( D+)?( d+)?( zd+)?')
@authenticated
def new_case (self, message,...[snip]):
# Do something with the new patient
clearwind consulting
i like urls.py
clearwind consulting
1. see what's going where
2. route to different
its a django standard,
more friendly for other
users
easier to change sms
without having to
change the code
clearwind consulting
urlpatterns = patterns('',
(r'^new (.*)',
"apps.mctc.views.joining.new_case"),
)
despite the name, url
patterns can be used for
more than just urls
clearwind consulting
full of checking
code, views were full of
checking and validation
in django this is done by
forms
clearwind consulting
parse string into form
clearwind consulting
# NEW 70 1201 M 19102008 123124124
class NewForm(Form):
child = StringField(valid="(d+)")
gmc = StringField(valid="(d+)")
sex = GenderField()
dob = DateField(format="%m%d%Y")
contact = StringField(valid="(d+)",
required=False)
clearwind consulting
class based views
http://www.slideshare.net/simon/
classbased-views-with-django
clearwind consulting
class based view that does repetitive
work
→ validate form
→ process form
→ what to do if it goes wrong
subclassed for different country (eg.
Malawi)
clearwind consulting
class MalawiNew(New):
@authenticated
def post_init(self):
self.form = NewForm
def pre_process(self):
# malawi specific request
years, months = years_months(self.form.clean.dob.data.strftime.data)
if years > 5:
raise FormFailed, "You have attempted to register child #%s. However, "
"the date of birth entered is %s. The age of this "
"child is above 5 years. Please resend SMS with corrected "
"age." % (self.form.clean.child.data, self.form.clean.dob.data.strftime("%m.
%d.%Y"))
def post_process(self):
if self.form.clean.contact.data:
self.data.case.mobile = self.form.clean.contact
def error_already_exists(self):
# malawi specific code
return "You have attempted to register child #%s in %s GMC. However, this child
already exists. If this is an error, please resend SMS with correct information. If this
patient is new or a replacement, please use the EXIT command first, then re-register." %
(self.form.clean.child.data, self.data.provider.clinic.name)
clearwind consulting
testing
clearwind consulting
tests really matter
clearwind consulting
brillianty done format
test_05_cancelling = """ allows easy reading by
non technical users
1234567 > REPORT 70 25.2 95.5 13.5 N
Y
1234567 < Thank you Mariam Coulibaly
for reporting child #70, weight = 25.2 kg,
height = 95.5 cm, MUAC = 13.5 cm, no oedema,
yes diarrhea...[snip]
1234567 > CANCEL 70
1234567 < Report for 70 cancelcel...
[snip]"""
clearwind consulting
another framework?
designed for a non-technical audience
as a techy that can be annoying, eg settings.py
if you just want to speak to SMS and nothing else, maybe better way to go
clearwind consulting
not enough time
schuyler, adam, matt
clearwind consulting
infrastructure
this is the pavement in
the main street
clearwind consulting
We have over 5000 kids in the
system now and counting. It's
been used to catch over 100 kids
with malnutrition and about 400
with malaria.
Matt Berg
clearwind consulting
thank you, django
clearwind consulting
volunteers wanted
5-10
Hour projects we would
love volunteer help with
clearwind consulting
more info
www.rapidsms.org/rapidresponse
mberg@ei.columbia.edu
clearwind consulting
questions
Andy McKay
clearwind consulting
andy@clearwind.ca
@clearwind
0 comments
Post a comment