]> Softwares of Agnibho - pdosage.git/commitdiff
Show dosage rate
authorAgnibho Mondal <mail@agnibho.com>
Sun, 11 Dec 2016 09:39:16 +0000 (15:09 +0530)
committerAgnibho Mondal <mail@agnibho.com>
Sun, 11 Dec 2016 09:39:16 +0000 (15:09 +0530)
27 files changed:
index.html
src/AboutView.vue
src/DataInput.vue
src/Dosage.js [new file with mode: 0644]
src/DrugView.vue
src/data/aciclovir.json
src/data/amikacin.json
src/data/amoxycillin_clavulinic_acid.json
src/data/cefixime.json
src/data/ceftriaxone.json
src/data/cefuroxime.json
src/data/diazepam.json [new file with mode: 0644]
src/data/domperidone.json
src/data/furosemide.json
src/data/hydroxyzine.json
src/data/levosalbutamol.json
src/data/ofloxacin.json
src/data/ondansetron.json
src/data/paracetamol.json
src/data/phenytoin.json [new file with mode: 0644]
src/data/prednisolone.json
src/data/ranitidine.json
src/data/valproate.json [new file with mode: 0644]
src/data/zinc.json
src/dosage.js [deleted file]
src/main.js
src/routine.js

index 517db77f07d30e97e77f044fd50a1fd658e8086b..b6a120322b5b26e73401a8d7e21c1031ec6aa6b6 100755 (executable)
@@ -68,7 +68,7 @@
            <div class="text-primary">
                <div class="jumbotron">
                    <h1>PDosage</h1>
-                   <h2>Pediatric Dose Calculator</h2>
+                   <h2>Drug Dose Calculator</h2>
                </div>
            </div>
            <div class="row" id="app">
index 72dc6c6cda6dcb6b2fca8bf6fcf018c765a7cd80..82994b18fca7883a04bbdcabc6c7f2c4954531b5 100644 (file)
        <div class="col-md-6 col-md-offset-3">
            <div class="panel panel-default">
                <div class="panel-heading">
-                   <h3>About PDosage</h3>
+                   <h3>About PDosage <span class="version"></span></h3>
                </div>
                <div class="panel-body">
                    <p>PDosage is a web application for calculating dosage of some commonly used drugs. Although it's primarily designed for the practice of Pediatrics, it also provides adult doses of drugs, making it useful for other disciplines too.</p>
                    <p>PDosage is written in Javascript.</p>
+                   <p>App Version: <span class="version"></span></p>
+                   <p>Data version: <span class="data-ver"></span></p>
                    <p>Copyright &copy; <span class="copyright" data-start="2016">2016</span> Agnibho Mondal</p>
                    <p>E-mail: mail@agnibho.com</p>
                </div>
