# -*- coding: utf-8 -*-
"""
This module contains all the default questionnaire models
:subtitle:`Class definitions:`
"""
from django import forms
from django.db import models
from django.utils.translation import ugettext as _
from apps.questionnaire.models import QuestionnaireBase
from core.models import DateField, ChoiceOtherField
START_TEN_SCORE = (
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7),
(8, 8),
(9, 9),
(10, 10),
)
START_HOSPITAL_CHOICES = (
('no', _('Nee')),
('yes_urgent_care', _('Ja, op de spoedopvang')),
('yes_intestional_clinic',
_('Ja, op de polikliniek Maag-darm-leverziekten')),
('yes_other_specialist', _('Ja, bij een andere medisch specialist')),
)
START_STATUS_CHOICES = (
('good', _('Goed')),
('less_good', _('Iets minder goed')),
('bad', _('Slecht')),
('really_bad', _('Erg slecht')),
('terrible', _('Afschuwelijk')),
)
[docs]class StartQuestionnaire(QuestionnaireBase):
"""
The start/first questionnaire for a normal control
"""
current_status = models.CharField(
choices=START_STATUS_CHOICES,
max_length=32,
verbose_name=_('Hoe gaat het met u?'))
problems = models.TextField(verbose_name=_(
'Kunt u hieronder beschrijven hoe het met u gaat' +
' en waar u op dit moment het meeste last van heeft?'))
problem_severity = models.IntegerField(
choices=START_TEN_SCORE,
verbose_name=_('Hoe veel last heeft u van problemen, ' +
'klachten of zorgen? Dit gaat zowel om de' +
' lichamelijke klachten die u ondervindt van' +
' uw ziekte als emotionele, sociale of praktische' +
' problemen. (1=geen klachten of problemen,10=heel' +
' veel klachten of problemen)'))
hospital_visit = models.CharField(
choices=START_HOSPITAL_CHOICES,
max_length=32,
verbose_name=_('Bent u sinds de vorige controle nog' +
' in het ziekenhuis geweest?'))
# display name
display_name = _('Hoe gaat het met u?')
lower_case_name = 'startquestionnaire'
@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/StartQuestionnare.html'
DEFAULT_SCORE = (
(1, _('1')),
(2, _('2')),
(3, _('3')),
(4, _('4')),
(5, _('5')),
)
APPOINTMENT_PERIOD_CHOICES = (
('tomorrow', _('Morgen')),
('within_3_days', _('Binnen 3 dagen')),
('this_week', _('Deze week')),
)
[docs]class StartUrgentQuestionnaire(QuestionnaireBase):
"""
The start/first questionnaire for a urgent control
"""
appointment_period = models.CharField(
choices=APPOINTMENT_PERIOD_CHOICES,
max_length=32,
verbose_name=_('Op welke termijn zou u deze afspraak willen?'))
# display name
display_name = _('Direct een afspraak')
lower_case_name = 'starturgentquestionnaire'
@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/StartUrgentQuestionnare.html'
URGENT_PROBLEM_TEN_SCORE = (
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7),
(8, 8),
(9, 9),
(10, 10),
)
[docs]class UrgentProblemQuestionnaire(QuestionnaireBase):
"""
The second part for the urgent control procedure.
"""
problems = models.TextField(verbose_name=_(
'Kunt u hieronder beschrijven hoe het met u gaat en waar' +
' u op dit moment het meeste last van heeft?'))
problem_severity = models.IntegerField(
choices=URGENT_PROBLEM_TEN_SCORE,
verbose_name=_(
'Hoe veel last heeft u van problemen, klachten of zorgen?' +
' Dit gaat zowel om de lichamelijke klachten die u ondervindt' +
' van uw ziekte als emotionele, sociale of praktische' +
' problemen. (1=geen klachten of problemen,10=heel' +
' veel klachten of problemen)'))
display_name = _('Omschrijving problemen')
lower_case_name = 'urgentproblemquestionnaire'
@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/UrgentProblemQuestionnaire.html'
APPOINTMENT_CHOICES = (
('no', _('Nee, dat hoeft niet')),
('yes_phone_nurse', _(
'Ja, graag een telefonische afspraak met' +
' de gespecialiseerd verpleegkundige')),
('yes_phone_doctor', _(
'Ja, graag een telefonisch afspraak met de arts')),
('yes_nurse', _(
'Ja, graag een afspraak op de polikliniek met de' +
' gespecialiseerd verpleegkundige')),
('yes_doctor', _('Ja, graag een afspraak op de polikliniek met de arts')),
)
APPOINTMENT_PERIOD_CHOICES = (
('within_4_weeks', _('Binnen 4 weken')),
('within_2_weeks', _('Binnen 2 weken')),
('this_week', _('Deze week')),
)
APPOINTMENT_PREFERENCE = (
('None', _('Maakt niet uit')),
('other', _('Ja, dat wil ik graag aangegeven')),
)
BLOOD_SAMPLE_CHOICES = (
('umcg', _('UMCG')),
('martini_ziekenhuis', _('Martini Ziekenhuis')),
('lab_noord', _('Lab Noord')),
('other', _('Anders')),
)
[docs]class FinishQuestionnaire(QuestionnaireBase):
"""
Finish/last questionnaire for the normal control
"""
# Appointment
appointment = models.CharField(
choices=APPOINTMENT_CHOICES,
max_length=32,
verbose_name=_(
'Wilt u, naast deze digitale conrole, graag een afspraak?'))
appointment_period = models.CharField(
blank=True,
null=True,
choices=APPOINTMENT_PERIOD_CHOICES,
max_length=32,
verbose_name=_('Op welke termijn zou u deze afspraak willen?'))
appointment_preference = ChoiceOtherField(
blank=True,
null=True,
choices=APPOINTMENT_PREFERENCE,
max_length=512,
verbose_name=_('Heeft u voorkeur voor een dag, periode of tijdstip?'),
other_field=forms.Textarea)
# blood samples
blood_sample = ChoiceOtherField(
choices=BLOOD_SAMPLE_CHOICES,
max_length=128,
verbose_name=_('Waar heeft u bloed laten prikken?'),
help_text=_(
'Indien u dit nog niet heeft gedaan, wilt u dan de' +
' controle opslaan en pas afronden nadat u bloed heeft geprikt?'))
# (bij afspraken). Aan het begin: Let op: voor deze controle moet u
# bloed laten prikken, voordat u de vragenlijst kan invullen en versturen.
blood_sample_date = DateField(
blank=True,
null=True,
allow_future_date=False,
verbose_name=_('Wanneer heeft u bloed laten prikken?'))
# display name
display_name = _('Afspraken, Bloedprikken')
lower_case_name = 'finishquestionnaire'
@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/FinishQuestionnaire.html'