From 740d325dd7000a74318d6bb31f826238c9638a74 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Herv=C3=A9=20=20MENAGER?= <herve.menager@pasteur.fr>
Date: Mon, 27 Mar 2017 16:40:32 +0200
Subject: [PATCH] include new parts in the application model.

---
 ippisite/db.sqlite3                           | Bin 360448 -> 512000 bytes
 .../migrations/0005_auto_20170327_1301.py     |  54 ++++
 .../migrations/0006_auto_20170327_1439.py     | 117 +++++++
 ippisite/ippidb/models.py                     | 286 +++++-------------
 4 files changed, 255 insertions(+), 202 deletions(-)
 create mode 100644 ippisite/ippidb/migrations/0005_auto_20170327_1301.py
 create mode 100644 ippisite/ippidb/migrations/0006_auto_20170327_1439.py

diff --git a/ippisite/db.sqlite3 b/ippisite/db.sqlite3
index 7f26c319de03013d8a2ee4fd4574e563dd1dd02c..46aaf4b6776a9bf725d217f85d4bf10ccacee955 100644
GIT binary patch
delta 11455
zcmbU{eQ*=ko%>e1S{Z948)}5X#<Ia+#n{$|Wmy&mjAM)g*pxsC1R`W<0R>w!w#-Lb
zMm#Vip-C@^8@8cIAW0KKo2H$(jdQuAm)xb(^qN1IyPGRXCm(auxn9z{rgOQJxnA4c
zd;9jScC{<R9AosP_kQ2M-}}Aa`#5=W;mJ#N4=t&TG7NJ9{a62i%7<5lYNJfcpAYk>
z%kKUF4;*v<ulo<~-@89?|Jwb*Oyxewz2X486%Fi!tI+2TxD<W1LJ@sd<8Dtq{<@%i
z^R!U0j4MA^zIi54v9vtDdI8T=$9mFZW9ihe-|z2;Cnj^*c+ek+_(Q=+JkTDB;vX&k
zP)ji44YYTKqFtfR)<_^23ItZqH)4m2u|xiV9y`?K4|D~>t<h*G8jh^4<Y#`dq=U1I
zFELf(1Ji=nTmFRjKW?A+zW9LnH#0r{-C}-uhi%9~#EU1hqhs00Oe%Rim(695rIYF0
z@o{NlawO;KXUdR%4C9U1`isF6$z1w~2D&(GixoqR9U^2_25etuRc2%3*_@P~E^n2<
zg6YGpe+`1u&28(!i_@95MIbhPZ`+CWb<TGf_kX(o!TqlLHTOla*7=TmT>PadxLy;(
z;&Im{*FEkU@uJJ++UM?ZJ?L(AU3aZ=U3G1C-zEN5-0A$peGch()|s#6ssn(qO{7NC
zne;?%JdsOhGo#s*6szH?+tksVG?5!Sl#(Wr<LNOB&{f4%*Q<lc(XkX(HJgcgxavkq
zP*py6d`#-B=c=O=TD2v@*silqhYkdDQ%$X78E)jNdy0sd9nwC1vAd~%f#Q?G#{#ap
zmZC}{BO~dI6l&nAV`?8}NS&qQ7@T&kdAOEa!d16WWL0?Tx5&(EYc>KK^2fBWZq<U{
zA}1UdcZy-xC9zf%oS!(~A%?DraZGifl%<z+q0u%nYO?f~qG+(53>GZCuoLw*ssweG
z_I9BDs0yuFdb>Ujz2O3gwWXK0BZwX&5woSIFK#g#dVUC@)~cwgrR#&JFGl)GSbEwu
zhzz|rf&g2Le5s{pUK>P)-fMSE3tRK6%YIsRvFv!6R5n-^DXVn6?0C>|$g#muFMJ`q
zC;V7=Ot?q5Q|J|%1krxo{(=3c_UG;Q*$>)pv-|80lz%qxc`panvaysjBITsGIry0u
z2|)5-B6GkJ;QO^4h_bOnDrJTKLLCRX*)Em7$*D~KdjvqGZwB~o4F@7@7bb5Wyt0S`
zZERGfUWf|jc`~3<)eT&(;((8hVsc7vUYW1VbBj3;VmqlBbb-V?ONOWc^h4kAaG-_l
zR8-gZKeLnrF*ZWQDw-?I(_~non3uGqN<GXxwS)s<HloN_jC*N02m0BLBGPouk|fGp
zBtTSqE&TP-&pcVrfgU#Bp=VP>=Lv;QSY?LIZ_Y-{;{-@$Rs!hT3bQcgWrWy66Df0{
zi33Aydy!`5>Bc-p0E@J<0Q}bUhj%pR=aKB!$bkX2U9YSKhP;pi&1{Iupw3(7Jn5z!
zY4@WGIMB$36q>Z}n+l&`!DMl(gvv}4FrCq;>2+zBd8B~@y=;(L%?jk<nSb9^bHuh+
zyf7_XJsHcpj=2uI?sg?zdt5tQ?XDKr3Rj(Lk*m@*&t((;Bz`XbPW+Adk@&9okK!-H
zx5U@Qm&G55&x=oq7f^z}=9GVUmyOHEm>2Cfz{Z&Glja57bTQu}&38$21vgRVdD2`a
z&2zZvWS%9>cS!RLZX(Rnq<M-omvGa;TqMntq<I22;XL!W(lXyB%>~@FGmnwxTet}@
z50U1tNb?QkWS$`aGHyc5dD1*ens4GJ$V`*w5z;*D`Y-&Yg*i={Q@B~h%sl?V!KaqH
z8Ho`Ol<jm(JDm1}y_KKjJGocOyXJk&NNf;%4qgGT%r>0_4}f{LR~RmKtKBo?lN0@X
z-R%1i{0eaM5`di!RK(C1=I_y$zny(`3T%j--^!NTPPqSwYQ|69wy(jOvsc0St1M@m
z&wM5eSJ_&J^KI~%Gsk>}aDI0A!*x6;KXp4S7d&g%f~l~)HNh{Ev+H^L?4I>}E113Q
zpV&JbEc4F@`l|e455HYL*UNt~`?L4iC=2GzfPFUa8P0Zw<9^KXe_k6zh7y5|5iSV3
zg~j&w>=*32?Th(ua6#Lfwjs6-4TYT7U5q#@9u*_b>&{sxCOqrg$M3Yy?(XL=FY?*8
zGA{Nc!=6M%)JD-U@4>R4m)-Ap+aU;j_Ivqj{6pM(wyoj{v34d<@fB9~XZfof!+>+>
z=UH$!48m24E)dlk!y^(|<}B8Zk^{rN+xmL8_j$MXtl!+{Z72yRU-~)-%YQipTopmT
z&pWtd^JZTkY_@xLg%m&K>4d_iSzN73;`+`6Y=*Z8o=^zD69!>**`Bi3b?vhjPzTZA
zZE8r%&wd^F75U^Pr-Ab>?~cKNFYoB{!7k_%Ja-NNxHp|iNyk(UIB`<pbXg+anMx%B
zQeyZ9VCS!~RrwpyXz&gVY8EX4jAci=m3TUZ{u+F64QwLPN;j1DmTV>-9gcQ%Mw0Dw
zi+k6c;!+wnD=yx*j7Y~ck-OnaB64z0ky}ZPANPln!9ZxgT23k}n1v(!bBau9+_cDO
zMTz73oEW(quDBVA(=E!bBrc%}r?X=?HMf!5u*ADcxLKodvl0)dhey&`YU6I$DDUm(
zm&xy+2G#stxDGCt|9BeQ0`|y_Q(zkj`xmBwDCefY%DivtC|o9Z1_r==Y5hzqA>7=0
z-Dx@hN{}K`@$&t^&tr(Vyz(4as`xmL^Fo97NManV)8kEHltPBKD`{kvw?TnL+r!Bb
zWusUG8!*6ThDlZ_)OvE|CVrvZlHmn5osthj;FAxG@(V;CqMW3jSNbdPPaFq|oM^tu
zi&K2B{F8rSopSXrS+9Um&~%hvAL5(b=nIAOb;Abif#s4)K+ABH;%-<6>jh79Gk}wN
zo6~XC$n@tfORLh+Lb6qonS&;?*(IZV75m&6U-8mD&Ogh2#IA8KX=Aq~a=FO~Zzel_
zL^_a8PEM?xT88$9eKvXDr)*6b?|CzdHiL(4@|jQBU>WFrqy}yOA~yMrPuZ$g(08T^
z?faV9jRRk433#`3t&eZKV|{R2%d7Lz&Z&{zm>tb}ClX_6DKpV{_PO7)70N>RMcYeb
zoOg!X_ouq2$0}YL0~O6>r<rowC8q2z;_mYM9G^S(yL*Kz_CMIS@Xy*VagW*l&DPC6
z3VsJxGrQ61m9wp#0`OMB6N`a+s|_YAs?(|Iin@=>Kkw&j9kkL{Y?jYuM<jIGAf+0-
z!`bWz4Y0&yvca3q<fH@AIPFW0NQv=8CW(R}B_-3N2@N_qnmA_a%#J5U;=}1|;z%Mr
zf)<DobOvLhc}Fgul15S36!FT%6_Q20N3tU+d^(aIp2P<oCYJPs2&Dlfe0{Woh9#Xk
zV}}r1?HGlEr|`5g9I#M4A6yRC2%e#C00)YbwgDj?9Nr)73?(AE9AN;+;jC9t%t-#p
zd#q=qxECqd)Q}xNkU&R5qa+hI!fqnQrn$wiNWlg%CbZ?k&|Nz18o;nz#)J#o;A$dR
zd~U%)f$;t$+O%T(RHcTMRA-<)UP3a8Xj%{q*jO^-IYJztq7maoVNCGs>IcvyWAV<?
zhe`#yX6igy43^Ct)}%F$X%tK%n_;osIGO1d-EtTfJUwjyhV&LKoF>FOqe)5fw};Y|
z$d<^Ig`q==RE6Ifs6mp#xWZk{7RXe@TJvB#;U6f$pVmP%-Dn4p`;}ZR^Vislo&poC
z_PT)(x>CvYE9R?c18{Wcv>mnxp0+k{CT2){8cUN5N$d53AjlW*2c7GcDvGS1I7SL<
zt#SRFW0{pJQ~c(_YUoxL(1IP69F#B4LB7+2FerGsyTREuy)vfRuM0dwjHfMCGofRr
zq7qrYazAL*6&D*)*$Hz7$DL?a<fQQ<i4jvawwO`!8$*2K3gZB=qQVthLdy_^62po6
zX+|U6T~olF_xVnpfC0hN-w&pa7aPSqTXdE&4<0OO9y4qS8~Lfv(D4{r?=tFnylK6$
z(9oiYs-jhj%FX9P+u(yJu2b7#6n5QYN<taQBB`5I8pCsc2aX2wm`1@c1+8JRu$q2K
zMi6Jf*cZ5XxtTv);MDOQjFZ{J%zIhr<ECs}*+Y&uSueB4Uc;k91GgWUVD+Zc>)>X^
z@n`aS$5Ri`tqwU{q|;oTW5&U+D)o)a*r`-G4%#Q5+`?B?&|gZ~j8szsv4QrIx?784
zDhP#ZqaD<nw5Fi=R+UAmtuLkFgZtnn!IKyQr)mw^R#jAWrS8fr9u9_v6VX(#$RuXS
zqi8<JwrlKsEfbkxG-`&xpqiTDvD`Rp;`*T?#g&*j^)<K=)dfRf>Oihvci>W*^bPg7
zM{)CfJ!cXeimMyx%^<C33!5g&lX@~lJE#|^C-tO@lu|<FK<OES&m?@X74{3BEinKS
zR?egacs$w}mWI&<X_3lw{0N@OyQq+~SHrS&6@}6qWU6!(w+R2iG@#kHbUWG^50V6g
zE*=Y~J(MYpX=32`{$L^)iljP<1U5pAV6m6ZO+l`d_=VaD7@>|urj+Q+Br((ow>Ufy
z^n=slO$bRjBV7C!_J=~jAiB$*%%l$+1h32}7p8@~;gsCd!`EojgbJf7KNnp~Ul{SR
zdPWirG~Os6iM3Jn+=tX*2u2%LP6}yxwhV3{F=p5aP!2Q>w93z*c_u~2CrPEKrWx9+
zVOi=$p)54=m0w{Nk}D7WCyc=%5@m)XFDh)9YN%RTD{R%e)-v0V8YC}4!BT!Btd$mU
z6TD5y#&E(a;0pO6L|-6i7AvxI0hB^!4RV{uHA<GUo8hhGKh*#S(2OZV%gIqo1-6==
zP@qbOysl8EP3L}pdq*OWGEW<;2N;rZ=9s0Nll=c*Q#ykP!#sHtQk1fl90IejPw-5}
zz^Ry(L1;)9i|J2=J3`5%r4=a7-D<tLV^F@WhhLzj4>~?4O-t1&riE*%!q#b>VQlx#
z1S(G0cE77kKe!ogRp#9(-b!oZM2LqI;o(FwM9;=)Kp3GiID8LUk7*PvwKCGdx+xU|
z?Y8n7t~hPp%iIq^g>4h_q%6Dv@_F0awiC9X&B=bm{)kP3x4;DOGrwV;+yHBM2K3)P
z_l<FHB7;t^@OuL<X75!)74>PyK^x!_LP&Q(s)8Y?JiRl<ln6vgO6%ZaM5$+s#nrQ(
z3c6w~Nn#LIBN9V*YFE?wk|m)|HR>O#o>Dk^NqQZGiwH$kJql}{v^otbkT*GBmpW96
za@F5~ZFz><2tA1Mz>XVSbYrqu<pNDJNgrH@NHvFxZ^QLEqT>=TKAZNzDg>KHz*Hmk
z%vmo#1zrZfgn%2{3>W8`L=<WxL=WSTCc3M1tJ^P~G`T#ECK}B8aM}pbGdWC47fuvT
z7j-&emB6GRdQ$6QB_h>3WOXU;vy3P!DzoBS;Cgw}{PK?(_v`MQyV>>Mu36VTuFbAR
z;;+S5#dG3rvEKQw&S#uyr?32DbT$8adA=LABGzjMN<Y@o8N+xi;Kk<x-LQq=t5z_A
zU<jQ7jDr|IFGb)gL?GH*;;j$H#zAF9l~%)MgxNh%@*R*)a>evxhxA5Y4R7I@JjT~K
z&~PB5liUKo1NspANU!xPA}Y59Vhe0Sh;32)!YGd)NEOb~bQ0rECGN7B7Pyii(0QO8
zkLe`T!LNiX5WFu`c#woHiL)6hk`6MEhm8m{)NS=hNhgdJZn#tpz~uyox?Fb!trN(A
z(+rm(oR&!Ov!=Wf9*ToiDqhT@3pOC|SbwS4PCC)FY=gW@5@8ptC&<)XMOCm)#w5+U
zUJbh)dJ%TG$MU5VMm3~34Q&IgLumcC&;5wXBzHbToQyXss`wk=QbMUnd}>dkq+SVC
cze1KGAnRZ)BGj{Gj>lNNb;Sx%E~+s92hgOHGynhq

delta 1209
zcmZ`$ZD?Cn7(VCRbM8%=+;f^pmeq9bZfVKVHc8VuyEb%9YQI+9)Pgn^oy|gMQ|xD!
z6_jm>)DDN6jTgK)KcWow^=HMDT`h%ezbrx_!#|3f!C&e`5XLM;L{HMSg^K6pKJRm$
z!~5L#Jty_q?o?{WoWtS<0EGFsvA)aHHCDKR=kH0vCCu&@5Bk|(>`(RwyPvZRCfVaJ
zrY&6bri~mcIyl(($Q&)EWmPJ7=0eJ+rrffl8H=<VSmiZUQWWB5pU7*xd_`8*Jk!vk
zPI|wBKDE}@4(HS{-%jXP&-hM0X_K>n{m#B&-?Jr_Wm9yCzQHQxETwdih3GlvrK_}#
z=IOKSC_B3z+;vD+v#tAJZzl8@rXPbwHKf!KP6$xx!3<QmZglY$ODnf@um=kKPpTBG
zBUzcpBa6fTV{zoa7Du>6o1vge&!4s$3fqI<LAOCIglpkXnUD>eu7PEqJ9xgn(ZyEg
z>W5pqN6c6Nn+<Osa?#31t3{@3TKyn&6pfvk&<-Qd#m4|3_sh$bCxkW{P^Emz5}@0H
z&v{YS=8p=v+YjbM0U|$mZ#|vo)lZc?>PuKt!m1LQODL9b9X6HR?2o5Dud;v`kcW)@
z2Gw8|Bchii$pO4*YAO2_#DrDhOVj`#>ibggU07BY0XWbh+Mjc4d%DPO{azaW08wj5
z+to#!+Vwc8!1d{1P+N(U8tBvfBce@{M@XwSJVL6ZI%V%zWHhFoib6Yd>x(n6EAYX*
zgoQR_)1-Onv=!O52Y-x{P_um@^&xnLU!Mm{=iu}P>EgsyR2-aCVQd7w8)Pph{rm__
zaI(KhnmF+l3D)HWY1MQF=b=D_UQNoQUD#y6ujE3?MTF_Bp;-K;-uo>I8xV4F*@^V8
z@1bUNW1h6LCy>uI(-%2@Jeg3&#-~oihT_p=!WqCo=p^>r+N(E7rLnn%Zzti??`v<}
zBn^iuoB6g0cD~)2hz`f5;?d!FM2U{S9#@|6_#12oFhI4Q#hybidHl-ZmiE_r!tD)x
z)+R1jSI_p0kB%#e$V5Cgmbi3_l+Oq=c!9v+e*6v)K>-M7Q6nsXf^<O|kac-lZlbp-
zSZC(dEoRou)8^vkUA_DukD&BI+AP{*ZKb!=F5E?4{lOj754GjH=pPIKy2B@5LHa;9
zxxBMlOaU3Vffy74xkXYWh!=z~`WYo*CvdZR*#Q7^-3XBZk(Y`e@ls9He;Xw>q@|9L
J{G|y}{x9CKA$0%%

diff --git a/ippisite/ippidb/migrations/0005_auto_20170327_1301.py b/ippisite/ippidb/migrations/0005_auto_20170327_1301.py
new file mode 100644
index 00000000..0bab3b53
--- /dev/null
+++ b/ippisite/ippidb/migrations/0005_auto_20170327_1301.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.5 on 2017-03-27 13:01
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('ippidb', '0004_auto_20170314_1449'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='CellLine',
+            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')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='TestActivityDescription',
+            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')),
+            ],
+        ),
+        migrations.AlterModelOptions(
+            name='mddrcompoundactivityclass',
+            options={'verbose_name_plural': 'MDDR compound activity classes'},
+        ),
+        migrations.AlterModelOptions(
+            name='mddrcompoundimport',
+            options={'verbose_name_plural': 'MDDR compound imports'},
+        ),
+        migrations.AlterModelOptions(
+            name='mddrsimilarity',
+            options={'verbose_name_plural': 'MDDR similarities'},
+        ),
+        migrations.AlterField(
+            model_name='taxonomy',
+            name='taxonomy_id',
+            field=models.DecimalField(decimal_places=0, max_digits=9, unique=True, verbose_name='NCBI TaxID'),
+        ),
+    ]
diff --git a/ippisite/ippidb/migrations/0006_auto_20170327_1439.py b/ippisite/ippidb/migrations/0006_auto_20170327_1439.py
new file mode 100644
index 00000000..aaa0b992
--- /dev/null
+++ b/ippisite/ippidb/migrations/0006_auto_20170327_1439.py
@@ -0,0 +1,117 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.5 on 2017-03-27 14:39
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('ippidb', '0005_auto_20170327_1301'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='ActivityType',
+            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')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='AdministrationMode',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(blank=True, max_length=20, null=True, verbose_name='Administration mode')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='CmpdAction',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('activation_mode', models.CharField(choices=[('O', 'Orthosteric'), ('A', 'Allosteric'), ('U', 'Unspecified')], max_length=1, verbose_name='Activation mode')),
+                ('modulation_type', models.CharField(choices=[('I', 'Inhibition'), ('S', 'Stabilization')], max_length=1, verbose_name='Modulation type')),
+                ('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')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='CompoundActivityResult',
+            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')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='CompoundCytotoxicityResult',
+            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')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='CompoundPKResult',
+            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')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='TestCytotoxDescription',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('test_name', models.CharField(max_length=100, verbose_name='Cytotoxicity test name')),
+                ('compound_concentration', models.DecimalField(blank=True, decimal_places=3, max_digits=7, null=True, verbose_name='Compound concentration in μM')),
+                ('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')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='TestPKDescription',
+            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')),
+                ('dose', models.DecimalField(blank=True, decimal_places=4, max_digits=7, 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.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ippidb.AdministrationMode')),
+                ('biblio_id', 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')),
+            ],
+        ),
+        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')]),
+        ),
+    ]
diff --git a/ippisite/ippidb/models.py b/ippisite/ippidb/models.py
index 5a5abf1b..4ce93714 100644
--- a/ippisite/ippidb/models.py
+++ b/ippisite/ippidb/models.py
@@ -245,187 +245,111 @@ class MDDRSimilarity(models.Model):
         unique_together = (('canonical_smile_ippidb', 'canonical_smile_mddr'),)
         verbose_name_plural = "MDDR similarities"
 