index 9ac78aafb6a2cbb8ec99636ac0dfd052338e4782..4b21cf2d8ea665adb5531425b5655aa352fe713e 100644 (file)
      props:["patient"],
      data:function(){
         return{
-            inWt: "",
-            inAgeY: "",
-            inAgeM: "",
-            inAgeD: ""
+            inWt: this.patient.wt,
+            inAgeY: this.patient.age.y,
+            inAgeM: this.patient.age.m,
+            inAgeD: this.patient.age.d
         }
      },
      watch: {
diff --git a/src/Dosage.js b/src/Dosage.js
new file mode 100644 (file)
index 0000000..672ea52
--- /dev/null
@@ -0,0 +1,220 @@
+/**********************************************************************
+ * Title: PDosage
+ * Description: Pediatric Calculator
+ * Author: Agnibho Mondal
+ * Website: http://code.agnibho.com
+ **********************************************************************
+   Copyright (c) 2016 Agnibho Mondal
+   All rights reserved
+ **********************************************************************
+   This file is part of PDosage.
+   
+   PDosage is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   PDosage is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with PDosage. If not, see <http://www.gnu.org/licenses/>.
+ **********************************************************************/
+
+export default function Dosage(data){
+
+    Object.defineProperty(data, "prop", {
+       writable: false
+    });
+
+    this.get=function(){
+       return data;
+    }
+
+    this.listDrugs=function(){
+       var list=data.map(function(obj){
+           return obj.name;
+       });
+       return list;
+    }
+
+    this.getDrug=function(name, patient){
+       if(this.listDrugs().indexOf(name)==-1){
+           return null;
+       }
+       var drug=JSON.parse(JSON.stringify(data.filter(extract)[0]));
+       function extract(obj){
+           return (obj.name == name);
+       }
+       for(var i=0; i<drug.form.length; i++){
+           drug.form[i]=calculateDose(drug.form[i], patient);
+       }
+       return drug;
+    }
+
+    function calculateDose(form, patient){
+       while(form.hasOwnProperty("range")){
+           var res=isolateRange(form, patient);
+           delete form.range;
+           if(res!=null){
+               if(res.hasOwnProperty("range")){
+                   form.range=res.range;
+               }
+               else{
+                   form.dose=res.dose;
+               }
+           }
+       }
+       if(form.dose){
+           form.dose=[].concat(form.dose);
+           for(var i=0; i<form.dose.length; i++){
+               if(form.dose[i].hasOwnProperty("val")){
+                   form.dose[i].val=[].concat(form.dose[i].val);
+               }
+               else if(form.dose[i].hasOwnProperty("perKg")){
+                   form.dose[i].perKg=[].concat(form.dose[i].perKg);
+                   form.dose[i].val=[];
+                   form.dose[i].val[0]=Math.round(parseFloat(form.dose[i].perKg[0])*parseFloat(patient.wt)*100)/100;
+                   form.dose[i].val[1]=Math.round(parseFloat(form.dose[i].perKg[1])*parseFloat(patient.wt)*100)/100;
+                   form.dose[i]=setLimit(form.dose[i]);
+               }
+               else if(form.dose[i].hasOwnProperty("approx")){
+                   form.dose[i].val=[];
+                   form.dose[i].val=findApprox(form.dose[i].approx);
+                   form.dose[i]=setLimit(form.dose[i]);
+               }
+               else if(form.dose[i].hasOwnProperty("eq")){
+                   form.dose[i].eq=[].concat(form.dose[i].eq);
+                   form.dose[i].val=[];
+                   form.dose[i].val[0]=solveEq(form.dose[i].eq[0]);
+                   form.dose[i].val[1]=solveEq(form.dose[i].eq[1]);
+                   form.dose[i]=setLimit(form.dose[i]);
+               }
+               else{
+                   form.dose[i].val=[];
+                   form.dose[i].val[0]=null;
+                   form.dose[i].val[1]=null;
+               }
+           }
+       }
+       return form;
+
+       function isolateRange(form, patient){
+           var min=0;
+           var max=0;
+           var type="";
+           if(patient.age.y===null && patient.age.m===null && patient.age.d===null){
+               return null;
+           }
+           var pDays=patient.age.y*365+patient.age.m*30+patient.age.d;
+           for(var i=0; i<form.range.length; i++){
+               if(form.range[i].hasOwnProperty("min")){
+                   if(form.range[i].min.indexOf("kg")!=-1){
+                       min=form.range[i].min.slice(0, str.indexOf("kg"));
+                       type="wt";
+                   }
+                   else{
+                       min=strToDays(form.range[i].min);
+                       type="age";
+                   }
+               }
+               else{
+                   min=0;
+               }
+               if(form.range[i].hasOwnProperty("max")){
+                   if(form.range[i].max.indexOf("kg")!=-1){
+                       max=form.range[i].max.slice(0, str.indexOf("kg"));
+                       type="wt";
+                   }
+                   else{
+                       max=strToDays(form.range[i].max);
+                       type="age";
+                   }
+               }
+               else{
+                   max=Infinity;
+               }
+               if(type=="wt"){
+                   if(patient.wt>=min && patient.wt<max){
+                       return form.range[i];
+                   }
+               }
+               else if(type=="age"){
+                   if(pDays>=min && pDays<max){
+                       return form.range[i];
+                   }
+               }
+           }
+           return null;
+
+           function strToDays(str){
+               var age={y: 0, m: 0, d: 0};
+               var days=0;
+               str=str.replace(/\s+/g, "");
+               if(str.indexOf("y")!=-1){
+                   age.y=str.slice(0, str.indexOf("y"));
+                   str=str.slice(str.indexOf("y", -1));
+               }
+               if(str.indexOf("m")!=-1){
+                   age.m=str.slice(0, str.indexOf("m"));
+                   str=str.slice(str.indexOf("m", -1));
+               }
+               if(str.indexOf("d")!=-1){
+                   age.d=str.slice(0, str.indexOf("d"));
+                   str=str.slice(str.indexOf("d", -1));
+               }
+               days=age.y*365+age.m*30+age.d;
+               return days;
+           }
+       }
+
+       function findApprox(arr){
+           var ret=[];
+           arr[0]=arr[0]/2;
+           for(var i=1; i<arr.length; i++){
+               arr[i]=solveEq(arr[i]);
+               ret[i-1]=Math.round(arr[i]/arr[0])/2;
+           }
+           if(!ret[0] || (ret[0]==ret[1])){
+               ret[0]=ret[1];
+               ret[1]=null;
+           }
+           return ret;
+       }
+
+       function solveEq(str){
+           var bw=parseFloat(patient.wt);
+           var ageY=patient.age.y;
+           var ageM=ageY*12+patient.age.m;
+           var ageD=ageM*30+patient.age.d;
+           var ret=eval(str);
+           ret=Math.round(ret*100)/100;
+           return ret;
+       }
+
+       function setLimit(dose){
+           if(dose.adult && dose.val){
+               if(dose.val[0]>dose.adult[0]){
+                   dose.val[0]=dose.adult[0];
+               }
+               if(dose.val[1]>dose.adult[1]){
+                   dose.val[1]=dose.adult[1];
+               }
+           }
+           if(dose.limit && dose.val){
+               if(dose.val[0]>dose.limit[0]){
+                   dose.val[0]=dose.limit[0];
+               }
+               if(dose.val[1]>dose.limit[1]){
+                   dose.val[1]=dose.limit[1];
+               }
+           }
+           if(dose.val[1]==dose.val[0]){
+               dose.val[1]=null;
+           }
+           return dose;
+       }
+    }
+}
index 3ba592829660d333edbd6ace663b67f84a52196a..6bcf5cedf2201d06d1fe977e023041f80446c221 100644 (file)
                                            <template v-for="i in item.dose">
                                                <template v-if="i.val[0]">
                                                    <tr>
-                                                       <td class="active">Dose:</td>
-                                                       <td>{{i.val[0]}}<span v-if="i.val[1]"> - {{i.val[1]}}</span> {{i.unit}} </td>
+                                                       <td class="active" rowspan="2">Dose:</td>
+                                                       <td>{{i.val[0]}}<span v-if="i.val[1]"> - {{i.val[1]}}</span> {{i.unit}}</td>
                                                        <td><span v-if="i.txt">{{i.txt}}</span><span v-else>per dose</span></td>
-                                                       <td v-if="i.comment">{{i.comment}}</td>
+                                                   </tr>
+                                                   <tr>
+                                                       <td><template v-if="i.perKg && (!i.limit || i.limit[0]!=i.val[0] || i.limit[1]!=i.val[1])">
+                                                           <template v-if="i.perKg">
+                                                               <span v-if="i.perKg[0]">( {{i.perKg[0]}}<span v-if="i.perKg[1]">-{{i.perKg[1]}}</span> {{i.unit}}/kg</span>
+                                                               <template v-if="i.adult">
+                                                                   ; Adult: {{i.adult[0]}}<span v-if="i.adult[1] && i.adult[1]!=i.adult[0]">-{{i.adult[1]}}</span> {{i.unit}}
+                                                               </template>
+                                                               <template v-if="i.limit">
+                                                                   ; Limit: {{i.limit[0]}}<span v-if="i.limit[1] && i.limit[1]!=i.limit[0]">-{{i.limit[1]}}</span> {{i.unit}}
+                                                               </template>
+                                                               )
+                                                           </template>
+                                                       </td>
+                                                       <td><span v-if="i.comment">{{i.comment}}</span></td>
                                                    </tr>
                                                </template>
                                            </template>
index e854d8324668847c55f76fa16cdeb40af729475b..770af2d94accc043585e146b0f48ac0a4c19c7ff 100644 (file)
@@ -9,7 +9,7 @@
                    "min": "2y",
                    "dose": {
                        "perKg": 80,
-                       "limit": [
+                       "adult": [
                            3200,
                            3200
                        ],
@@ -28,7 +28,7 @@
                    "min": "2y",
                    "dose": {
                        "perKg": 80,
-                       "limit": [
+                       "adult": [
                            3200,
                            3200
                        ],
index 8c3e6e6e29f650a737ae2188649c1f5999952b98..f3c9ce232fec1a37866f3cd206118196415eac3e 100644 (file)
@@ -9,7 +9,7 @@
                    15,
                    20
                ],
-               "limit": [
+               "adult": [
                    1500,
                    1500
                ],
@@ -27,7 +27,7 @@
                    "15*bw",
                    "20*bw"
                ],
-               "limit": [
+               "adult": [
                    15,
                    15
                ],
@@ -45,7 +45,7 @@
                    "15*bw",
                    "20*bw"
                ],
-               "limit": [
+               "adult": [
                    6,
                    6
                ],
@@ -63,7 +63,7 @@
                    "15*bw",
                    "20*bw"
                ],
-               "limit": [
+               "adult": [
                    3,
                    3
                ],
index 87e319b8d7ca891699aaf19b91ad481e73f4914a..32f1e4d23c3e754284d5bc495cef8a3cbb2c9975 100644 (file)
@@ -9,7 +9,7 @@
                    25,
                    50
                ],
-               "limit": [
+               "adult": [
                    250,
                    500
                ],
@@ -25,7 +25,7 @@
                    50,
                    100
                ],
-               "limit": [
+               "adult": [
                    1200,
                    1200
                ],
@@ -42,7 +42,7 @@
                    "25*bw",
                    "50*bw"
                ],
-               "limit": [
+               "adult": [
                    1,
                    2
                ],
@@ -59,7 +59,7 @@
                    "25*bw",
                    "50*bw"
                ],
-               "limit": [
+               "adult": [
                    0.5,
                    1
                ],
@@ -75,7 +75,7 @@
                    1,
                    2
                ],
-               "limit": [
+               "adult": [
                    10,
                    20
                ],
@@ -92,7 +92,7 @@
                    "50*bw",
                    "100*bw"
                ],
-               "limit": [
+               "adult": [
                    8,
                    8
                ],
                    "50*bw",
                    "100*bw"
                ],
-               "limit": [
+               "adult": [
                    4,
                    4
                ],
                    "50*bw",
                    "100*bw"
                ],
-               "limit": [
+               "adult": [
                    2,
                    2
                ],
                    "50*bw",
                    "100*bw"
                ],
-               "limit": [
+               "adult": [
                    1,
                    1
                ],
index 21e05ff64b23ec55d09bb0ed7026fa49bc12d87b..58f6006c000954bb831629ec4af030adf191e1c8 100644 (file)
@@ -6,7 +6,7 @@
            "gen": true,
            "dose": {
                "perKg": 8,
-               "limit": [
+               "adult": [
                    400,
                    400
                ],
@@ -19,7 +19,7 @@
            "gen": true,
            "dose": {
                "perKg": 20,
-               "limit": [
+               "adult": [
                    400,
                    400
                ],
@@ -36,7 +36,7 @@
                    50,
                    "8*bw"
                ],
-               "limit": [
+               "adult": [
                    8,
                    8
                ],
@@ -52,7 +52,7 @@
                    100,
                    "8*bw"
                ],
-               "limit": [
+               "adult": [
                    4,
                    4
                ],
@@ -68,7 +68,7 @@
                    200,
                    "8*bw"
                ],
-               "limit": [
+               "adult": [
                    2,
                    2
                ],
@@ -84,7 +84,7 @@
                    400,
                    "8*bw"
                ],
-               "limit": [
+               "adult": [
                    1,
                    1
                ],
@@ -97,7 +97,7 @@
            "content": "100mg/5ml",
            "dose": {
                "perKg": 0.4,
-               "limit": [
+               "adult": [
                    20,
                    20
                ],
index 39bcb207c45c417f88f0a179a265418f692b1b86..38e58edc14d7ae0ba7923f7d7b89f33318ab8752 100644 (file)
@@ -9,7 +9,7 @@
                    50,
                    75
                ],
-               "limit": [
+               "adult": [
                    1000,
                    1000
                ],
        },
        {
            "mode": "Inj",
+           "gen": true,
            "dose": {
                "perKg": 50,
-               "limit": [
+               "adult": [
                    1000,
                    1000
                ],
@@ -32,6 +33,7 @@
        },
        {
            "mode": "Inj",
+           "gen": true,
            "range": [
                {
                    "max": "1y",
@@ -40,7 +42,7 @@
                            25,
                            50
                        ],
-                       "limit": [
+                       "adult": [
                            125,
                            125
                        ],
        },
        {
            "mode": "Inj",
+           "gen": true,
            "dose": {
                "val": 125,
                "unit": "mg",
                "txt": "single IM",
                "comment": "prophylaxis for N. meningitidis."
            }
+       },
+       {
+           "mode": "Inj",
+           "content": "125mg",
+           "dose": {
+               "approx": [
+                   125,
+                   "50*bw",
+                   "75*bw"
+               ],
+               "adult": [
+                   8,
+                   8
+               ],
+               "unit": "vial",
+               "txt": ""
+           }
+       },
+       {
+           "mode": "Inj",
+           "content": "250mg",
+           "dose": {
+               "approx": [
+                   250,
+                   "50*bw",
+                   "75*bw"
+               ],
+               "adult": [
+                   4,
+                   4
+               ],
+               "unit": "vial",
+               "txt": ""
+           }
+       },
+       {
+           "mode": "Inj",
+           "content": "500mg",
+           "dose": {
+               "approx": [
+                   500,
+                   "50*bw",
+                   "75*bw"
+               ],
+               "adult": [
+                   2,
+                   2
+               ],
+               "unit": "vial",
+               "txt": ""
+           }
+       },
+       {
+           "mode": "Inj",
+           "content": "1000mg",
+           "dose": {
+               "approx": [
+                   1000,
+                   "50*bw",
+                   "75*bw"
+               ],
+               "adult": [
+                   1,
+                   1
+               ],
+               "unit": "vial",
+               "txt": ""
+           }
        }
     ]
 }
index 1e9b49b4cf595d00e9bc8ec0ab08c20bd50d442a..4bcf877c37156259a43937ca651a37b2415c654c 100644 (file)
@@ -9,7 +9,7 @@
                    20,
                    30
                ],
-               "limit": [
+               "adult": [
                    500,
                    1000
                ],
@@ -22,7 +22,7 @@
            "gen": true,
            "dose": {
                "perKg": 40,
-               "limit": [
+               "adult": [
                    500,
                    1000
                ],
@@ -39,7 +39,7 @@
                    100,
                    150
                ],
-               "limit": [
+               "adult": [
                    2250,
                    2250
                ],
@@ -71,7 +71,7 @@
                    "20*bw",
                    "30*bw"
                ],
-               "limit": [
+               "adult": [
                    4,
                    8
                ],
@@ -88,7 +88,7 @@
                    "20*bw",
                    "30*bw"
                ],
-               "limit": [
+               "adult": [
                    2,
                    4
                ],
                    "20*bw",
                    "30*bw"
                ],
-               "limit": [
+               "adult": [
                    1,
                    2
                ],
                    0.8,
                    1.2
                ],
-               "limit": [
+               "adult": [
                    20,
                    40
                ],
                    "100*bw",
                    "150*bw"
                ],
-               "limit": [
+               "adult": [
                    2,
                    4
                ],
diff --git a/src/data/diazepam.json b/src/data/diazepam.json
new file mode 100644 (file)
index 0000000..3d792cc
--- /dev/null
@@ -0,0 +1,110 @@
+{
+    "name": "Diazepam",
+    "form": [
+       {
+           "mode": "Inj",
+           "gen": true,
+           "range": [
+               {
+                   "max": "1m",
+                   "dose": [
+                       {
+                           "val": [
+                               1,
+                               5
+                           ],
+                           "unit": "mg",
+                           "txt": "slow IV for Neonatal Tetanus, max 2mg/kg, every 2-4 hrs alternating with Chlorpromazine."
+                       },
+                       {
+                           "perKg": [
+                               15,
+                               40
+                           ],
+                           "unit": "mg",
+                           "txt": "per day continuous infusion for Neonatal Tetanus."
+                       }
+                   ]
+               },
+               {
+                   "min": "1m",
+                   "max": "5y",
+                   "dose": {
+                       "perKg": [
+                           0.2,
+                           0.5
+                       ],
+                       "limit": [
+                           5,
+                           5
+                       ],
+                       "unit": "mg",
+                       "txt": "IV or IM as anti-convulsant, maybe repeated q 3-5 mins"
+                   }
+               },
+               {
+                   "min": "5y",
+                   "dose": {
+                       "perKg": [
+                           0.2,
+                           0.5
+                       ],
+                       "limit": [
+                           10,
+                           10
+                       ],
+                       "unit": "mg",
+                       "txt": "IV or IM as anti-convulsant, maybe repeated q 3-5 mins"
+                   }
+               }
+           ]
+       },
+       {
+           "mode": "Oral/IV/IM",
+           "gen": true,
+           "range": [
+               {
+                   "max": "12y",
+                   "dose": {
+                       "perKg": [
+                           0.1,
+                           0.2
+                       ],
+                       "unit": "mg",
+                       "txt": ""
+                   }
+               },
+               {
+                   "min": "12y",
+                   "dose": [
+                       {
+                           "val": [
+                               2,
+                               10
+                           ],
+                           "unit": "mg",
+                           "txt": "per day for anxiety"
+                       },
+                       {
+                           "val": [
+                               5,
+                               10
+                           ],
+                           "unit": "mg",
+                           "txt": "at bedtime for Insomnia"
+                       },
+                       {
+                           "val": [
+                               10,
+                               30
+                           ],
+                           "unit": "mg",
+                           "txt": "for muscle spasms & premedication"
+                       }
+                   ]
+               }
+           ]
+       }
+    ],
+    "comment": "Available forms- Tab 2mg,5mg,10mg; Syr 2mg/5ml; Inj 10mg/2ml; Rectal sol 2mg/ml,5mg/5ml; Suppository 2.5mg,5mg"
+}
index 798262cdabdfffbf45bdf388bbe3597c85ef9d34..95f9d558f2465aa8ed6ae9d2d016ca07cc26f1a4 100644 (file)
@@ -9,7 +9,7 @@
                    0.2,
                    0.4
                ],
-               "limit": [
+               "adult": [
                    10,
                    20
                ],
@@ -26,7 +26,7 @@
                    "0.2*bw",
                    "0.4*bw"
                ],
-               "limit": [
+               "adult": [
                    1,
                    2
                ],
@@ -43,7 +43,7 @@
                    "0.2*bw",
                    "0.4*bw"
                ],
-               "limit": [
+               "adult": [
                    2,
                    4
                ],
@@ -59,7 +59,7 @@
                    0.2,
                    0.4
                ],
-               "limit": [
+               "adult": [
                    10,
                    20
                ],
@@ -75,7 +75,7 @@
                    0.02,
                    0.04
                ],
-               "limit": [
+               "adult": [
                    1,
                    2
                ],
index 8e6b8f4bf4e509d6a7cc273b644b8ade097c8835..daddab8848f6a028e03cf214693cc483a1eec01c 100644 (file)
@@ -10,7 +10,7 @@
                        2,
                        6
                    ],
-                   "limit": [
+                   "adult": [
                        40,
                        80
                    ],
@@ -22,7 +22,7 @@
                        1,
                        2
                    ],
-                   "limit": [
+                   "adult": [
                        40,
                        80
                    ],
@@ -53,7 +53,7 @@
                    1,
                    3
                ],
-               "limit": [
+               "adult": [
                    20,
                    40
                ],
@@ -70,7 +70,7 @@
                    2,
                    6
                ],
-               "limit": [
+               "adult": [
                    1,
                    2
                ],
@@ -86,7 +86,7 @@
                    0.2,
                    0.6
                ],
-               "limit": [
+               "adult": [
                    4,
                    8
                ],
index 7e7f30595391a241b6003fb63b4caca97260e869..4bad040567f222f621ace7190208233f69669dd7 100644 (file)
@@ -9,7 +9,7 @@
                    "min": "6m",
                    "dose": {
                        "perKg": 2,
-                       "limit": [
+                       "adult": [
                            50,
                            200
                        ],
@@ -30,7 +30,7 @@
                            0.5,
                            1
                        ],
-                       "limit": [
+                       "adult": [
                            50,
                            200
                        ],
@@ -51,7 +51,7 @@
                            10,
                            "2*bw"
                        ],
-                       "limit": [
+                       "adult": [
                            5,
                            20
                        ],
@@ -72,7 +72,7 @@
                            25,
                            "2*bw"
                        ],
-                       "limit": [
+                       "adult": [
                            2,
                            8
                        ],
@@ -90,7 +90,7 @@
                    "min": "6m",
                    "dose": {
                        "perKg": 1,
-                       "limit": [
+                       "adult": [
                            25,
                            100
                        ],
                    "min": "6m",
                    "dose": {
                        "perKg": 0.33,
-                       "limit": [
+                       "adult": [
                            8.33,
                            33.33
                        ],
                            0.02,
                            0.04
                        ],
-                       "limit": [
+                       "adult": [
                            2,
                            8
                        ],
index 72a579cf87400a62622c198f5ad664c82b5888cf..b3479382e1373790f908c8a19ca9da791d1f7e0a 100644 (file)
@@ -9,7 +9,7 @@
                    0.05,
                    0.2
                ],
-               "limit": [
+               "adult": [
                    1,
                    2
                ],
@@ -26,7 +26,7 @@
                    "0.05*bw",
                    "0.2*bw"
                ],
-               "limit": [
+               "adult": [
                    1,
                    2
                ],
@@ -43,7 +43,7 @@
                    "0.05*bw",
                    "0.2*bw"
                ],
-               "limit": [
+               "adult": [
                    1,
                    2
                ],
@@ -59,7 +59,7 @@
                    0.25,
                    1
                ],
-               "limit": [
+               "adult": [
                    5,
                    10
                ],
@@ -75,7 +75,7 @@
                    0.5,
                    2
                ],
-               "limit": [
+               "adult": [
                    10,
                    20
                ],
index 908a55616b234ec1d2b2f6c74a2d6cd7320c1fce..ef030328b7c7adeab7dbe3e6a46fcd49f09696cc 100644 (file)
@@ -6,7 +6,7 @@
            "gen": true,
            "dose": {
                "perKg": 15,
-               "limit": [
+               "adult": [
                    400,
                    800
                ],
@@ -22,7 +22,7 @@
                    5,
                    10
                ],
-               "limit": [
+               "adult": [
                    400,
                    800
                ],
@@ -38,7 +38,7 @@
                    100,
                    "15*bw"
                ],
-               "limit": [
+               "adult": [
                    4,
                    8
                ],
@@ -54,7 +54,7 @@
                    200,
                    "15*bw"
                ],
-               "limit": [
+               "adult": [
                    2,
                    4
                ],
@@ -70,7 +70,7 @@
                    400,
                    "15*bw"
                ],
-               "limit": [
+               "adult": [
                    1,
                    2
                ],
@@ -83,7 +83,7 @@
            "content": "100mg/5ml",
            "dose": {
                "perKg": 0.75,
-               "limit": [
+               "adult": [
                    20,
                    40
                ],
@@ -99,7 +99,7 @@
                    2.5,
                    5
                ],
-               "limit": [
+               "adult": [
                    200,
                    400
                ],
                    1.25,
                    2.5
                ],
-               "limit": [
+               "adult": [
                    100,
                    200
                ],
index e2cadfeb2ee3fedcf04a7f34fce91632fdddf25b..659bb5e73ee417755a52bc342e4d9bad53325273 100644 (file)
@@ -47,7 +47,7 @@
                            0.15,
                            0.45
                        ],
-                       "limit": [
+                       "adult": [
                            8,
                            8
                        ],
@@ -59,7 +59,7 @@
        },
        {
            "mode": "Tab",
-           "content": "4",
+           "content": "4mg",
            "range": [
                {
                    "min": "3y",
                            0.08,
                            0.22
                        ],
-                       "limit": [
+                       "adult": [
                            4,
                            4
                        ],
index 59d157f4199f477d6c88917357d4115503c5e32d..0a0fc51119d8593f4c36ab8ceeb93d36d81a93c8 100644 (file)
@@ -6,11 +6,8 @@
            "gen": true,
            "dose": [
                {
-                   "perKg": [
-                       15,
-                       15
-                   ],
-                   "limit": [
+                   "perKg": 15,
+                   "adult": [
                        500,
                        1000
                    ],
@@ -19,7 +16,7 @@
                },
                {
                    "perKg": 60,
-                   "limit": [
+                   "adult": [
                        4000,
                        4000
                    ],
            "mode": "Rectal",
            "gen": true,
            "dose": {
-               "perKg": [
-                   15,
-                   15
-               ],
-               "limit": [
+               "perKg": 15,
+               "adult": [
                    500,
                    1000
                ],
            "mode": "IM",
            "gen": true,
            "dose": {
-               "perKg": [
-                   5,
-                   5
-               ],
-               "limit": [
+               "perKg": 5,
+               "adult": [
                    500,
                    1000
                ],
@@ -69,7 +60,7 @@
                    "15*bw",
                    "15*bw"
                ],
-               "limit": [
+               "adult": [
                    1,
                    2
                ],
@@ -86,7 +77,7 @@
                    "15*bw",
                    "15*bw"
                ],
-               "limit": [
+               "adult": [
                    1,
                    1.5
                ],
                    "15*bw",
                    "15*bw"
                ],
-               "limit": [
+               "adult": [
                    2,
                    4
                ],
                    "15*bw",
                    "15*bw"
                ],
-               "limit": [
+               "adult": [
                    1,
                    1
                ],
            "content":"125mg/5ml",
            "dose": {
                "perKg": 0.6,
-               "limit": [
+               "adult": [
                    20,
                    40
                ],
            "content":"250mg/5ml",
            "dose": {
                "perKg": 0.3,
-               "limit": [
+               "adult": [
                    10,
                    20
                ],
            "content":"100mg/ml",
            "dose": {
                "perKg": 0.15,
-               "limit": [
+               "adult": [
                    5,
                    10
                ],
                    "15*bw",
                    "15*bw"
                ],
-               "limit": [
+               "adult": [
                    4,
                    8
                ],
                    "15*bw",
                    "15*bw"
                ],
-               "limit": [
+               "adult": [
                    2,
                    4
                ],
            "content":"150mg/5ml",
            "dose": {
                "perKg": 0.03,
-               "limit": [
+               "adult": [
                    3,
                    6.5
                ],
diff --git a/src/data/phenytoin.json b/src/data/phenytoin.json
new file mode 100644 (file)
index 0000000..55b5665
--- /dev/null
@@ -0,0 +1,173 @@
+{
+    "name": "Phenytoin",
+    "form": [
+       {
+           "mode": "Oral",
+           "gen": true,
+           "dose": {
+               "perKg": [
+                   5,
+                   8
+               ],
+               "adult": [
+                   150,
+                   300
+               ],
+               "unit": "mg",
+               "txt": "per day q 12 hr or single dose",
+               "comment": "Increased to max 200-400mg in adults"
+           }
+       },
+       {
+           "mode": "IV",
+           "gen": true,
+           "dose": {
+               "perKg": [
+                   15,
+                   20
+               ],
+               "unit": "mg",
+               "txt": "Loading dose @ 1mg/kg/min",
+               "comment": "diluted in NS, require cardiac monitoring"
+           }
+       },
+       {
+           "mode": "IV",
+           "gen": true,
+           "dose": [
+               {
+                   "perKg": 1.25,
+                   "adult":[
+                       1500,
+                       1500
+                   ],
+                   "unit": "mg",
+                   "txt": "q 5min",
+                   "comment": "Loading dose for arrythmia"
+               },
+               {
+                   "perKg": 15,
+                   "adult":[
+                       1500,
+                       1500
+                   ],
+                   "unit": "mg",
+                   "txt": "",
+                   "comment": "Max loading dose for arrythmia"
+               },
+               {
+                   "perKg": [
+                       5,
+                       10
+                   ],
+                   "unit": "mg",
+                   "txt": "per day q 12 hr",
+                   "comment": "Maintenance dose for arrythmia"
+               }
+           ]
+       },
+       {
+           "mode": "Oral",
+           "gen": true,
+           "dose": {
+               "perKg": [
+                   5,
+                   10
+               ],
+               "unit": "mg",
+               "txt": "per day q 12 hr",
+               "comment": "Maintenance dose for arrythmia"
+           }
+       },
+       {
+           "mode": "Tab",
+           "content": "50mg",
+           "dose": {
+               "approx": [
+                   50,
+                   "5*bw",
+                   "8*bw"
+               ],
+               "adult": [
+                   3,
+                   6
+               ],
+               "unit": "tab",
+               "txt": ""
+           }
+       },
+       {
+           "mode": "Tab",
+           "content": "100mg",
+           "dose": {
+               "approx": [
+                   100,
+                   "5*bw",
+                   "8*bw"
+               ],
+               "adult": [
+                   1.5,
+                   3
+               ],
+               "unit": "tab",
+               "txt": ""
+           }
+       },
+       {
+           "mode": "Susp",
+           "content": "125mg/5ml",
+           "dose": {
+               "perKg": [
+                   0.2,
+                   0.32
+               ],
+               "adult": [
+                   6,
+                   12
+               ],
+               "unit": "ml",
+               "txt": ""
+           }
+       },
+       {
+           "mode": "Syr",
+           "content": "30mg/5ml",
+           "dose": {
+               "perKg": [
+                   0.8,
+                   1.3
+               ],
+               "adult": [
+                   25,
+                   50
+               ],
+               "unit": "ml",
+               "txt": ""
+           }
+       },
+       {
+           "mode": "IV",
+           "content": "25mg/ml",
+           "dose": {
+               "perKg": [
+                   0.6,
+                   0.8
+               ],
+               "unit": "ml",
+               "txt": ""
+           }
+       },
+       {
+           "mode": "IV",
+           "content": "50mg/ml",
+           "dose": {
+               "perKg": [
+                   0.3,
+                   0.4
+               ],
+               "unit": "ml",
+               "txt": ""
+           }
+       }
+    ]
+}
index db1dccbc7ec2367c666e1e22687d01e1eb6ce201..b6b2dc9c2e4abfd1addc7be1003ec3911f973375 100644 (file)
@@ -9,7 +9,7 @@
                    1,
                    2
                ],
-               "limit": [
+               "adult": [
                    60,
                    60
                ],
@@ -41,7 +41,7 @@
                    "1*bw",
                    "2*bw"
                ],
-               "limit": [
+               "adult": [
                    12,
                    12
                ],
@@ -58,7 +58,7 @@
                    "1*bw",
                    "2*bw"
                ],
-               "limit": [
+               "adult": [
                    6,
                    6
                ],
@@ -75,7 +75,7 @@
                    "1*bw",
                    "2*bw"
                ],
-               "limit": [
+               "adult": [
                    3,
                    3
                ],
@@ -92,7 +92,7 @@
                    "1*bw",
                    "2*bw"
                ],
-               "limit": [
+               "adult": [
                    2,
                    2
                ],
                    "1*bw",
                    "2*bw"
                ],
-               "limit": [
+               "adult": [
                    1.5,
                    1.5
                ],
                    1,
                    2
                ],
-               "limit": [
+               "adult": [
                    60,
                    60
                ],
                    0.33,
                    0.66
                ],
-               "limit": [
+               "adult": [
                    20,
                    20
                ],
index 52cfd13c6ac26d1d0cd41341af6667df260ffa5d..041ccfcbec609d0331c813c260ac81d9c6220ddd 100644 (file)
@@ -9,7 +9,7 @@
                    2,
                    4
                ],
-               "limit": [
+               "adult": [
                    300,
                    300
                ],
@@ -25,7 +25,7 @@
                    4,
                    8
                ],
-               "limit": [
+               "adult": [
                    600,
                    600
                ],
@@ -42,7 +42,7 @@
                    1,
                    2
                ],
-               "limit": [
+               "adult": [
                    200,
                    200
                ],
@@ -59,7 +59,7 @@
                    "2*bw",
                    "4*bw"
                ],
-               "limit": [
+               "adult": [
                    2,
                    2
                ],
@@ -76,7 +76,7 @@
                    "2*bw",
                    "4*bw"
                ],
-               "limit": [
+               "adult": [
                    1,
                    1
                ],
@@ -92,7 +92,7 @@
                    0.13,
                    0.26
                ],
-               "limit": [
+               "adult": [
                    20,
                    20
                ],
                    0.04,
                    0.08
                ],
-               "limit": [
+               "adult": [
                    8,
                    8
                ],
diff --git a/src/data/valproate.json b/src/data/valproate.json
new file mode 100644 (file)
index 0000000..7c64505
--- /dev/null
@@ -0,0 +1,65 @@
+{
+    "name": "Valproate",
+    "form": [
+       {
+           "mode": "Oral",
+           "gen": true,
+           "dose": [
+               {
+                   "perKg": [
+                       10,
+                       15
+                   ],
+                   "adult": [
+                       600,
+                       600
+                   ],
+                   "unit": "mg",
+                   "txt": "per day q 12 hr initially"
+               },
+               {
+                   "perKg": [
+                       5,
+                       10
+                   ],
+                   "adult": [
+                       200,
+                       200
+                   ],
+                   "unit": "mg",
+                   "txt": "per day; increment at weekly interval"
+               },
+               {
+                   "perKg": 60,
+                   "adult": [
+                       5000,
+                       5000
+                   ],
+                   "unit": "mg",
+                   "txt": "per day; maximum dose",
+                   "comment": "usual adult dose 1-2gm/day"
+               }
+           ]
+       },
+       {
+           "mode": "IV",
+           "gen": true,
+           "dose": [
+               {
+                   "perKg": 20,
+                   "unit": "mg",
+                   "txt": "loading dose"
+               },
+               {
+                   "perKg": [
+                       5,
+                       10
+                   ],
+                   "unit": "q 8 hr",
+                   "txt": "maintenance dose @ 20mg/min max"
+               }
+           ]
+       }
+    ],
+    "comment": "Available forms- Tab 200mg,300mg,400mg,500mg; Syr 200mg/5ml; Inj 100mg/ml."
+}
index 81847ac943c7730edc3f374e6c36e6baa218aea2..9331d03bdbd1efae485b729a378fdd53dac65813 100644 (file)
@@ -45,7 +45,7 @@
            "gen": true,
            "dose": {
                "perKg": 6,
-               "limit": [
+               "adult": [
                    220,
                    220
                ],
diff --git a/src/dosage.js b/src/dosage.js
deleted file mode 100644 (file)
index 7fa8ce5..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-/**********************************************************************
- * Title: PDosage
- * Description: Pediatric Calculator
- * Author: Agnibho Mondal
- * Website: http://code.agnibho.com
- **********************************************************************
-   Copyright (c) 2016 Agnibho Mondal
-   All rights reserved
- **********************************************************************
-   This file is part of PDosage.
-   
-   PDosage is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-   
-   PDosage is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with PDosage. If not, see <http://www.gnu.org/licenses/>.
- **********************************************************************/
-
-export default function Dosage(data){
-
-    Object.defineProperty(data, "prop", {
-       writable: false
-    });
-
-    this.get=function(){
-       return data;
-    }
-
-    this.listDrugs=function(){
-       var list=data.map(function(obj){
-           return obj.name;
-       });
-       return list;
-    }
-
-    this.getDrug=function(name, patient){
-       if(this.listDrugs().indexOf(name)==-1){
-           return null;
-       }
-       var drug=JSON.parse(JSON.stringify(data.filter(extract)[0]));
-       function extract(obj){
-           return (obj.name == name);
-       }
-       for(var i=0; i<drug.form.length; i++){
-           drug.form[i]=calculateDose(drug.form[i], patient);
-       }
-       return drug;
-    }
-
-    function calculateDose(form, patient){
-       while(form.hasOwnProperty("range")){
-           var res=isolateRange(form, patient);
-           delete form.range;
-           if(res!=null){
-               if(res.hasOwnProperty("range")){
-                   form.range=res.range;
-               }
-               else{
-                   form.dose=res.dose;
-               }
-           }
-       }
-       if(form.dose){
-           form.dose=[].concat(form.dose);
-           for(var i=0; i<form.dose.length; i++){
-               if(form.dose[i].hasOwnProperty("val")){
-                   form.dose[i].val=[].concat(form.dose[i].val);
-               }
-               else if(form.dose[i].hasOwnProperty("perKg")){
-                   form.dose[i].perKg=[].concat(form.dose[i].perKg);
-                   form.dose[i].val=[];
-                   form.dose[i].val[0]=Math.round(parseFloat(form.dose[i].perKg[0])*parseFloat(patient.wt)*100)/100;
-                   form.dose[i].val[1]=Math.round(parseFloat(form.dose[i].perKg[1])*parseFloat(patient.wt)*100)/100;
-                   form.dose[i]=setLimit(form.dose[i]);
-               }
-               else if(form.dose[i].hasOwnProperty("approx")){
-                   form.dose[i].val=[];
-                   form.dose[i].val=findApprox(form.dose[i].approx);
-                   form.dose[i]=setLimit(form.dose[i]);
-               }
-               else if(form.dose[i].hasOwnProperty("eq")){
-                   form.dose[i].eq=[].concat(form.dose[i].eq);
-                   form.dose[i].val=[];
-                   form.dose[i].val[0]=solveEq(form.dose[i].eq[0]);
-                   form.dose[i].val[1]=solveEq(form.dose[i].eq[1]);
-                   form.dose[i]=setLimit(form.dose[i]);
-               }
-               else{
-                   form.dose[i].val=[];
-                   form.dose[i].val[0]=null;
-                   form.dose[i].val[1]=null;
-               }
-           }
-       }
-       return form;
-
-       function isolateRange(form, patient){
-           var min=0;
-           var max=0;
-           var type="";
-           if(patient.age.y===null && patient.age.m===null && patient.age.d===null){
-               return null;
-           }
-           var pDays=patient.age.y*365+patient.age.m*30+patient.age.d;
-           for(var i=0; i<form.range.length; i++){
-               if(form.range[i].hasOwnProperty("min")){
-                   if(form.range[i].min.indexOf("kg")!=-1){
-                       min=form.range[i].min.slice(0, str.indexOf("kg"));
-                       type="wt";
-                   }
-                   else{
-                       min=strToDays(form.range[i].min);
-                       type="age";
-                   }
-               }
-               else{
-                   min=0;
-               }
-               if(form.range[i].hasOwnProperty("max")){
-                   if(form.range[i].max.indexOf("kg")!=-1){
-                       max=form.range[i].max.slice(0, str.indexOf("kg"));
-                       type="wt";
-                   }
-                   else{
-                       max=strToDays(form.range[i].max);
-                       type="age";
-                   }
-               }
-               else{
-                   max=Infinity;
-               }
-               if(type=="wt"){
-                   if(patient.wt>=min && patient.wt<max){
-                       return form.range[i];
-                   }
-               }
-               else if(type=="age"){
-                   if(pDays>=min && pDays<max){
-                       return form.range[i];
-                   }
-               }
-           }
-           return null;
-
-           function strToDays(str){
-               var age={y: 0, m: 0, d: 0};
-               var days=0;
-               str=str.replace(/\s+/g, "");
-               if(str.indexOf("y")!=-1){
-                   age.y=str.slice(0, str.indexOf("y"));
-                   str=str.slice(str.indexOf("y", -1));
-               }
-               if(str.indexOf("m")!=-1){
-                   age.m=str.slice(0, str.indexOf("m"));
-                   str=str.slice(str.indexOf("m", -1));
-               }
-               if(str.indexOf("d")!=-1){
-                   age.d=str.slice(0, str.indexOf("d"));
-                   str=str.slice(str.indexOf("d", -1));
-               }
-               days=age.y*365+age.m*30+age.d;
-               return days;
-           }
-       }
-
-       function findApprox(arr){
-           var ret=[];
-           arr[0]=arr[0]/2;
-           for(var i=1; i<arr.length; i++){
-               arr[i]=solveEq(arr[i]);
-               ret[i-1]=Math.round(arr[i]/arr[0])/2;
-           }
-           if(!ret[0] || (ret[0]==ret[1])){
-               ret[0]=ret[1];
-               ret[1]=null;
-           }
-           return ret;
-       }
-
-       function solveEq(str){
-           var bw=parseFloat(patient.wt);
-           var ageY=patient.age.y;
-           var ageM=ageY*12+patient.age.m;
-           var ageD=ageM*30+patient.age.d;
-           var ret=eval(str);
-           ret=Math.round(ret*100)/100;
-           return ret;
-       }
-
-       function setLimit(dose){
-           //console.log(">>"+JSON.stringify(dose));
-           if(dose.limit && dose.val){
-               if(dose.val[0]>dose.limit[0]){
-                   dose.val[0]=dose.limit[0];
-               }
-               if(dose.val[1]>dose.limit[1]){
-                   dose.val[1]=dose.limit[1];
-               }
-           }
-           if(dose.val[1]==dose.val[0]){
-               dose.val[1]=null;
-           }
-           return dose;
-       }
-    }
-}
index 911745e7e063822fccacf05fe0ac8cd5d73ee001..55c918f3316783229918abd0c53bc5c67eae00ee 100644 (file)
@@ -36,7 +36,7 @@ import "bootstrap";
 import "bootstrap-validator";
 
 //Backend files
-import Dosage from "./dosage.js";
+import Dosage from "./Dosage.js";
 import data from "./data.json";
 
 //Vue Components
@@ -58,7 +58,7 @@ new Vue({
        "about-view": AboutView
     },
     data: {
-       patient: {age: {y:null, m:null, d:null}, wt:null},
+       patient: {age: {y:30, m:null, d:null}, wt:50},
        dosage: "",
        favs: "[]"
     },
index f334d446678932fa587370a0a96792a83bb0d2bf..a23f32939acb25371a15294b6d310d5b6e53e391 100644 (file)
@@ -31,6 +31,7 @@ $(document).ready(function(){
 
     //Insert version code
     $(".version").text(VERSION);
+    $(".data-ver").text(JSON.parse(localStorage.getItem("pdosage_data")).version);
 
     //Update copyright
     $(".copyright").each(function(){