diff --git a/ippisite/ippidb/migrations/0001_squashed_0035_auto_20180725_1347.py b/ippisite/ippidb/migrations/0001_squashed_0035_auto_20180725_1347.py
index d799bccb01b154d593c512c1b3cb9778a62da045..c088946f1035b6daf47ebba692790edb7fc8d1ac 100644
--- a/ippisite/ippidb/migrations/0001_squashed_0035_auto_20180725_1347.py
+++ b/ippisite/ippidb/migrations/0001_squashed_0035_auto_20180725_1347.py
@@ -20,116 +20,41 @@ class Migration(migrations.Migration):
             name='Bibliography',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('source', models.CharField(choices=[('PM', 'PubMed article'), ('PT', 'Patent')], max_length=2, verbose_name='Bibliographic type')),
+                ('source', models.CharField(choices=[('PM', 'PubMed ID'), ('PT', 'Patent'), ('DO', 'DOI ID')], default='PM', max_length=2, verbose_name='Bibliographic type')),
                 ('id_source', models.CharField(max_length=25, verbose_name='Bibliographic ID')),
                 ('title', models.CharField(max_length=300, verbose_name='Title')),
                 ('journal_name', models.CharField(max_length=50, null=True, verbose_name='Journal name')),
                 ('authors_list', models.CharField(max_length=500, verbose_name='Authors list')),
                 ('biblio_year', models.PositiveSmallIntegerField(verbose_name='Year')),
                 ('cytotox', models.BooleanField(default=False, verbose_name='Cytotoxicity data')),
-                ('in_silico', models.BooleanField(default=False, verbose_name='in silico study performed')),
-                ('in_vitro', models.BooleanField(default=False, verbose_name='in vitro study performed')),
-                ('in_vivo', models.BooleanField(default=False, verbose_name='in vivo study performed')),
-                ('in_cellulo', models.BooleanField(default=False, verbose_name='in cellulo study performed')),
-                ('pharmacokinetic', models.BooleanField(default=False, verbose_name='pharmacokinetic study performed')),
-                ('xray', models.BooleanField(default=False, verbose_name='contains xray data')),
+                ('in_silico', models.BooleanField(default=False, verbose_name='in silico study')),
+                ('in_vitro', models.BooleanField(default=False, verbose_name='in vitro study')),
+                ('in_vivo', models.BooleanField(default=False, verbose_name='in vivo study')),
+                ('in_cellulo', models.BooleanField(default=False, verbose_name='in cellulo study')),
+                ('pharmacokinetic', models.BooleanField(default=False, verbose_name='pharmacokinetic study')),
+                ('xray', models.BooleanField(default=False, verbose_name='X-Ray data')),
             ],
             options={
                 'verbose_name_plural': 'bibliographies',
             },
         ),
         migrations.CreateModel(
-            name='Complex',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('copy_nb', models.IntegerField(verbose_name='Number of copies')),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Domain',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('pfam_acc', models.CharField(max_length=10, unique=True, verbose_name='Pfam Accession')),
-                ('pfam_id', models.CharField(max_length=20, verbose_name='Pfam Family Identifier')),
-                ('pfam_description', models.CharField(max_length=100, verbose_name='Pfam Description')),
-                ('domain_family', models.CharField(max_length=25, verbose_name='Domain family')),
-            ],
-        ),
-        migrations.CreateModel(
-            name='MolecularFunction',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('go_id', models.CharField(max_length=10, unique=True, verbose_name='Gene Ontology ID')),
-                ('description', models.CharField(max_length=500, verbose_name='description')),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Ppi',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('cc_nb', models.IntegerField(default=1, verbose_name='Number of copies of the complex in the PPI')),
-                ('pdb_id', models.CharField(default=1, max_length=4, verbose_name='PDB ID')),
-                ('ppi_id', models.IntegerField(default=1, verbose_name='PPI identifier')),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Protein',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('uniprot_id', models.CharField(max_length=10, unique=True, verbose_name='Uniprot ID')),
-                ('recommended_name_long', models.CharField(max_length=75, verbose_name='Uniprot Recommended Name (long)')),
-                ('short_name', models.CharField(max_length=50, verbose_name='Short name')),
-                ('gene_name', models.CharField(max_length=30, unique=True, verbose_name='Gene name')),
-                ('entry_name', models.CharField(max_length=30, verbose_name='Entry name')),
-                ('molecular_functions', models.ManyToManyField(to='ippidb.MolecularFunction')),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Taxonomy',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('taxonomy_id', models.DecimalField(decimal_places=0, max_digits=9, unique=True, verbose_name='NCBI TaxID')),
-                ('name', models.CharField(max_length=200, verbose_name='Organism name')),
-            ],
-            options={
-                'verbose_name_plural': 'taxonomies',
-            },
-        ),
-        migrations.AddField(
-            model_name='protein',
-            name='organism',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Taxonomy'),
-        ),
-        migrations.AddField(
-            model_name='complex',
-            name='protein_id',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Protein'),
-        ),
-        migrations.CreateModel(
-            name='Disease',
+            name='CellLine',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(default=None, max_length=30, unique=True, verbose_name='Disease')),
+                ('name', models.CharField(max_length=50, unique=True, verbose_name='Name')),
             ],
         ),