-"""
-class TestActivityDescription(models.Model):
-    complex_id = models.ForeignKey(Complex)
-    biblio_id = models.ForeignKey(Biblio)
-    idppi = models.ForeignKey(Ppi, models.DO_NOTHING, ='IDPPI', blank=True, null=True)  
-    testnameactivity = models.CharField(='TestNameActivity', max_length=40)  
-    isprimary = models.CharField(='IsPrimary', max_length=1)  
-    protboundconstruct = models.CharField(='ProtBoundConstruct', max_length=11)  
-    testtype = models.CharField(='TestType', max_length=5)  
-    testmodulationtype = models.CharField(='TestModulationType', max_length=13)  
-    nbactivescmpdstot = models.IntegerField(='NbActivesCmpdsTot')  
-    conccmpds = models.DecimalField(='ConcCmpds', max_digits=7, decimal_places=3, blank=True, null=True)  
-    protocol = models.TextField(='Protocol', blank=True, null=True)  
-    concproteinbound = models.DecimalField(='ConcProteinBound', max_digits=7, decimal_places=3, blank=True, null=True)  
-    concprotein2 = models.DecimalField(='ConcProtein2', max_digits=7, decimal_places=3, blank=True, null=True)  
-    controlepos = models.CharField(='ControlePos', max_length=50, blank=True, null=True)  
-    controleneg = models.CharField(='ControleNeg', max_length=50, blank=True, null=True)  
-    cellline = models.CharField(='CellLine', max_length=50, blank=True, null=True)  
-    pepseq = models.CharField(='PepSeq', max_length=100, blank=True, null=True)  
-    marker = models.CharField(='Marker', max_length=35, blank=True, null=True)  
-
-
-
-
-
-
-class Actionevidencetest(models.Model):
-    idcmpdaction = models.ForeignKey('Cmpdaction', models.DO_NOTHING, ='IDCmpdAction')  
-    idtestactivity = models.ForeignKey('Testactivitydescription', models.DO_NOTHING, ='IDTestActivity')  
-    nbcopycompound = models.IntegerField(='NbCopyCompound', blank=True, null=True)  
+class CellLine(models.Model):
+    name = models.CharField('Name', max_length=50, unique=True)
 
-    class Meta:
-#        managed = False
-        db_table = 'actionEvidenceTest'
-        unique_together = (('idcmpdaction', 'idtestactivity'),)
-
-
-class Actionevidencexray(models.Model):
-    idcmpdaction = models.ForeignKey('Cmpdaction', models.DO_NOTHING, ='IDCmpdAction')  
-    codepdb = models.CharField(='CodePDB', max_length=4)  
-    nbcopycompound = models.IntegerField(='NbCopyCompound')  
-    idbindingsite = models.ForeignKey('Bindingsite', models.DO_NOTHING, ='IDBindingSite')  
-    idbiblio = models.ForeignKey('Biblio', models.DO_NOTHING, ='IDBiblio', blank=True, null=True)  
+class TestActivityDescription(models.Model):
+    TEST_TYPES = (
+        ('BIOCH', 'Biochemical assay'),
+        ('CELL', 'Cellular assay')
+    )
+    TEST_MODULATION_TYPES = (
+        ('B', 'Binding'),
+        ('I', 'Inhibition'),
+        ('S', 'Stabilization')
+    )
+    complex_id = models.ForeignKey(ProteinDomainBoundComplex)
+    biblio_id = models.ForeignKey(Bibliography)
+    ppi_id = models.ForeignKey(Ppi, blank=True, null=True)  
+    test_name = models.CharField('Test name', max_length=100)  
+    test_type = models.CharField('Test type', max_length=5, choices=TEST_TYPES)
+    test_modulation_type = models.CharField('Test modulation type', max_length=1, choices=TEST_MODULATION_TYPES)
+    nb_active_compounds = models.IntegerField('Total number of active compounds')  
+    cell_line = models.ForeignKey(CellLine)
+
+class ActivityType(models.Model):
+    name = models.CharField('Name', max_length=50, unique=True)
+
+class CompoundActivityResult(models.Model):
+    compound_id = models.ForeignKey(Compound)  
+    test_activity_description_id = models.ForeignKey(TestActivityDescription)  
+    activity_type_id = models.ForeignKey(ActivityType)  
+    activity = models.DecimalField('Activity', max_digits=12, decimal_places=10)  
 
     class Meta:
-#        managed = False
-        db_table = 'actionEvidenceXRay'
-        unique_together = (('idcmpdaction', 'codepdb'),)
+        unique_together = (('compound_id', 'test_activity_description_id', 'activity_type_id'),)
 
+class TestCytotoxDescription(models.Model):
+    biblio_id = models.ForeignKey(Bibliography)  
+    test_name = models.CharField('Cytotoxicity test name', max_length=100)  
+    cell_line = models.ForeignKey(CellLine)
+    compound_concentration = models.DecimalField('Compound concentration in μM', max_digits=7, decimal_places=3, blank=True, null=True)  
 
-class Cmpdaction(models.Model):
-    idcmpdaction = models.AutoField(='IDCmpdAction', primary_key=True)  
-    idcomplexebound = models.ForeignKey('Complexe', models.DO_NOTHING, ='IDComplexeBound')  
-    idcompound = models.ForeignKey('Compound', models.DO_NOTHING, ='IDCompound')  
-    activationmode = models.CharField(='ActivationMode', max_length=11)  
-    modulationtype = models.CharField(='ModulationType', max_length=10)  
+class CompoundCytotoxicityResult(models.Model):
+    compound_id = models.ForeignKey(Compound)  
+    test_cytotoxicity_description_id = models.ForeignKey(TestCytotoxDescription)
+    toxicity = models.BooleanField('Toxicity', default=False)
 
     class Meta:
-#        managed = False
-        db_table = 'cmpdAction'
-
-
-class Cmpdactiveresult(models.Model):
-    idcompound = models.ForeignKey('Compound', models.DO_NOTHING, ='IDCompound')  
-    idtestactivity = models.ForeignKey('Testactivitydescription', models.DO_NOTHING, ='IDTestActivity')  
-    activitytype = models.CharField(='ActivityType', max_length=5)  
-    activity = models.DecimalField(='Activity', max_digits=4, decimal_places=2)  
-    pourcentinhib = models.IntegerField(='PourcentInhib', blank=True, null=True)  
+        unique_together = (('compound_id', 'test_cytotoxicity_description_id'),)
+
+class AdministrationMode(models.Model):
+    name = models.CharField('Administration mode', max_length=20, blank=True, null=True)
+
+class TestPKDescription(models.Model):
+    biblio_id = models.ForeignKey(Bibliography)  
+    test_name = models.CharField('Pharmacokinetic test name', max_length=100)  
+    organism = models.ForeignKey(Taxonomy)
+    administration_mode = models.ForeignKey(AdministrationMode, blank=True, null=True)  
+    dose = models.DecimalField('Dose in mg/kg', max_digits=7, decimal_places=4, blank=True, null=True)  
+    dose_interval = models.IntegerField('Dose interval, in hours', blank=True, null=True)  
+
+class CompoundPKResult(models.Model):
+    compound_id = models.ForeignKey(Compound)  
+    test_pk_description_id = models.ForeignKey(TestPKDescription)
+    tolerated = models.NullBooleanField('Tolerated', null=True)
+    auc = models.IntegerField('Area under curve (ng.mL-1.hr)', blank=True, null=True)  
+    clearance = models.DecimalField('Clearance (mL/hr)', max_digits=7, decimal_places=3, blank=True, null=True)  
+    cmax = models.DecimalField('Maximal concentration (ng/mL)', max_digits=7, decimal_places=3, blank=True, null=True)  
+    oral_bioavailability = models.IntegerField('Oral Bioavailability (%F)', blank=True, null=True)  
+    t_demi = models.IntegerField('t½', blank=True, null=True)  
+    t_max = models.IntegerField('tmax', blank=True, null=True)  
+    voldistribution = models.DecimalField('Volume distribution (Vd)', max_digits=5, decimal_places=2, blank=True, null=True)  
 
     class Meta:
-#        managed = False
-        db_table = 'cmpdActiveResult'
-        unique_together = (('idcompound', 'idtestactivity', 'activitytype'),)
-
+        unique_together = (('compound_id', 'test_pk_description_id'),)
 
-class Cmpdcytotoxresult(models.Model):
-    idcompound = models.ForeignKey('Compound', models.DO_NOTHING, ='IDCompound')  
-    idtestcytotox = models.ForeignKey('Testcytotoxdescription', models.DO_NOTHING, ='IDTestCytotox')  
-    toxicity = models.CharField(='Toxicity', max_length=1)  
-
-    class Meta:
-#        managed = False
-        db_table = 'cmpdCytotoxResult'
-        unique_together = (('idcompound', 'idtestcytotox'),)
 
+class CmpdAction(models.Model):
+    ACTIVATION_MODES = (
+        ('O', 'Orthosteric'),
+        ('A', 'Allosteric'),
+        ('U', 'Unspecified')
+    )
+    MODULATION_TYPES = (
+        ('I', 'Inhibition'),
+        ('S', 'Stabilization')
+    )
+    complex_id = models.ForeignKey(ProteinDomainBoundComplex)
+    compound_id = models.ForeignKey(Compound)  
+    activation_mode = models.CharField('Activation mode', max_length=1, choices=ACTIVATION_MODES)  
+    modulation_type = models.CharField('Modulation type', max_length=1, choices=MODULATION_TYPES)  
 
-class Cmpdinactiveresult(models.Model):
+""""
+class Actionevidencetest(models.Model):
+    idcmpdaction = models.ForeignKey('Cmpdaction', models.DO_NOTHING, ='IDCmpdAction')  
     idtestactivity = models.ForeignKey('Testactivitydescription', models.DO_NOTHING, ='IDTestActivity')  
