# -*- coding: utf-8 -*-
"""
This module contains all the rheumatism
questionnaire models
:subtitle:`Class definitions:`
"""
from django.db import models
from django.utils.translation import ugettext as _
from apps.questionnaire.models import QuestionnaireBase
RADAI_DEFAULT_SCORE = (
('none', _('Niet')),
('almost_unnoticeable', _('Bijna onmerkbaar')),
('minimal_to_mild', _('Minimaal tot mild')),
('mild', _('Mild')),
('mild_to_moderate', _('Mild tot matig')),
('moderate', _('Matig')),
('moderate_to_severe', _('Matig tot hevig')),
('severe', _('Hevig')),
('severe_to_extreme', _('Hevig tot extreem')),
('extreme', _('Extreem')),
)
RADAI_STIFFNESS_SCORE = (
('none', _('Geen')),
('less_30min', _('< 30 min')),
('30_to_60min', _('30-60 min')),
('1_to_2hours', _('1-2 uur')),
('2_to_4hours', _('2-4 uur')),
('4_to_less1day', _('> 4 uur maar niet de hele dag')),
('all_day', _('Hele dag')),
)
RADAI_PAIN_SCORE = (
('none', _('Geen')),
('mild', _('Mild')),
('moderate', _('Matig')),
('severe', _('Hevig')),
)
# Rheumatoid arthritis Disease Activity Ondex (RADAI) Questionnaire
[docs]class RADAIQuestionnaire(QuestionnaireBase):
"""
Rheumatoid arthritis Disease Activity Ondex (RADAI) Questionnaire
"""
activity_six_month_score = models.CharField(
choices=RADAI_DEFAULT_SCORE,
max_length=32,
verbose_name=_(
'Hoe actief is de artritis geweest de afgelopen 6 maanden?'))
activity_today_score = models.CharField(
choices=RADAI_DEFAULT_SCORE,
max_length=32,
verbose_name=_(
'Hoe actief is de artritis vandaag in termen van' +
' gewrichtsgevoeligheid en zwelling?'))
pain_today_score = models.CharField(
choices=RADAI_DEFAULT_SCORE,
max_length=32,
verbose_name=_('Hoeveel artritis pijn ervaart u vandaag?'))
stiffness_today_score = models.CharField(
choices=RADAI_STIFFNESS_SCORE,
max_length=32,
verbose_name=_(
'Hoe lang voelde u stijfheid van de gewrichten vandaag?'))
# left pain scores
left_shoulder_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Linker schouder'))
left_elbow_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Linker elleboog'))
left_wrist_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Linker pols'))
left_vingers_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Linker vingers'))
left_hip_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Linker heup'))
left_knee_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Linker knie'))
left_ankle_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Linker enkel'))
left_toes_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Linker tenen'))
# right pain scores
right_shoulder_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Rechter schouder'))
right_elbow_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Rechter elleboog'))
right_wrist_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Rechter pols'))
right_vingers_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Rechter vingers'))
right_hip_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Rechter heup'))
right_knee_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Rechter knie'))
right_ankle_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Rechter enkel'))
right_toes_pain_score = models.CharField(
choices=RADAI_PAIN_SCORE,
max_length=32,
verbose_name=_('Rechter tenen'))
# display name
display_name = _('Ziekteactiviteit')
lower_case_name = 'radaiquestionnaire'
@property
def graphic_score_display(self):
"""
Returns:
The graphic score display to use for the graphic
"""
# count of left/right pain scores
count = 0
for field in self._meta.fields:
if 'right_' in field.name or 'left_' in field.name:
if getattr(self, field.name) not in ('none', '', None):
count = count + 1
return count
def graphic_score_max(self):
return 16
def graphic_score_min(self):
return 0
def graphic_score_name(self):
return _('Pijnlijke gewrichten')
@property
def display_template(self):
"""
Returns:
The template path & name to be used for showing the details
page for the filled in data for this questionnaire.
"""
return 'questionnaire/details/RADAIQuestionnaire.html'
HEALTH_GENERAL_SCORE = (
('excellent', _('Uitstekend')),
('very_good', _('Zeer goed')),
('good', _('Goed')),
('poor', _('Matig')),
('bad', _('Slecht')),
)
HEALTH_CHANGES_SCORE = (
('much_better', _('Veel beter dan een jaar geleden')),
('slighty_better', _('Iets beter dan een jaar geleden')),
('about_same', _('Ongeveer hetzelfde als een jaar geleden')),
('slighty_worse', _('Iets slechter dan een jaar geleden')),
('much_worse', _('Veel slechter dan een jaar geleden')),
)
EFFORT_SCORE = (
('severe', _('Ja, ernstig beperkt')),
('a_bit', _('Ja, een beetje beperkt')),
('not', _('Nee, helemaal niet beperkt')),
)
PROBLEM_SCORE = (
('yes', _('Ja')),
('no', _('Nee')),
)
SOCIAL_IMPACT_SCORE = (
('nothing', _('Helemaal niet')),
('a_bit', _('Enigzins')),
('a_lot', _('Nogal')),
('much', _('Veel')),
('verry_much', _('Heel erg veel')),
)
PAIN_SCORE = (
('none', _('Geen')),
('really_light', _('Heel licht')),
('light', _('Licht')),
('a_lot', _('Nogal')),
('severe', _('Ernstig')),
('really_severe', _('Heel ernstig')),
)
PAIN_IMPACT_SCORE = (
('none', _('Helemaal niet')),
('a_bit', _('Een klein beetje')),
('a_lot', _('Nogal')),
('much', _('Veel')),
('verry_much', _('Heel erg veel')),
)
FEELING_SCORE = (
('non_stop', _('Voortdurend')),
('often', _('Meestal')),
('frequently', _('Vaak')),
('sometimes', _('Soms')),
('rarely', _('Zelden')),
('never', _('Nooit')),
)
SOCIAL_IMPACT2_SCORE = (
('non_stop', _('Voortdurend')),
('often', _('Meestal')),
('sometimes', _('Soms')),
('rarely', _('Zelden')),
('never', _('Nooit')),
)
RELATIVATION_SCORE = (
('correct', _('Volkomen juist')),
('partly_correct', _('Grotendeels juist')),
('dontknow', _('Weet ik niet')),
('party_incorrect', _('Grotendeels onjuist')),
('incorrect', _('Volkomen onjuist')),
)
[docs]class RheumatismSF36(QuestionnaireBase):
"""
Rheumatoid arthritis SF36 questionnaire
"""
health_general = models.CharField(
choices=HEALTH_GENERAL_SCORE,
max_length=32,
verbose_name=_(
'Wat vindt u, over het algemeen genomen, van uw gezondheid?'))
health_changes = models.CharField(
choices=HEALTH_CHANGES_SCORE,
max_length=32,
verbose_name=_(
'In vergelijking met een jaar geleden, hoe zou u nu uw'
'gezondheid in het algemeen beoordelen?'))
# Daily effortsStartUrgentQuestionnare
high_effort_impact = models.CharField(
choices=EFFORT_SCORE,
max_length=32,
verbose_name=_(
'Forse inspanning zoals hardlopen, zware voorwerpen tillen,' +
' inspannend sporten'),
help_text=_(
'De volgende vragen gaan over uw dagelijkse bezigheden. Wordt' +
' u door uw gezondheid op dit moment beperkt bij' +
'deze bezigheden? Zo ja, in welke mate?'))
poor_effort_impact = models.CharField(
choices=EFFORT_SCORE,
max_length=32,
verbose_name=_(
'Matige inspanning zoals het verplaatsen van een tafel,' +
' stofzuigen, fietsen'))
carrying_impact = models.CharField(
choices=EFFORT_SCORE,
max_length=32,
verbose_name=_('Tillen of boodschappen dragen'))
walking_stairs_impact = models.CharField(
choices=EFFORT_SCORE,
max_length=32,
verbose_name=_('Een paar trappen oplopen'))
walking_one_stair_impact = models.CharField(
choices=EFFORT_SCORE,
max_length=32,
verbose_name=_(u'Eén trap oplopen'))
bent_over_impact = models.CharField(
choices=EFFORT_SCORE,
max_length=32,
verbose_name=_('Buigen, knielen of bukken'))
walk_km_impact = models.CharField(
choices=EFFORT_SCORE,
max_length=32,
verbose_name=_('Meer dan een kilometer lopen'))
walk_halfkm_impact = models.CharField(
choices=EFFORT_SCORE,
max_length=32,
verbose_name=_('Een halve kilometer lopen'))
walk_tenthkm_impact = models.CharField(
choices=EFFORT_SCORE,
max_length=32,
verbose_name=_('Honderd meter lopen'))
wash_cloth_impact = models.CharField(
choices=EFFORT_SCORE,
max_length=32,
verbose_name=_('Uzelf wassen of aankleden'))
# Fysical problems
work_less_problem = models.CharField(
choices=PROBLEM_SCORE,
max_length=32,
verbose_name=_(
'U heeft minder tijd kunnen besteden aan werk of' +
' andere bezigheden'),
help_text=_(
u'Had u, ten gevolge van uw lichamelijke gezondheid,' +
u' de afgelopen 4 weken één van de volgende problemen bij' +
u' uw werk of andere dagelijkse bezigheden?'))
achieve_problem = models.CharField(
choices=PROBLEM_SCORE,
max_length=32,
verbose_name=_('U heeft minder bereikt dan u zou willen'))
work_limitation_problem = models.CharField(
choices=PROBLEM_SCORE,
max_length=32,
verbose_name=_(
'U was beperkt in het soort werk of het soort bezigheden'))
work_effort_problem = models.CharField(
choices=PROBLEM_SCORE,
max_length=32,
verbose_name=_(
'U had moeite met het werk of andere bezigheden' +
' (het kostte u bijvoorbeeld extra inspanning)'))
# Emotional problems
work_less_emotional_problem = models.CharField(
choices=PROBLEM_SCORE,
max_length=32,
verbose_name=_(
'U heeft minder tijd kunnen besteden aan werk' +
' of andere bezigheden'),
help_text=_(
u'Had u, ten gevolge van een emotioneel probleem' +
u' (bijvoorbeeld doordat u zich depressief of angstig voelde)' +
u' de afgelopen 4 weken één van de volgende problemen'
u' bij uw werk of andere dagelijkse bezigheden?'))
achieve_emotional_problem = models.CharField(
choices=PROBLEM_SCORE,
max_length=32,
verbose_name=_('U heeft minder bereikt dan u zou willen'))
accurate_emotional_problem = models.CharField(
choices=PROBLEM_SCORE,
max_length=32,
verbose_name=_(
'U heeft het werk of andere bezigheden niet zo' +
' zorgvuldig gedaan als u gewend bent'))
# Social impact
social_impact = models.CharField(
choices=SOCIAL_IMPACT_SCORE,
max_length=32,
verbose_name=_(
'In hoeverre heeft uw lichamelijke gezondheid of hebben' +
' uw emotionele problemen u de afgelopen 4 weken belemmerd' +
' in uw normale sociale bezigheden met gezin, vrienden,' +
' buren of anderen?'))
# Pain
pain_score = models.CharField(
choices=PAIN_SCORE,
max_length=32,
verbose_name=_('Hoeveel pijn had u de afgelopen 4 weken?'))
# Pain impact
pain_impact = models.CharField(
choices=PAIN_IMPACT_SCORE,
max_length=32,
verbose_name=_(
'In welke mate heeft pijn u de afgelopen 4 weken belemmerd' +
' bij uw normale werkzaamheden (zowel werk, buitenhuis als' +
' huishoudelijk werk)?'))
# Feeling
cheerful_score = models.CharField(
choices=FEELING_SCORE,
max_length=32,
verbose_name=_('Voelde u zich levenslustig?'),
help_text=_('Hoe vaak gedurende de afgelopen 4 weken:'))
nervious_score = models.CharField(
choices=FEELING_SCORE,
max_length=32,
verbose_name=_('Voelde u zich erg zenuwachtig?'))
blues_score = models.CharField(
choices=FEELING_SCORE,
max_length=32,
verbose_name=_('Zat u zo in de put dat niets u kon opvrolijken?'))
calm_score = models.CharField(
choices=FEELING_SCORE,
max_length=32,
verbose_name=_('Voelde u zich kalm en rustig?'))
energetic_score = models.CharField(
choices=FEELING_SCORE,
max_length=32,
verbose_name=_('Voelde u zich energiek?'))
depressed_score = models.CharField(
choices=FEELING_SCORE,
max_length=32,
verbose_name=_('Voelde u zich neerslachtig en somber?'))
burnout_score = models.CharField(
choices=FEELING_SCORE,
max_length=32,
verbose_name=_('Voelde u zich uitgeblust?'))
happiness_score = models.CharField(
choices=FEELING_SCORE,
max_length=32,
verbose_name=_('Voelde u zich gelukkig?'))
tired_score = models.CharField(
choices=FEELING_SCORE,
max_length=32,
verbose_name=_('Voelde u zich moe?'))
# Social visiting other people impact
social_visit_impact = models.CharField(
choices=SOCIAL_IMPACT2_SCORE,
max_length=32,
verbose_name=_(
'Hoe vaak hebben uw lichamelijke gezondheid of uw emotionele' +
' problemen gedurende de afgelopen 4 weken uw sociale' +
' activiteiten (zoals bezoek aan vrienden of naaste' +
' familieleden) belemmerd?'))
# Relativation
easier_ill_score = models.CharField(
choices=RELATIVATION_SCORE,
max_length=32,
verbose_name=_(
'Ik lijk gemakkelijker ziek te worden dan andere mensen'),
help_text=_(
'Wilt u het antwoord kiezen dat het beste weergeeft hoe' +
' juist of onjuist u elk van de volgende uitspraken voor' +
' uzelf vindt?'))
even_healthy_score = models.CharField(
choices=RELATIVATION_SCORE,
max_length=32,
verbose_name=_('Ik ben net zo gezond als andere mensen die ik ken'))
health_drop_score = models.CharField(
choices=RELATIVATION_SCORE,
max_length=32,
verbose_name=_('Ik verwacht dat mijn gezondheid achteruit zal gaan'))
excellent_health_score = models.CharField(
choices=RELATIVATION_SCORE,
max_length=32,
verbose_name=_('Mijn gezondheid is uitstekend'))
@property
def display_template(self):
"""
Returns:
The template path & name to be used for showing the details
page for the filled in data for this questionnaire.
"""
return 'questionnaire/details/RheumatismSF36.html'
@property
def graphic_score_display(self):
"""
Returns:
the score for in the graphic
"""
# count of left/right pain scores
count = 0
for index, item in enumerate(HEALTH_GENERAL_SCORE):
if item[0] == self.health_general:
count = self.graphic_score_max - index
return count
@property
def graphic_score_max(self):
return 5
@property
def graphic_score_min(self):
return 0
@property
def graphic_score_name(self):
return _('Algemene gezondheid')
# display name
display_name = _('Kwaliteit van leven')
lower_case_name = 'rheumatismsf36'