-        migrations.AlterModelOptions(
-            name='complex',
-            options={'verbose_name_plural': 'complexes'},
-        ),
         migrations.CreateModel(
             name='Compound',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('canonical_smile', models.CharField(max_length=250, unique=True, verbose_name='Canonical Smile')),
+                ('canonical_smile', models.CharField(max_length=500, unique=True, verbose_name='Canonical Smile')),
                 ('is_macrocycle', models.BooleanField(verbose_name='Contains one or more macrocycles')),
                 ('aromatic_ratio', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Aromatic ratio')),
                 ('balaban_index', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Balaban index')),
                 ('fsp3', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Fsp3')),
-                ('dh_Petitjean', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Dh Petitjean')),
-                ('diam_graph_non_h_petitjean', models.IntegerField(verbose_name='Diameter for the molecular graph for heavy atoms (Petitjean)')),
                 ('gc_molar_refractivity', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='GC Molar Refractivity')),
-                ('g_petitjean', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='G Petitjean')),
-                ('ig_petitjean', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Ig Petitjean')),
                 ('log_d', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='LogD (Partition coefficient octanol-1/water, with pKa information)')),
                 ('a_log_p', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='ALogP (Partition coefficient octanol-1/water)')),
                 ('mean_atom_vol_vdw', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Mean atom volume computed with VdW radii')),
@@ -160,230 +85,244 @@ class Migration(migrations.Migration):
                 ('nb_o', models.IntegerField(verbose_name='Number of oxygen atoms')),
                 ('nb_rings', models.IntegerField(verbose_name='Number of rings')),
                 ('nb_rotatable_bonds', models.IntegerField(verbose_name='Number of rotatable bonds')),
-                ('radius_graph_non_h_petitjean', models.IntegerField(verbose_name='Radius for the molecular graph for heavy atoms (Petitjean)')),
                 ('randic_index', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Randic index')),
                 ('rdf070m', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='RDF070m, radial distribution function weighted by the atomic masses at 7Ã…')),
                 ('rotatable_bond_fraction', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Fraction of rotatable bonds')),
                 ('sum_atom_polar', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='Sum of atomic polarizabilities')),
                 ('sum_atom_vol_vdw', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='Sum of atom volumes computed with VdW radii')),
-                ('surface_vdw_petitjean', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='Van der Waals surface area (Petitjean)')),
-                ('thickness_petitjean', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Thickness (Petitjean)')),
                 ('tpsa', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='Topological Polar Surface Area (TPSA)')),
                 ('ui', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Unsaturation index')),
-                ('vol_vdw_petitjean', models.DecimalField(decimal_places=2, max_digits=7, verbose_name='Van der Waals volume (Petitjean)')),
                 ('wiener_index', models.IntegerField(verbose_name='Wiener index')),
                 ('common_name', models.CharField(blank=True, max_length=20, null=True, unique=True, verbose_name='Common name')),
-                ('pubchem_id', models.CharField(blank=True, max_length=10, null=True, unique=True, verbose_name='Pubchem ID')),
+                ('pubchem_id', models.CharField(blank=True, max_length=10, null=True, verbose_name='Pubchem ID')),
                 ('chemspider_id', models.CharField(blank=True, max_length=10, null=True, unique=True, verbose_name='Chemspider ID')),
-                ('chembl_id', models.CharField(blank=True, max_length=30, null=True, unique=True, verbose_name='Chembl ID')),
-                ('iupac_name', models.CharField(blank=True, max_length=255, null=True, unique=True, verbose_name='IUPAC name')),
+                ('chembl_id', models.CharField(blank=True, max_length=30, null=True, verbose_name='Chembl ID')),
+                ('iupac_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='IUPAC name')),
             ],
         ),
         migrations.CreateModel(
-            name='MDDRCompoundActivityClass',
+            name='CompoundAction',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('activity_class', models.CharField(max_length=100, verbose_name='Activity Class')),
+                ('activation_mode', models.CharField(choices=[('O', 'Orthosteric'), ('A', 'Allosteric'), ('U', 'Unspecified')], max_length=1, verbose_name='Activation mode')),
+                ('pdb_id', models.CharField(blank=True, max_length=4, null=True, verbose_name='PDB ID')),
+                ('nb_copy_compounds', models.IntegerField(verbose_name='Number of copies for the compound')),
+                ('compound', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
             ],
         ),
         migrations.CreateModel(
-            name='MDDRCompoundImport',
+            name='CompoundActivityResult',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('mddr_compound_id', models.IntegerField(verbose_name='MDDR compound ID')),
-                ('mddr_name', models.CharField(max_length=40, verbose_name='MDDR name')),
-                ('dvpmt_phase', models.CharField(max_length=20, verbose_name='Development phase')),
-                ('canonical_smile', models.CharField(blank=True, max_length=500, null=True, unique=True, verbose_name='Canonical Smile')),
-                ('db_import_date', models.DecimalField(decimal_places=0, max_digits=6, verbose_name='MDDR release year/month')),
+                ('activity_type', models.CharField(choices=[('pIC50', 'pIC50 (half maximal inhibitory concentration, -log10)'), ('pEC50', 'pEC50 (half maximal effective concentration, -log10)'), ('pKd', 'pKd (dissociation constant, -log10)'), ('pKi', 'pKi (inhibition constant, -log10)')], max_length=5, verbose_name='Activity type')),
+                ('activity', models.DecimalField(decimal_places=10, max_digits=12, verbose_name='Activity')),
+                ('inhibition_percentage', models.DecimalField(decimal_places=0, max_digits=3, null=True, verbose_name='Inhibition percentage')),
+                ('modulation_type', models.CharField(choices=[('B', 'Binding'), ('I', 'Inhibition'), ('S', 'Stabilization')], max_length=1, verbose_name='Modulation type')),
+                ('compound', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
             ],
         ),
         migrations.CreateModel(
-            name='MDDRSimilarity',
+            name='CompoundCytotoxicityResult',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('canonical_smile_ippidb', models.CharField(blank=True, max_length=500, null=True, unique=True, verbose_name='Canonical Smile for IPPIDB compound')),
-                ('canonical_smile_mddr', models.CharField(blank=True, max_length=500, null=True, unique=True, verbose_name='Canonical Smile for MDDR Compound')),
-                ('tanimoto', models.DecimalField(decimal_places=5, max_digits=6, verbose_name='Tanimoto')),
+                ('toxicity', models.BooleanField(default=False, verbose_name='Toxicity')),
+                ('compound', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
             ],
         ),
         migrations.CreateModel(
-            name='ProteinDomainComplex',
+            name='CompoundPKResult',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('ppc_copy_nb', models.IntegerField(verbose_name='Number of copies of the protein in the complex')),
+                ('tolerated', models.NullBooleanField(verbose_name='Tolerated')),
+                ('auc', models.IntegerField(blank=True, null=True, verbose_name='Area under curve (ng.mL-1.hr)')),
+                ('clearance', models.DecimalField(blank=True, decimal_places=3, max_digits=7, null=True, verbose_name='Clearance (mL/hr)')),
+                ('c_max', models.DecimalField(blank=True, decimal_places=3, max_digits=7, null=True, verbose_name='Maximal concentration (ng/mL)')),
+                ('oral_bioavailability', models.IntegerField(blank=True, null=True, verbose_name='Oral Bioavailability (%F)')),
+                ('t_demi', models.IntegerField(blank=True, null=True, verbose_name='t½')),
+                ('t_max', models.IntegerField(blank=True, null=True, verbose_name='tmax')),
+                ('voldistribution', models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='Volume distribution (Vd)')),
+                ('compound', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
             ],
-            options={
-                'verbose_name_plural': 'complexes',
-            },
         ),
         migrations.CreateModel(
-            name='Symmetry',
+            name='Disease',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('code', models.CharField(max_length=2, verbose_name='Symmetry code')),
-                ('description', models.CharField(max_length=300, verbose_name='Description')),
+                ('name', models.CharField(max_length=30, unique=True, verbose_name='Disease')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Domain',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('pfam_acc', models.CharField(max_length=10, unique=True, verbose_name='Pfam Accession')),
+                ('pfam_id', models.CharField(max_length=20, verbose_name='Pfam Family Identifier')),
+                ('pfam_description', models.CharField(max_length=100, verbose_name='Pfam Description')),
+                ('domain_family', models.CharField(max_length=25, verbose_name='Domain family')),
             ],
             options={
-                'verbose_name_plural': 'symmetries',
+                'abstract': False,
             },
         ),