-    idcompound = models.ForeignKey('Compound', models.DO_NOTHING, ='IDCompound')  
-    pourcentinhib = models.IntegerField(='PourcentInhib', blank=True, null=True)  
-
-    class Meta:
-#        managed = False
-        db_table = 'cmpdInactiveResult'
-        unique_together = (('idtestactivity', 'idcompound'),)
-
-
-class Cmpdpkresult(models.Model):
-    idcompound = models.ForeignKey('Compound', models.DO_NOTHING, ='IDCompound')  
-    idtestpk = models.ForeignKey('Testpkdescription', models.DO_NOTHING, ='IDTestPK')  
-    tolerated = models.CharField(='Tolerated', max_length=1)  
-    auc = models.IntegerField(='AUC', blank=True, null=True)  
-    clearance = models.DecimalField(='Clearance', max_digits=7, decimal_places=3, blank=True, null=True)  
-    cmax = models.DecimalField(='Cmax', max_digits=7, decimal_places=3, blank=True, null=True)  
-    oralbioavailability = models.IntegerField(='OralBioavailability', blank=True, null=True)  
-    tdemi = models.IntegerField(='Tdemi', blank=True, null=True)  
-    tmax = models.IntegerField(='Tmax', blank=True, null=True)  
-    voldistribution = models.DecimalField(='VolDistribution', max_digits=5, decimal_places=2, blank=True, null=True)  
-
-    class Meta:
-#        managed = False
-        db_table = 'cmpdPKResult'
-        unique_together = (('idcompound', 'idtestpk'),)
-
-
-
-    class Meta:
-#        managed = False
-        db_table = 'disease'
-        unique_together = (('idppi', 'disease'),)
-
-
-class DjangoMigrations(models.Model):
-    app = models.CharField(max_length=255)
-    name = models.CharField(max_length=255)
-    applied = models.DateTimeField()
-
-    class Meta:
-#        managed = False
-        db_table = 'django_migrations'
-
-
-class Domain(models.Model):
-    iddomain = models.AutoField(='IDDomain', primary_key=True)  
-    pfamid = models.CharField(='PfamID', max_length=20)  
-    pfamnumaccession = models.CharField(='PfamNumAccession', unique=True, max_length=10)  
-    domaindescription = models.CharField(='DomainDescription', max_length=100)  
-    domainfamily = models.CharField(='DomainFamily', max_length=25)  
-
-    class Meta:
-#        managed = False
-        db_table = 'domain'
-
-class Mddrsimilarity(models.Model):
-    idcompound = models.ForeignKey(Compound, models.DO_NOTHING, ='IDCompound')  
-    idmddrcompound = models.ForeignKey(Mddrcompound, models.DO_NOTHING, ='IDMDDRCompound')  
-    versionmddr = models.CharField(='VersionMDDR', max_length=7)  
-    tanimoto = models.DecimalField(='Tanimoto', max_digits=6, decimal_places=5)  
+    nbcopycompound = models.IntegerField(='NbCopyCompound', blank=True, null=True)  
 
     class Meta:
 #        managed = False
