diff --git a/smash/web/migrations/0001_initial.py b/smash/web/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..233795f84d355c0c180e6b08aa21117b92feb729
--- /dev/null
+++ b/smash/web/migrations/0001_initial.py
@@ -0,0 +1,203 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-01 12:35
+from __future__ import unicode_literals
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Appointment',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('datetime_when', models.DateTimeField(verbose_name='Appointment on')),
+                ('length', models.IntegerField(verbose_name='Appointment length (in minutes)')),
+                ('is_finished', models.BooleanField(default=False, verbose_name='Has the appointment ended?')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='AppointmentType',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('code', models.CharField(max_length=20, verbose_name='Appointment code')),
+                ('description', models.CharField(max_length=2000, verbose_name='Appointment description')),
+                ('default_duration', models.IntegerField(verbose_name='Default duration (in minutes)')),
+                ('rest_time', models.IntegerField(verbose_name='Suggested rest time')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Avaibility',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('day_number', models.IntegerField(verbose_name='Day of the week')),
+                ('available_from', models.TimeField(verbose_name='Avaible since')),
+                ('available_till', models.TimeField(verbose_name='Avaible until')),
+                ('is_current', models.BooleanField(default=True, verbose_name='Is current?')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='FlyingTeam',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('datetime_called', models.DateTimeField(verbose_name='Created on')),
+                ('datetime_until', models.DateTimeField(verbose_name='Disbanded on')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Holiday',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('datetime_start', models.DateTimeField(verbose_name='On leave since')),
+                ('datetime_end', models.DateTimeField(verbose_name='On leave until')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Item',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('is_fixed', models.BooleanField(default=False, verbose_name='Is the item fixed?')),
+                ('name', models.CharField(max_length=255, verbose_name='Name')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Language',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=20)),
+                ('image', models.ImageField(upload_to=b'')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Room',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('owner', models.CharField(max_length=50, verbose_name='Owner')),
+                ('address', models.CharField(max_length=255, verbose_name='Address')),
+                ('city', models.CharField(max_length=50, verbose_name='City')),
+                ('room_number', models.IntegerField(verbose_name='Room number')),
+                ('floor', models.IntegerField(verbose_name='Floor')),
+                ('is_vehicle', models.BooleanField(verbose_name='Is a vehicle?')),
+                ('equipment', models.ManyToManyField(blank=True, to='web.Item', verbose_name='On-site equipment')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Subject',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('sex', models.CharField(choices=[('M', 'Male'), ('F', 'Female')], max_length=1, verbose_name='Sex')),
+                ('first_name', models.CharField(max_length=50, verbose_name='First name')),
+                ('last_name', models.CharField(max_length=50, verbose_name='Last name')),
+                ('phone_number', models.CharField(max_length=20, verbose_name='Phone number')),
+                ('email', models.EmailField(max_length=254, verbose_name='E-mail')),
+                ('date_born', models.DateField(verbose_name='Date date_born')),
+                ('address', models.CharField(max_length=255, verbose_name='Address')),
+                ('postal_code', models.CharField(max_length=6, verbose_name='Postal code')),
+                ('city', models.CharField(max_length=50, verbose_name='City')),
+                ('country', models.CharField(max_length=50, verbose_name='Country')),
+                ('screening_number', models.CharField(max_length=50, verbose_name='Screening number')),
+                ('nd_number', models.CharField(max_length=6, verbose_name='ND number')),
+                ('visit_count', models.IntegerField(verbose_name='Number of visits')),
+                ('mpower_id', models.CharField(max_length=20, verbose_name='MPower ID')),
+                ('status', models.CharField(choices=[('NCO', 'Not contacted'), ('TST', 'Test group'), ('LEA', 'Level A'), ('LEB', 'Level B'), ('OPT', 'Opted out'), ('REJ', 'Rejected'), ('DEA', 'Dead')], default='NCO', max_length=3, verbose_name='Status')),
+                ('main_pseudonym', models.CharField(max_length=45, verbose_name='Pseudonym')),
+                ('comments', models.CharField(max_length=2000, verbose_name='Comments')),
+                ('date_added', models.DateField(auto_now=True, verbose_name='Added on')),
+                ('referral', models.CharField(max_length=128, null=True, verbose_name='Referred by')),
+                ('diagnosis', models.CharField(max_length=128, null=True, verbose_name='Diagnosis')),
+                ('year_of_diagnosis', models.IntegerField(default=0, null=True, verbose_name='Year of diagnosis')),
+                ('languages', models.ManyToManyField(to='web.Language', verbose_name='Known languages')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Visit',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('datetime_begin', models.DateTimeField(verbose_name='Visit starts at')),
+                ('datetime_end', models.DateTimeField(verbose_name='Visit ends at')),
+                ('visit_type', models.CharField(choices=[('A', 'Level A visit'), ('B', 'Level B visit'), ('O', 'Other')], default='O', max_length=1, verbose_name='Visit type')),
+                ('is_finished', models.BooleanField(default=False, verbose_name='Has ended')),
+                ('subject', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web.Subject', verbose_name='Subject')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Worker',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('first_name', models.CharField(max_length=50, verbose_name='First name')),
+                ('last_name', models.CharField(max_length=50, verbose_name='Last name')),
+                ('phone_number', models.CharField(max_length=20, verbose_name='Phone number')),
+                ('unit', models.CharField(max_length=50, verbose_name='Unit')),
+                ('email', models.EmailField(max_length=254, verbose_name='E-mail')),
+                ('role', models.CharField(choices=[('DOCTOR', 'Doctor'), ('NURSE', 'Nurse'), ('PSYCHOLOGIST', 'Psychologist'), ('TECHNICIAN', 'Technician'), ('SECRETARY', 'Secretary')], max_length=20, verbose_name='Role')),
+                ('specialization', models.CharField(max_length=20, verbose_name='Specialization')),
+                ('appointments', models.ManyToManyField(blank=True, to='web.Appointment', verbose_name='Appointments')),
+                ('languages', models.ManyToManyField(to='web.Language', verbose_name='Known languages')),
+                ('user', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Username')),
+            ],
+        ),
+        migrations.AddField(
+            model_name='holiday',
+            name='person',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web.Worker', verbose_name='Worker'),
+        ),
+        migrations.AddField(
+            model_name='flyingteam',
+            name='doctor',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='FlyingTeamDoctor', to='web.Worker', verbose_name='Doctor'),
+        ),
+        migrations.AddField(
+            model_name='flyingteam',
+            name='nurse',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='FlyingTeamNurse', to='web.Worker', verbose_name='Nurse'),
+        ),
+        migrations.AddField(
+            model_name='flyingteam',
+            name='psychologist',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='FlyingTeamPsychologist', to='web.Worker', verbose_name='Psychologist'),
+        ),
+        migrations.AddField(
+            model_name='avaibility',
+            name='person',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web.Worker', verbose_name='Worker'),
+        ),
+        migrations.AddField(
+            model_name='appointmenttype',
+            name='required_equipment',
+            field=models.ManyToManyField(to='web.Item', verbose_name='Required equipment'),
+        ),
+        migrations.AddField(
+            model_name='appointment',
+            name='appointment_type',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='web.AppointmentType', verbose_name='Appointment type'),
+        ),
+        migrations.AddField(
+            model_name='appointment',
+            name='flying_team',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='web.FlyingTeam', verbose_name='Flying team (if applicable)'),
+        ),
+        migrations.AddField(
+            model_name='appointment',
+            name='room',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web.Room', verbose_name='Room ID'),
+        ),
+        migrations.AddField(
+            model_name='appointment',
+            name='visit',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web.Visit', verbose_name='Visit ID'),
+        ),
+        migrations.AddField(
+            model_name='appointment',
+            name='worker_assigned',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='web.Worker', verbose_name='Worker conducting the assessment (if applicable)'),
+        ),
+    ]
diff --git a/smash/web/migrations/0002_auto_20170201_1624.py b/smash/web/migrations/0002_auto_20170201_1624.py
new file mode 100644
index 0000000000000000000000000000000000000000..9714bb0bfa91729041f4908c6d7b6a3e7e2bd9db
--- /dev/null
+++ b/smash/web/migrations/0002_auto_20170201_1624.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-01 16:24
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='appointmenttype',
+            name='required_worker',
+            field=models.CharField(choices=[('DOCTOR', 'Doctor'), ('NURSE', 'Nurse'), ('PSYCHOLOGIST', 'Psychologist'), ('ANY', 'Any')], default='ANY', max_length=20, verbose_name='Type of worker required for assignment'),
+        ),
+        migrations.AlterField(
+            model_name='appointment',
+            name='datetime_when',
+            field=models.DateTimeField(blank=True, null=True, verbose_name='Appointment on'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='date_born',
+            field=models.DateField(verbose_name='Date of birth (YYYY-MM-DD)'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='year_of_diagnosis',
+            field=models.IntegerField(default=0, null=True, verbose_name='Year of diagnosis (YYYY)'),
+        ),
+    ]
diff --git a/smash/web/migrations/0003_auto_20170206_1249.py b/smash/web/migrations/0003_auto_20170206_1249.py
new file mode 100644
index 0000000000000000000000000000000000000000..2ab5046152a0a3492dac86a172bd8dd2c2d1d115
--- /dev/null
+++ b/smash/web/migrations/0003_auto_20170206_1249.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-06 12:49
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0002_auto_20170201_1624'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='appointmenttype',
+            name='required_equipment',
+            field=models.ManyToManyField(blank=True, to='web.Item', verbose_name='Required equipment'),
+        ),
+    ]
diff --git a/smash/web/migrations/0004_auto_20170207_1400.py b/smash/web/migrations/0004_auto_20170207_1400.py
new file mode 100644
index 0000000000000000000000000000000000000000..af740976df21919be287ba5eb7ff8e0f9be9852b
--- /dev/null
+++ b/smash/web/migrations/0004_auto_20170207_1400.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-07 14:00
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0003_auto_20170206_1249'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='appointmenttype',
+            name='required_worker',
+            field=models.CharField(choices=[('DOCTOR', 'Doctor'), ('NURSE', 'Nurse'), ('PSYCHOLOGIST', 'Psychologist'), ('ANY', 'Any')], default='ANY', max_length=20, verbose_name='Type of worker required for appointment'),
+        ),
+    ]
diff --git a/smash/web/migrations/0005_auto_20170207_1432.py b/smash/web/migrations/0005_auto_20170207_1432.py
new file mode 100644
index 0000000000000000000000000000000000000000..fc68b17b6c441c21375b93959af8e1238ca2c355
--- /dev/null
+++ b/smash/web/migrations/0005_auto_20170207_1432.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-07 14:32
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0004_auto_20170207_1400'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='subject',
+            name='postal_code',
+            field=models.CharField(max_length=7, verbose_name='Postal code'),
+        ),
+    ]
diff --git a/smash/web/migrations/0006_auto_20170207_1436.py b/smash/web/migrations/0006_auto_20170207_1436.py
new file mode 100644
index 0000000000000000000000000000000000000000..4d5b59df950cedc213551787795dc7609cf9acb3
--- /dev/null
+++ b/smash/web/migrations/0006_auto_20170207_1436.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-07 14:36
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0005_auto_20170207_1432'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='subject',
+            name='email',
+            field=models.EmailField(max_length=254, null=True, verbose_name='E-mail'),
+        ),
+    ]
diff --git a/smash/web/migrations/0007_auto_20170207_1537.py b/smash/web/migrations/0007_auto_20170207_1537.py
new file mode 100644
index 0000000000000000000000000000000000000000..1ce99ab83f27929db45e48dfb40cc0ace83acdfc
--- /dev/null
+++ b/smash/web/migrations/0007_auto_20170207_1537.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-07 15:37
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0006_auto_20170207_1436'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='subject',
+            name='phone_number_2',
+            field=models.CharField(blank=True, max_length=20, null=True, verbose_name='Phone number 2'),
+        ),
+        migrations.AddField(
+            model_name='subject',
+            name='phone_number_3',
+            field=models.CharField(blank=True, max_length=20, null=True, verbose_name='Phone number 3'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='email',
+            field=models.EmailField(blank=True, max_length=254, null=True, verbose_name='E-mail'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='phone_number',
+            field=models.CharField(blank=True, max_length=20, null=True, verbose_name='Phone number'),
+        ),
+    ]
diff --git a/smash/web/migrations/0008_auto_20170207_1604.py b/smash/web/migrations/0008_auto_20170207_1604.py
new file mode 100644
index 0000000000000000000000000000000000000000..b875536bb3c0805333d8ef9316dbf6c3bbec3ede
--- /dev/null
+++ b/smash/web/migrations/0008_auto_20170207_1604.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-07 16:04
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0007_auto_20170207_1537'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='subject',
+            name='visit_count',
+            field=models.IntegerField(default=0, verbose_name='Number of visits'),
+        ),
+    ]
diff --git a/smash/web/migrations/0009_remove_subject_visit_count.py b/smash/web/migrations/0009_remove_subject_visit_count.py
new file mode 100644
index 0000000000000000000000000000000000000000..837460ea762d6e09a5b22b88b984c303b036f280
--- /dev/null
+++ b/smash/web/migrations/0009_remove_subject_visit_count.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-08 10:26
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0008_auto_20170207_1604'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='subject',
+            name='visit_count',
+        ),
+    ]
diff --git a/smash/web/migrations/0010_remove_subject_main_pseudonym.py b/smash/web/migrations/0010_remove_subject_main_pseudonym.py
new file mode 100644
index 0000000000000000000000000000000000000000..13f268580abe41c24e3926d55122c322dd187e58
--- /dev/null
+++ b/smash/web/migrations/0010_remove_subject_main_pseudonym.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-08 11:55
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0009_remove_subject_visit_count'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='subject',
+            name='main_pseudonym',
+        ),
+    ]
diff --git a/smash/web/migrations/0011_auto_20170208_1208.py b/smash/web/migrations/0011_auto_20170208_1208.py
new file mode 100644
index 0000000000000000000000000000000000000000..7f4ddaba0ba7ac9cbb4124db72cdbf5fb227a0c0
--- /dev/null
+++ b/smash/web/migrations/0011_auto_20170208_1208.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-08 12:08
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0010_remove_subject_main_pseudonym'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='subject',
+            name='date_born',
+            field=models.DateField(blank=True, null=True, verbose_name='Date of birth (YYYY-MM-DD)'),
+        ),
+    ]
diff --git a/smash/web/migrations/0012_auto_20170208_1414.py b/smash/web/migrations/0012_auto_20170208_1414.py
new file mode 100644
index 0000000000000000000000000000000000000000..d32f6c72323b0e95a8d43c1cff3be947fe95233a
--- /dev/null
+++ b/smash/web/migrations/0012_auto_20170208_1414.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-08 14:14
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0011_auto_20170208_1208'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='subject',
+            name='first_name',
+            field=models.CharField(max_length=60, verbose_name='First name'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='last_name',
+            field=models.CharField(max_length=60, verbose_name='Last name'),
+        ),
+    ]
diff --git a/smash/web/migrations/0013_auto_20170208_1415.py b/smash/web/migrations/0013_auto_20170208_1415.py
new file mode 100644
index 0000000000000000000000000000000000000000..09da90ca98fceeb485ceae5ef7c4b71d8cacc142
--- /dev/null
+++ b/smash/web/migrations/0013_auto_20170208_1415.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-08 14:15
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0012_auto_20170208_1414'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='subject',
+            name='first_name',
+            field=models.CharField(max_length=50, verbose_name='First name'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='last_name',
+            field=models.CharField(max_length=50, verbose_name='Last name'),
+        ),
+    ]
diff --git a/smash/web/migrations/0014_auto_20170220_0812.py b/smash/web/migrations/0014_auto_20170220_0812.py
new file mode 100644
index 0000000000000000000000000000000000000000..a0ebef6afe8fd04d4d2140b294815dc4efa1570d
--- /dev/null
+++ b/smash/web/migrations/0014_auto_20170220_0812.py
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-20 08:12
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0013_auto_20170208_1415'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='appointment',
+            name='room',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='web.Room', verbose_name='Room ID'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='address',
+            field=models.CharField(blank=True, max_length=255, verbose_name='Address'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='city',
+            field=models.CharField(blank=True, max_length=50, verbose_name='City'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='comments',
+            field=models.CharField(blank=True, max_length=2000, verbose_name='Comments'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='diagnosis',
+            field=models.CharField(blank=True, max_length=128, null=True, verbose_name='Diagnosis'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='languages',
+            field=models.ManyToManyField(blank=True, to='web.Language', verbose_name='Known languages'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='mpower_id',
+            field=models.CharField(blank=True, max_length=20, verbose_name='MPower ID'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='nd_number',
+            field=models.CharField(blank=True, max_length=6, verbose_name='ND number'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='postal_code',
+            field=models.CharField(blank=True, max_length=7, verbose_name='Postal code'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='referral',
+            field=models.CharField(blank=True, max_length=128, null=True, verbose_name='Referred by'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='screening_number',
+            field=models.CharField(blank=True, max_length=50, unique=True, verbose_name='Screening number'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='year_of_diagnosis',
+            field=models.IntegerField(blank=True, default=0, null=True, verbose_name='Year of diagnosis (YYYY)'),
+        ),
+    ]
diff --git a/smash/web/migrations/0015_auto_20170228_1651.py b/smash/web/migrations/0015_auto_20170228_1651.py
new file mode 100644
index 0000000000000000000000000000000000000000..a53ee29dc18e1852f98c5b0270e6e4e311fdc762
--- /dev/null
+++ b/smash/web/migrations/0015_auto_20170228_1651.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-28 16:51
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0014_auto_20170220_0812'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='appointment',
+            name='appointment_type',
+        ),
+        migrations.RemoveField(
+            model_name='subject',
+            name='status',
+        ),
+        migrations.RemoveField(
+            model_name='visit',
+            name='visit_type',
+        ),
+        migrations.AddField(
+            model_name='appointment',
+            name='appointment_types',
+            field=models.ManyToManyField(blank=True, null=True, to='web.AppointmentType', verbose_name='Appointment types'),
+        ),
+        migrations.AddField(
+            model_name='subject',
+            name='dead',
+            field=models.BooleanField(default=False, verbose_name='Dead'),
+        ),
+        migrations.AddField(
+            model_name='subject',
+            name='default_appointment_location',
+            field=models.CharField(choices=[('L', 'LIH'), ('P', 'PRC'), ('F', 'FLYING TEAM')], default='P', max_length=1, verbose_name='Default appointment location'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='subject',
+            name='resigned',
+            field=models.BooleanField(default=False, verbose_name='Resigned'),
+        ),
+        migrations.AddField(
+            model_name='subject',
+            name='type',
+            field=models.CharField(choices=[('C', 'CONTROL'), ('P', 'PATIENT')], default='C', max_length=1, verbose_name='Type'),
+            preserve_default=False,
+        ),
+    ]
diff --git a/smash/web/migrations/0016_auto_20170228_1652.py b/smash/web/migrations/0016_auto_20170228_1652.py
new file mode 100644
index 0000000000000000000000000000000000000000..44d8b8fc8bc629e72026121e7527dd8d07d75222
--- /dev/null
+++ b/smash/web/migrations/0016_auto_20170228_1652.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-02-28 16:52
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0015_auto_20170228_1651'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='appointment',
+            name='appointment_types',
+            field=models.ManyToManyField(to='web.AppointmentType', verbose_name='Appointment types'),
+        ),
+    ]
diff --git a/smash/web/migrations/0017_auto_20170301_1600.py b/smash/web/migrations/0017_auto_20170301_1600.py
new file mode 100644
index 0000000000000000000000000000000000000000..fdafbf088402a0be496db27ffa1f559085e30a62
--- /dev/null
+++ b/smash/web/migrations/0017_auto_20170301_1600.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-01 16:00
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0016_auto_20170228_1652'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='appointment',
+            name='comment',
+            field=models.CharField(blank=True, max_length=1024, null=True, verbose_name='Comment'),
+        ),
+        migrations.AddField(
+            model_name='appointmenttype',
+            name='calendar_color',
+            field=models.CharField(default='#cfc600', max_length=2000, verbose_name='Calendar color'),
+        ),
+        migrations.AddField(
+            model_name='appointmenttype',
+            name='calendar_color_priority',
+            field=models.IntegerField(default=1, verbose_name='Calendar color priority'),
+        ),
+        migrations.AddField(
+            model_name='appointmenttype',
+            name='calendar_font_color',
+            field=models.CharField(default='#00000', max_length=2000, verbose_name='Calendar color'),
+        ),
+        migrations.AlterField(
+            model_name='appointment',
+            name='is_finished',
+            field=models.BooleanField(default=False, editable=False, verbose_name='Has the appointment ended?'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='dead',
+            field=models.BooleanField(default=False, editable=False, verbose_name='Dead'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='resigned',
+            field=models.BooleanField(default=False, editable=False, verbose_name='Resigned'),
+        ),
+    ]
diff --git a/smash/web/migrations/0018_auto_20170307_1602.py b/smash/web/migrations/0018_auto_20170307_1602.py
new file mode 100644
index 0000000000000000000000000000000000000000..0129a05c53c2b269939784d75bd145380f0811f9
--- /dev/null
+++ b/smash/web/migrations/0018_auto_20170307_1602.py
@@ -0,0 +1,63 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-07 16:02
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0017_auto_20170301_1600'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Location',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=20)),
+            ],
+        ),
+        migrations.RemoveField(
+            model_name='appointment',
+            name='is_finished',
+        ),
+        migrations.RemoveField(
+            model_name='subject',
+            name='default_appointment_location',
+        ),
+        migrations.AddField(
+            model_name='appointment',
+            name='status',
+            field=models.CharField(choices=[('SCHEDULED', 'Scheduled'), ('FINISHED', 'Finished'), ('CANCELLED', 'Cancelled'), ('NO_SHOW', 'No Show')], default='SCHEDULED', editable=False, max_length=20, verbose_name='Status'),
+        ),
+        migrations.AlterField(
+            model_name='appointment',
+            name='comment',
+            field=models.TextField(blank=True, max_length=1024, null=True, verbose_name='Comment'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='comments',
+            field=models.TextField(blank=True, max_length=2000, verbose_name='Comments'),
+        ),
+        migrations.AddField(
+            model_name='appointment',
+            name='location',
+            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='web.Location', verbose_name='Location'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='subject',
+            name='default_location',
+            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='web.Location', verbose_name='Default appointment location'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='worker',
+            name='locations',
+            field=models.ManyToManyField(to='web.Location', verbose_name='Locations'),
+        ),
+    ]
diff --git a/smash/web/migrations/0019_auto_20170309_1538.py b/smash/web/migrations/0019_auto_20170309_1538.py
new file mode 100644
index 0000000000000000000000000000000000000000..2c3c404e33d61903df3d72219b711a29820a8c69
--- /dev/null
+++ b/smash/web/migrations/0019_auto_20170309_1538.py
@@ -0,0 +1,67 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-09 15:38
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0018_auto_20170307_1602'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='flyingteam',
+            name='datetime_called',
+        ),
+        migrations.RemoveField(
+            model_name='flyingteam',
+            name='datetime_until',
+        ),
+        migrations.RemoveField(
+            model_name='flyingteam',
+            name='doctor',
+        ),
+        migrations.RemoveField(
+            model_name='flyingteam',
+            name='nurse',
+        ),
+        migrations.RemoveField(
+            model_name='flyingteam',
+            name='psychologist',
+        ),
+        migrations.AddField(
+            model_name='flyingteam',
+            name='place',
+            field=models.CharField(default='test', max_length=50, verbose_name='Place'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='subject',
+            name='default_written_communication_language',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='subject_written_comunication', to='web.Language', verbose_name='Default language for document generation'),
+        ),
+        migrations.AddField(
+            model_name='visit',
+            name='appointment_types',
+            field=models.ManyToManyField(blank=True, to='web.AppointmentType', verbose_name='Requested appointments'),
+        ),
+        migrations.AlterField(
+            model_name='appointment',
+            name='appointment_types',
+            field=models.ManyToManyField(blank=True, to='web.AppointmentType', verbose_name='Appointment types'),
+        ),
+        migrations.AlterField(
+            model_name='appointmenttype',
+            name='rest_time',
+            field=models.IntegerField(default=0, verbose_name='Suggested rest time'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='screening_number',
+            field=models.CharField(max_length=50, unique=True, verbose_name='Screening number'),
+        ),
+    ]
diff --git a/smash/web/migrations/0020_auto_20170309_1545.py b/smash/web/migrations/0020_auto_20170309_1545.py
new file mode 100644
index 0000000000000000000000000000000000000000..835d12081165048fa244db37f182904f6f2b2f7a
--- /dev/null
+++ b/smash/web/migrations/0020_auto_20170309_1545.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-09 15:45
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0019_auto_20170309_1538'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='flyingteam',
+            name='place',
+            field=models.CharField(max_length=255, verbose_name='Place'),
+        ),
+    ]
diff --git a/smash/web/migrations/0021_auto_20170317_0738.py b/smash/web/migrations/0021_auto_20170317_0738.py
new file mode 100644
index 0000000000000000000000000000000000000000..cdc4a01059acab4311b659cd077df09c9cca90bf
--- /dev/null
+++ b/smash/web/migrations/0021_auto_20170317_0738.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-03-17 07:38
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0020_auto_20170309_1545'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='appointmenttype',
+            name='can_be_parallelized',
+            field=models.BooleanField(default=False, verbose_name='Can be parallelized'),
+        ),
+        migrations.AddField(
+            model_name='item',
+            name='disposable',
+            field=models.BooleanField(default=False, verbose_name='Disposable set'),
+        ),
+        migrations.AddField(
+            model_name='subject',
+            name='datetime_contact_reminder',
+            field=models.DateField(blank=True, null=True, verbose_name='Contact on'),
+        ),
+        migrations.AddField(
+            model_name='subject',
+            name='postponed',
+            field=models.BooleanField(choices=[(True, 'Yes'), (False, 'No')], default=False, verbose_name='Postponed'),
+        ),
+        migrations.AddField(
+            model_name='visit',
+            name='post_mail_sent',
+            field=models.BooleanField(choices=[(True, 'Yes'), (False, 'No')], default=False, verbose_name='Post mail sent'),
+        ),
+    ]
diff --git a/smash/web/migrations/0022_auto_20170403_0904.py b/smash/web/migrations/0022_auto_20170403_0904.py
new file mode 100644
index 0000000000000000000000000000000000000000..cc5107ebc7fbdbba5815ab803bca89f9f7866992
--- /dev/null
+++ b/smash/web/migrations/0022_auto_20170403_0904.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-04-03 09:04
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0021_auto_20170317_0738'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='appointmenttype',
+            options={'ordering': ['description']},
+        ),
+        migrations.AddField(
+            model_name='worker',
+            name='screening_number_prefix',
+            field=models.CharField(blank=True, max_length=1, null=True, verbose_name=b'Default screening number prefix'),
+        ),
+        migrations.AlterField(
+            model_name='appointment',
+            name='status',
+            field=models.CharField(choices=[(b'SCHEDULED', b'Scheduled'), (b'CANCELLED', b'Cancelled'), (b'FINISHED', b'Finished'), (b'NO_SHOW', b'No Show')], default=b'SCHEDULED', max_length=20, verbose_name=b'Status'),
+        ),
+        migrations.AlterField(
+            model_name='appointment',
+            name='visit',
+            field=models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='web.Visit', verbose_name=b'Visit ID'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='dead',
+            field=models.BooleanField(default=False, verbose_name=b'Deceased'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='resigned',
+            field=models.BooleanField(default=False, verbose_name=b'Resigned'),
+        ),
+        migrations.AlterField(
+            model_name='subject',
+            name='type',
+            field=models.CharField(choices=[(b'P', b'PATIENT'), (b'C', b'CONTROL')], max_length=1, verbose_name=b'Type'),
+        ),
+    ]