-        migrations.RemoveField(
-            model_name='complex',
-            name='protein_id',
+        migrations.CreateModel(
+            name='LeLleBiplotData',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('le_lle_biplot_data', models.CharField(blank=True, max_length=150000, null=True, verbose_name='LE-LLE biplot JSON data')),
+            ],
         ),
         migrations.CreateModel(
-            name='ProteinDomainBoundComplex',
+            name='MDDRActivityClass',
             fields=[
-                ('proteindomaincomplex_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ippidb.ProteinDomainComplex')),
-                ('ppp_copy_nb_per_p', models.IntegerField(verbose_name='Number of copies of the protein in the pocket')),
-                ('pockets_nb', models.IntegerField(verbose_name='Total number of pockets in the complex')),
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=100, unique=True, verbose_name='Activity Class')),
             ],
             options={
-                'verbose_name_plural': 'bound complexes',
+                'verbose_name_plural': 'MDDR activity classes',
             },
-            bases=('ippidb.proteindomaincomplex',),
         ),
         migrations.CreateModel(
-            name='ProteinDomainPartnerComplex',
+            name='MDDRCompoundImport',
             fields=[
-                ('proteindomaincomplex_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ippidb.ProteinDomainComplex')),
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('mddr_name', models.CharField(max_length=40, verbose_name='MDDR name')),
+                ('dvpmt_phase', models.CharField(choices=[('Biological Testing', ''), ('Preclinical', ''), ('Phase III', ''), ('Phase II', ''), ('Phase I/II', ''), ('Phase I', ''), ('Launched', ''), ('Pre-Registered', ''), ('Not Applicable', ''), ('Discontinued', ''), ('Clinical', ''), ('Withdrawn', ''), ('Registered', ''), ('Not Determined', ''), ('Phase II/III', ''), ('IND Filed', '')], max_length=20, verbose_name='Development phase')),
+                ('canonical_smile', models.CharField(blank=True, max_length=500, null=True, verbose_name='Canonical Smile')),
+                ('db_import_date', models.DateTimeField(verbose_name='MDDR release year/month')),
+                ('activity_classes', models.ManyToManyField(to='ippidb.MDDRActivityClass')),
             ],
             options={
-                'verbose_name_plural': 'partner complexes',
+                'verbose_name_plural': 'MDDR compound imports',
             },
-            bases=('ippidb.proteindomaincomplex',),
-        ),
-        migrations.DeleteModel(
-            name='Complex',
-        ),
-        migrations.AddField(
-            model_name='proteindomaincomplex',
-            name='domain',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Domain'),
         ),