-        db_table = 'mDDRSimilarity'
-        unique_together = (('idcompound', 'idmddrcompound', 'versionmddr'),)
+        db_table = 'actionEvidenceTest'
+        unique_together = (('idcmpdaction', 'idtestactivity'),)
 
 
-class Ppi(models.Model):
-    idppi = models.AutoField(='IDPPI', primary_key=True)  
-    idcomplexe1 = models.ForeignKey(Complexe, models.DO_NOTHING, ='IDComplexe1', related_name='cplx_id_1')  
-    idcomplexe2 = models.ForeignKey(Complexe, models.DO_NOTHING, ='IDComplexe2', related_name='cplx_id_2')  
-    idbindingsite1 = models.ForeignKey(Bindingsite, models.DO_NOTHING, ='IDBindingSite1', related_name='bs_id_1') 
-    idbindingsite2 = models.ForeignKey(Bindingsite, models.DO_NOTHING, ='IDBindingSite2', related_name='bs_id_2')  
-    family = models.CharField(='Family', max_length=25)  
 
-    class Meta:
-#        managed = False
-        db_table = 'ppi'
-        unique_together = (('idcomplexe1', 'idcomplexe2', 'idbindingsite1', 'idbindingsite2'),)
 
 
-class Protein(models.Model):
-    idprotein = models.AutoField(='IDProtein', primary_key=True)  
-    numuniprot = models.CharField(='NumUniprot', unique=True, max_length=10)  
-    protnamelg = models.CharField(='ProtNameLg', max_length=75)  
-    protnamesh = models.CharField(='ProtNameSh', max_length=50)  
-    protalias = models.CharField(='ProtAlias', unique=True, max_length=30)  
-    protnamesp = models.CharField(='ProtNameSp', max_length=30)  
-    organism = models.CharField(='Organism', max_length=80)  
-
-    class Meta:
-#        managed = False
-        db_table = 'protein'
 
 
 class Refcmpdbiblio(models.Model):
@@ -438,46 +362,4 @@ class Refcmpdbiblio(models.Model):
         db_table = 'refCmpdBiblio'
         unique_together = (('idcompound', 'idbiblio'),)
 
-
-class Refproteinfonction(models.Model):
-    idprotein = models.ForeignKey(Protein, models.DO_NOTHING, ='IDProtein')  
-    protfonctionsp = models.CharField(='ProtFonctionSP', max_length=200)  
-
-    class Meta:
-#        managed = False
-        db_table = 'refProteinFonction'
-        unique_together = (('protfonctionsp', 'idprotein'),)
-
-
-
-    class Meta:
-#        managed = False
-        db_table = 'testActivityDescription'
-
-
-class Testcytotoxdescription(models.Model):
-    idtestcytotox = models.AutoField(='IDTestCytotox', primary_key=True)  
-    idbiblio = models.ForeignKey(Biblio, models.DO_NOTHING, ='IDBiblio')  
-    testnamecytotox = models.CharField(='TestNameCytotox', max_length=40)  
-    cellline = models.CharField(='CellLine', max_length=50)  
-    conccmpd = models.DecimalField(='ConcCmpd', max_digits=7, decimal_places=3, blank=True, null=True)  
-
-    class Meta:
-#        managed = False
-        db_table = 'testCytotoxDescription'
-
-
-class Testpkdescription(models.Model):
-    idtestpk = models.AutoField(='IDTestPK', primary_key=True)  
-    idbiblio = models.ForeignKey(Biblio, models.DO_NOTHING, ='IDBiblio')  
-    testnamepk = models.CharField(='TestNamePK', max_length=40)  
-    animal = models.CharField(='Animal', max_length=100)  
-    administrationmode = models.CharField(='AdministrationMode', max_length=2, blank=True, null=True)  
-    concentration = models.DecimalField(='Concentration', max_digits=7, decimal_places=3, blank=True, null=True)  
-    dose = models.DecimalField(='Dose', max_digits=7, decimal_places=2, blank=True, null=True)  
-    doseinterval = models.IntegerField(='DoseInterval', blank=True, null=True)  
-
-    class Meta:
-#        managed = False
-        db_table = 'testPKDescription'
 """
-- 
GitLab