-        migrations.AddField(
-            model_name='proteindomaincomplex',
-            name='protein',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Protein'),
-        ),
-        migrations.AlterUniqueTogether(
-            name='mddrsimilarity',
-            unique_together=set([('canonical_smile_ippidb', 'canonical_smile_mddr')]),
-        ),
-        migrations.AlterUniqueTogether(
-            name='mddrcompoundimport',
-            unique_together=set([('mddr_compound_id', 'mddr_name', 'dvpmt_phase')]),
-        ),
-        migrations.AddField(
-            model_name='mddrcompoundactivityclass',
-            name='mddr_compound_id',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.MDDRCompoundImport'),
-        ),
-        migrations.AddField(
-            model_name='compound',
-            name='mddr_compound_id',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ippidb.MDDRCompoundImport'),
-        ),
-        migrations.AddField(
-            model_name='ppi',
-            name='complex_id',
-            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='ippidb.ProteinDomainComplex'),
-            preserve_default=False,
-        ),
-        migrations.AddField(
-            model_name='ppi',
-            name='symmetry_id',
-            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='ippidb.Symmetry'),
-            preserve_default=False,
+        migrations.CreateModel(
+            name='MDDRSimilarity',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('canonical_smile_ippidb', models.CharField(blank=True, max_length=500, null=True, unique=True, verbose_name='Canonical Smile for IPPIDB compound')),
+                ('canonical_smile_mddr', models.CharField(blank=True, max_length=500, null=True, unique=True, verbose_name='Canonical Smile for MDDR Compound')),
+                ('tanimoto', models.DecimalField(decimal_places=5, max_digits=6, verbose_name='Tanimoto')),
+            ],
+            options={
+                'verbose_name_plural': 'MDDR similarities',
+            },
         ),
-        migrations.AlterUniqueTogether(
-            name='mddrcompoundactivityclass',
-            unique_together=set([('mddr_compound_id', 'activity_class')]),
+        migrations.CreateModel(
+            name='MolecularFunction',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('go_id', models.CharField(max_length=10, unique=True, verbose_name='Gene Ontology ID')),
+                ('description', models.CharField(max_length=500, verbose_name='description')),
+            ],
+            options={
+                'abstract': False,
+            },
         ),
         migrations.CreateModel(
-            name='CellLine',
+            name='PcaBiplotData',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=50, unique=True, verbose_name='Name')),
+                ('pca_biplot_data', models.CharField(blank=True, max_length=150000, null=True, verbose_name='PCA biplot JSON data')),
             ],
         ),
         migrations.CreateModel(
-            name='TestActivityDescription',
+            name='Ppi',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('test_name', models.CharField(max_length=100, verbose_name='Test name')),
-                ('test_type', models.CharField(choices=[('BIOCH', 'Biochemical assay'), ('CELL', 'Cellular assay')], max_length=5, verbose_name='Test type')),
-                ('test_modulation_type', models.CharField(choices=[('B', 'Binding'), ('I', 'Inhibition'), ('S', 'Stabilization')], max_length=1, verbose_name='Test modulation type')),
-                ('nb_active_compounds', models.IntegerField(verbose_name='Total number of active compounds')),
-                ('biblio_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Bibliography')),
-                ('cell_line', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.CellLine')),
-                ('complex_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.ProteinDomainBoundComplex')),
-                ('ppi_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ippidb.Ppi')),
+                ('pdb_id', models.CharField(max_length=4, null=True, verbose_name='PDB ID')),
+                ('pockets_nb', models.IntegerField(default=1, verbose_name='Total number of pockets in the complex')),
+                ('diseases', models.ManyToManyField(to='ippidb.Disease')),
             ],
         ),
-        migrations.AlterModelOptions(
-            name='mddrcompoundactivityclass',
-            options={'verbose_name_plural': 'MDDR compound activity classes'},
+        migrations.CreateModel(
+            name='PpiComplex',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('cc_nb', models.IntegerField(default=1, verbose_name='Number of copies of the complex in the PPI')),
+            ],
+            options={
+                'verbose_name_plural': 'Ppi complexes',
+            },
         ),
-        migrations.AlterModelOptions(
-            name='mddrcompoundimport',
-            options={'verbose_name_plural': 'MDDR compound imports'},
+        migrations.CreateModel(
+            name='PpiFamily',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=30, unique=True, verbose_name='Name')),
+            ],
+            options={
+                'verbose_name_plural': 'PPI Families',
+            },
         ),
-        migrations.AlterModelOptions(
-            name='mddrsimilarity',
-            options={'verbose_name_plural': 'MDDR similarities'},
+        migrations.CreateModel(
+            name='Protein',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('uniprot_id', models.CharField(max_length=10, unique=True, verbose_name='Uniprot ID')),
+                ('recommended_name_long', models.CharField(max_length=75, verbose_name='Uniprot Recommended Name (long)')),
+                ('short_name', models.CharField(max_length=50, verbose_name='Short name')),
+                ('gene_name', models.CharField(max_length=30, unique=True, verbose_name='Gene name')),
+                ('entry_name', models.CharField(max_length=30, verbose_name='Entry name')),
+                ('molecular_functions', models.ManyToManyField(to='ippidb.MolecularFunction')),
+            ],
+            options={
+                'abstract': False,
+            },
         ),
         migrations.CreateModel(
-            name='ActivityType',
+            name='ProteinDomainComplex',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=50, unique=True, verbose_name='Name')),
+                ('ppc_copy_nb', models.IntegerField(verbose_name='Number of copies of the protein in the complex')),
             ],
+            options={
+                'verbose_name_plural': 'complexes',
+            },
         ),
         migrations.CreateModel(
-            name='CmpdAction',
+            name='RefCompoundBiblio',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('activation_mode', models.CharField(choices=[('O', 'Orthosteric'), ('A', 'Allosteric')], max_length=1, verbose_name='Activation mode')),
-                ('complex_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.ProteinDomainBoundComplex')),
-                ('compound_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
-                ('nb_copy_compounds', models.IntegerField(default=1, verbose_name='Number of copies for the compound')),
-                ('pdb_id', models.CharField(default='NA', max_length=4, verbose_name='PDB ID')),
-                ('ppi_id', models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='ippidb.Ppi')),
+                ('compound_name', models.CharField(max_length=50, verbose_name='Compound name in the publication')),
+                ('bibliography', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Bibliography')),
+                ('compound', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
             ],
         ),
         migrations.CreateModel(
-            name='CompoundActivityResult',
+            name='Symmetry',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('activity', models.DecimalField(decimal_places=10, max_digits=12, verbose_name='Activity')),
-                ('activity_type_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.ActivityType')),
-                ('compound_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
-                ('test_activity_description_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.TestActivityDescription')),
-                ('modulation_type', models.CharField(choices=[('B', 'Binding'), ('I', 'Inhibition'), ('S', 'Stabilization')], default='B', max_length=1, verbose_name='Modulation type')),
+                ('code', models.CharField(max_length=2, verbose_name='Symmetry code')),
+                ('description', models.CharField(max_length=300, verbose_name='Description')),
             ],
+            options={
+                'verbose_name_plural': 'symmetries',
+            },
         ),
         migrations.CreateModel(
-            name='CompoundCytotoxicityResult',
+            name='Taxonomy',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('toxicity', models.BooleanField(default=False, verbose_name='Toxicity')),
-                ('compound_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
+                ('taxonomy_id', models.DecimalField(decimal_places=0, max_digits=9, unique=True, verbose_name='NCBI TaxID')),
+                ('name', models.CharField(max_length=200, verbose_name='Organism name')),
             ],
+            options={
+                'verbose_name_plural': 'taxonomies',
+            },
         ),
         migrations.CreateModel(
-            name='CompoundPKResult',
+            name='TestActivityDescription',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('tolerated', models.NullBooleanField(verbose_name='Tolerated')),
-                ('auc', models.IntegerField(blank=True, null=True, verbose_name='Area under curve (ng.mL-1.hr)')),
-                ('clearance', models.DecimalField(blank=True, decimal_places=3, max_digits=7, null=True, verbose_name='Clearance (mL/hr)')),
-                ('cmax', models.DecimalField(blank=True, decimal_places=3, max_digits=7, null=True, verbose_name='Maximal concentration (ng/mL)')),
-                ('oral_bioavailability', models.IntegerField(blank=True, null=True, verbose_name='Oral Bioavailability (%F)')),
-                ('t_demi', models.IntegerField(blank=True, null=True, verbose_name='t½')),
-                ('t_max', models.IntegerField(blank=True, null=True, verbose_name='tmax')),
-                ('voldistribution', models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='Volume distribution (Vd)')),
-                ('compound_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
+                ('test_name', models.CharField(max_length=100, verbose_name='Test name')),
+                ('is_primary', models.BooleanField(verbose_name='Is primary')),
+                ('protein_bound_construct', models.CharField(blank=True, choices=[('F', 'Full length'), ('U', 'Unspecified')], max_length=5, null=True, verbose_name='Protein bound construct')),
+                ('test_type', models.CharField(choices=[('BIOCH', 'Biochemical assay'), ('CELL', 'Cellular assay')], max_length=5, verbose_name='Test type')),
+                ('test_modulation_type', models.CharField(choices=[('B', 'Binding'), ('I', 'Inhibition'), ('S', 'Stabilization')], max_length=1, verbose_name='Test modulation type')),
+                ('nb_active_compounds', models.IntegerField(verbose_name='Total number of active compounds')),
+                ('biblio', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Bibliography')),
+                ('cell_line', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ippidb.CellLine')),
+                ('ppi', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ippidb.Ppi')),
             ],
         ),
         migrations.CreateModel(
@@ -401,440 +340,126 @@ class Migration(migrations.Migration):
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('test_name', models.CharField(max_length=100, verbose_name='Pharmacokinetic test name')),
+                ('administration_mode', models.CharField(blank=True, choices=[('IV', ''), ('PO', ''), ('IP', ''), ('SL', 'SL')], max_length=2, null=True, verbose_name='Administration mode')),
+                ('concentration', models.DecimalField(blank=True, decimal_places=3, max_digits=7, null=True, verbose_name='Concentration in mg/l')),
                 ('dose', models.DecimalField(blank=True, decimal_places=4, max_digits=9, null=True, verbose_name='Dose in mg/kg')),
                 ('dose_interval', models.IntegerField(blank=True, null=True, verbose_name='Dose interval, in hours')),
-                ('administration_mode', models.CharField(blank=True, choices=[('IV', ''), ('PO', ''), ('IP', ''), ('SL', 'SL')], max_length=2, null=True, verbose_name='Administration mode')),
                 ('biblio', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Bibliography')),
                 ('organism', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Taxonomy')),
-                ('concentration', models.DecimalField(blank=True, decimal_places=3, max_digits=7, null=True, verbose_name='Concentration in mg/l')),
             ],
         ),
-        migrations.AddField(
-            model_name='compoundpkresult',
-            name='test_pk_description_id',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.TestPKDescription'),
-        ),
-        migrations.AddField(
-            model_name='compoundcytotoxicityresult',
-            name='test_cytotoxicity_description_id',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.TestCytotoxDescription'),
-        ),
-        migrations.AlterUniqueTogether(
-            name='compoundpkresult',
-            unique_together=set([('compound_id', 'test_pk_description_id')]),
-        ),
-        migrations.AlterUniqueTogether(
-            name='compoundcytotoxicityresult',
-            unique_together=set([('compound_id', 'test_cytotoxicity_description_id')]),
-        ),
-        migrations.AlterUniqueTogether(
-            name='compoundactivityresult',
-            unique_together=set([('compound_id', 'test_activity_description_id', 'activity_type_id')]),
-        ),
         migrations.CreateModel(
-            name='RefCompoundBiblio',
+            name='ProteinDomainBoundComplex',
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('compound_name', models.CharField(max_length=50, verbose_name='Compound name in the publication')),
-                ('bibliography_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Bibliography')),
-                ('compound_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Compound')),
+                ('proteindomaincomplex_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ippidb.ProteinDomainComplex')),
+                ('ppp_copy_nb_per_p', models.IntegerField(verbose_name='Number of copies of the protein in the pocket')),
             ],
-        ),
-        migrations.AlterUniqueTogether(
-            name='cmpdaction',
-            unique_together=set([('complex_id', 'compound_id', 'pdb_id')]),
-        ),
-        migrations.AlterUniqueTogether(
-            name='refcompoundbiblio',
-            unique_together=set([('compound_id', 'bibliography_id')]),
-        ),
-        migrations.RenameField(
-            model_name='cmpdaction',
-            old_name='complex_id',
-            new_name='complex',
-        ),
-        migrations.RenameField(
-            model_name='cmpdaction',
-            old_name='compound_id',
-            new_name='compound',
-        ),
-        migrations.RenameField(
-            model_name='cmpdaction',
-            old_name='ppi_id',
-            new_name='ppi',
-        ),
-        migrations.RenameField(
-            model_name='compound',
-            old_name='mddr_compound_id',
-            new_name='mddr_compound',
-        ),
-        migrations.RenameField(
-            model_name='compoundactivityresult',
-            old_name='activity_type_id',
-            new_name='activity_type',
-        ),
-        migrations.RenameField(
-            model_name='compoundactivityresult',
-            old_name='compound_id',
-            new_name='compound',
-        ),
-        migrations.RenameField(
-            model_name='compoundactivityresult',
-            old_name='test_activity_description_id',
-            new_name='test_activity_description',
-        ),
-        migrations.RenameField(
-            model_name='compoundcytotoxicityresult',
-            old_name='compound_id',
-            new_name='compound',
-        ),
-        migrations.RenameField(
-            model_name='compoundcytotoxicityresult',
-            old_name='test_cytotoxicity_description_id',
-            new_name='test_cytotoxicity_description',
-        ),
-        migrations.RenameField(
-            model_name='compoundpkresult',
-            old_name='compound_id',
-            new_name='compound',
-        ),
-        migrations.RenameField(
-            model_name='compoundpkresult',
-            old_name='test_pk_description_id',
-            new_name='test_pk_description',
-        ),
-        migrations.RenameField(
-            model_name='mddrcompoundactivityclass',
-            old_name='mddr_compound_id',
-            new_name='mddr_compound',
-        ),
-        migrations.RenameField(
-            model_name='ppi',
-            old_name='complex_id',
-            new_name='complex',
-        ),
-        migrations.RenameField(
-            model_name='ppi',
-            old_name='symmetry_id',
-            new_name='symmetry',
-        ),
-        migrations.RenameField(
-            model_name='refcompoundbiblio',
-            old_name='bibliography_id',
-            new_name='bibliography',
-        ),
-        migrations.RenameField(
-            model_name='refcompoundbiblio',
-            old_name='compound_id',
-            new_name='compound',
-        ),
-        migrations.RenameField(
-            model_name='testactivitydescription',
-            old_name='biblio_id',
-            new_name='biblio',
-        ),
-        migrations.RenameField(
-            model_name='testactivitydescription',
-            old_name='complex_id',
-            new_name='complex',
-        ),
-        migrations.RenameField(
-            model_name='testactivitydescription',
-            old_name='ppi_id',
-            new_name='ppi',
-        ),
-        migrations.RemoveField(
-            model_name='compound',
-            name='dh_Petitjean',
-        ),
-        migrations.RemoveField(
-            model_name='compound',
-            name='diam_graph_non_h_petitjean',
-        ),
-        migrations.RemoveField(
-            model_name='compound',
-            name='g_petitjean',
-        ),
-        migrations.RemoveField(
-            model_name='compound',
-            name='ig_petitjean',
-        ),
-        migrations.RemoveField(
-            model_name='compound',
-            name='radius_graph_non_h_petitjean',
-        ),
-        migrations.RemoveField(
-            model_name='compound',
-            name='surface_vdw_petitjean',
-        ),
-        migrations.RemoveField(
-            model_name='compound',
-            name='thickness_petitjean',
-        ),
-        migrations.RemoveField(
-            model_name='compound',
-            name='vol_vdw_petitjean',
-        ),
-        migrations.AlterField(
-            model_name='compound',
-            name='canonical_smile',
-            field=models.CharField(max_length=500, unique=True, verbose_name='Canonical Smile'),
-        ),
-        migrations.RemoveField(
-            model_name='cmpdaction',
-            name='complex',
-        ),
-        migrations.AlterUniqueTogether(
-            name='cmpdaction',
-            unique_together=set([('ppi', 'compound', 'activation_mode', 'pdb_id')]),
-        ),
-        migrations.AlterUniqueTogether(
-            name='compoundactivityresult',
-            unique_together=set([('compound', 'test_activity_description', 'activity_type')]),
-        ),
-        migrations.AlterUniqueTogether(
-            name='compoundcytotoxicityresult',
-            unique_together=set([('compound', 'test_cytotoxicity_description')]),
-        ),
-        migrations.RenameField(
-            model_name='compoundpkresult',
-            old_name='cmax',
-            new_name='c_max',
-        ),
-        migrations.AlterUniqueTogether(
-            name='compoundpkresult',
-            unique_together=set([('compound', 'test_pk_description')]),
-        ),
-        migrations.AlterUniqueTogether(
-            name='mddrcompoundactivityclass',
-            unique_together=set([]),
-        ),
-        migrations.AlterUniqueTogether(
-            name='refcompoundbiblio',
-            unique_together=set([('compound', 'bibliography')]),
+            options={
+                'verbose_name_plural': 'bound complexes',
+            },
+            bases=('ippidb.proteindomaincomplex',),
         ),
         migrations.CreateModel(
-            name='PpiComplex',
+            name='ProteinDomainPartnerComplex',
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('cc_nb', models.IntegerField(default=1, verbose_name='Number of copies of the complex in the PPI')),
-                ('complex', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.ProteinDomainComplex')),
+                ('proteindomaincomplex_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ippidb.ProteinDomainComplex')),
             ],
             options={
-                'verbose_name_plural': 'Ppi complexes',
+                'verbose_name_plural': 'partner complexes',
             },
+            bases=('ippidb.proteindomaincomplex',),
         ),
-        migrations.RemoveField(
-            model_name='ppi',
-            name='cc_nb',
+        migrations.AddField(
+            model_name='proteindomaincomplex',
+            name='domain',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Domain'),
         ),
-        migrations.RemoveField(
-            model_name='ppi',
-            name='complex',
+        migrations.AddField(
+            model_name='proteindomaincomplex',
+            name='protein',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Protein'),
         ),
-        migrations.RemoveField(
-            model_name='ppi',
-            name='ppi_id',
+        migrations.AddField(
+            model_name='protein',
+            name='organism',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Taxonomy'),
         ),
-        migrations.RemoveField(
-            model_name='testactivitydescription',
+        migrations.AddField(
+            model_name='ppicomplex',
             name='complex',
-        ),
-        migrations.AlterField(
-            model_name='compoundactivityresult',
-            name='activity_type',
-            field=models.CharField(choices=[('pIC50', 'pIC50 (half maximal inhibitory concentration, -log10)'), ('pEC50', 'pEC50 (half maximal effective concentration, -log10)'), ('pKd', 'pKd (dissociation constant, -log10)'), ('pKi', 'pKi (inhibition constant, -log10)')], max_length=5, verbose_name='Activity type'),
-        ),
-        migrations.DeleteModel(
-            name='ActivityType',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.ProteinDomainComplex'),
         ),
         migrations.AddField(
             model_name='ppicomplex',
             name='ppi',
             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Ppi'),
         ),
-        migrations.AlterField(
-            model_name='ppi',
-            name='pdb_id',
-            field=models.CharField(max_length=4, null=True, verbose_name='PDB ID'),
-        ),
-        migrations.RenameModel(
-            old_name='CmpdAction',
-            new_name='CompoundAction',
-        ),
         migrations.AddField(
             model_name='ppi',
-            name='diseases',
-            field=models.ManyToManyField(to='ippidb.Disease'),
-        ),
-        migrations.RemoveField(
-            model_name='proteindomainboundcomplex',
-            name='pockets_nb',
+            name='family',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='ippidb.PpiFamily'),
         ),
         migrations.AddField(
             model_name='ppi',
-            name='pockets_nb',
-            field=models.IntegerField(default=1, verbose_name='Total number of pockets in the complex'),
-        ),
-        migrations.AlterField(
-            model_name='compound',
-            name='pubchem_id',
-            field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Pubchem ID'),
-        ),
-        migrations.AlterField(
-            model_name='compound',
-            name='iupac_name',
-            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='IUPAC name'),
-        ),
-        migrations.AlterField(
-            model_name='compound',
-            name='chembl_id',
-            field=models.CharField(blank=True, max_length=30, null=True, verbose_name='Chembl ID'),
-        ),
-        migrations.CreateModel(
-            name='MDDRActivityClass',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=100, unique=True, verbose_name='Activity Class')),
-            ],
-            options={
-                'verbose_name_plural': 'MDDR activity classes',
-            },
-        ),
-        migrations.RemoveField(
-            model_name='mddrcompoundactivityclass',
-            name='mddr_compound',
-        ),
-        migrations.DeleteModel(
-            name='MDDRCompoundActivityClass',
-        ),
-        migrations.AddField(
-            model_name='mddrcompoundimport',
-            name='activity_classes',
-            field=models.ManyToManyField(to='ippidb.MDDRActivityClass'),
-        ),
-        migrations.AlterField(
-            model_name='mddrcompoundimport',
-            name='db_import_date',
-            field=models.DateTimeField(verbose_name='MDDR release year/month'),
-        ),
-        migrations.RemoveField(
-            model_name='mddrcompoundimport',
-            name='mddr_compound_id',
+            name='symmetry',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Symmetry'),
         ),
         migrations.AlterUniqueTogether(
-            name='mddrcompoundimport',
-            unique_together=set([('mddr_name', 'dvpmt_phase', 'canonical_smile')]),
-        ),
-        migrations.AlterField(
-            model_name='mddrcompoundimport',
-            name='canonical_smile',
-            field=models.CharField(blank=True, max_length=500, null=True, verbose_name='Canonical Smile'),
+            name='mddrsimilarity',
+            unique_together=set([('canonical_smile_ippidb', 'canonical_smile_mddr')]),
         ),
-        migrations.AlterField(
-            model_name='mddrcompoundimport',
-            name='dvpmt_phase',
-            field=models.CharField(choices=[('Biological Testing', ''), ('Preclinical', ''), ('Phase III', ''), ('Phase II', ''), ('Phase I/II', ''), ('Phase I', ''), ('Launched', ''), ('Pre-Registered', ''), ('Not Applicable', ''), ('Discontinued', ''), ('Clinical', ''), ('Withdrawn', ''), ('Registered', ''), ('Not Determined', ''), ('Phase II/III', ''), ('IND Filed', '')], max_length=20, verbose_name='Development phase'),
+        migrations.AddField(
+            model_name='compoundpkresult',
+            name='test_pk_description',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.TestPKDescription'),
         ),
-        migrations.AlterField(
-            model_name='testactivitydescription',
-            name='cell_line',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ippidb.CellLine'),
-        ),
-        migrations.AlterField(
-            model_name='bibliography',
-            name='in_cellulo',
-            field=models.BooleanField(default=False, verbose_name='in cellulo study'),
-        ),
-        migrations.AlterField(
-            model_name='bibliography',
-            name='in_silico',
-            field=models.BooleanField(default=False, verbose_name='in silico study'),
-        ),
-        migrations.AlterField(
-            model_name='bibliography',
-            name='in_vitro',
-            field=models.BooleanField(default=False, verbose_name='in vitro study'),
-        ),
-        migrations.AlterField(
-            model_name='bibliography',
-            name='in_vivo',
-            field=models.BooleanField(default=False, verbose_name='in vivo study'),
-        ),
-        migrations.AlterField(
-            model_name='bibliography',
-            name='pharmacokinetic',
-            field=models.BooleanField(default=False, verbose_name='pharmacokinetic study'),
-        ),
-        migrations.AlterField(
-            model_name='bibliography',
-            name='source',
-            field=models.CharField(choices=[('PM', 'PubMed ID'), ('PT', 'Patent'), ('DO', 'DOI ID')], default='PM', max_length=2, verbose_name='Bibliographic type'),
-        ),
-        migrations.AlterField(
-            model_name='bibliography',
-            name='xray',
-            field=models.BooleanField(default=False, verbose_name='X-Ray data'),
-        ),
-        migrations.AlterField(
-            model_name='compoundaction',
-            name='activation_mode',
-            field=models.CharField(choices=[('O', 'Orthosteric'), ('A', 'Allosteric'), ('U', 'Unspecified')], max_length=1, verbose_name='Activation mode'),
+        migrations.AddField(
+            model_name='compoundcytotoxicityresult',
+            name='test_cytotoxicity_description',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.TestCytotoxDescription'),
         ),
-        migrations.AlterField(
-            model_name='compoundaction',
-            name='pdb_id',
-            field=models.CharField(blank=True, max_length=4, null=True, verbose_name='PDB ID'),
+        migrations.AddField(
+            model_name='compoundactivityresult',
+            name='test_activity_description',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.TestActivityDescription'),
         ),
         migrations.AddField(
-            model_name='testactivitydescription',
-            name='is_primary',
-            field=models.BooleanField(default=False, verbose_name='Is primary'),
-            preserve_default=False,
+            model_name='compoundaction',
+            name='ppi',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Ppi'),
         ),
         migrations.AddField(
-            model_name='testactivitydescription',
-            name='protein_bound_construct',
-            field=models.CharField(blank=True, choices=[('F', 'Full length'), ('U', 'Unspecified')], max_length=5, null=True, verbose_name='Protein bound construct'),
+            model_name='compound',
+            name='mddr_compound',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ippidb.MDDRCompoundImport'),
         ),
         migrations.AddField(
             model_name='testactivitydescription',
             name='protein_domain_bound_complex',
-            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='ippidb.ProteinDomainBoundComplex'),
-            preserve_default=False,
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.ProteinDomainBoundComplex'),
         ),
-        migrations.AddField(
-            model_name='compoundactivityresult',
-            name='inhibition_percentage',
-            field=models.DecimalField(decimal_places=0, max_digits=3, null=True, verbose_name='Inhibition percentage'),
+        migrations.AlterUniqueTogether(
+            name='refcompoundbiblio',
+            unique_together=set([('compound', 'bibliography')]),
         ),
-        migrations.CreateModel(
-            name='LeLleBiplotData',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('le_lle_biplot_data', models.CharField(blank=True, max_length=150000, null=True, verbose_name='LE-LLE biplot JSON data')),
-            ],
+        migrations.AlterUniqueTogether(
+            name='mddrcompoundimport',
+            unique_together=set([('mddr_name', 'dvpmt_phase', 'canonical_smile')]),
         ),
-        migrations.CreateModel(
-            name='PpiFamily',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=30, unique=True, verbose_name='Name')),
-            ],
-            options={
-                'verbose_name_plural': 'PPI Families',
-            },
+        migrations.AlterUniqueTogether(
+            name='compoundpkresult',
+            unique_together=set([('compound', 'test_pk_description')]),
         ),
-        migrations.AddField(
-            model_name='ppi',
-            name='family',
-            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='ippidb.PpiFamily'),
+        migrations.AlterUniqueTogether(
+            name='compoundcytotoxicityresult',
+            unique_together=set([('compound', 'test_cytotoxicity_description')]),
         ),
-        migrations.CreateModel(
-            name='PcaBiplotData',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('pca_biplot_data', models.CharField(blank=True, max_length=150000, null=True, verbose_name='PCA biplot JSON data')),
-            ],
+        migrations.AlterUniqueTogether(
+            name='compoundactivityresult',
+            unique_together=set([('compound', 'test_activity_description', 'activity_type')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='compoundaction',
+            unique_together=set([('ppi', 'compound', 'activation_mode', 'pdb_id')]),
         ),
     ]