MediaWiki:Gadget-calculator-patients-core.js
From WikiAnesthesia
Revision as of 20:23, 28 August 2021 by Chris Rishel (talk | contribs)
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/**
* @author Chris Rishel
*/
( function() {
// Units for age (37 weeks = birth)
mw.calculators.addUnits( {
wk: {
definition: '0.01923 year',
offset: -37
},
mo: {
definition: '1 month'
},
yr: {
definition: '1 year',
aliases: [ 'yo' ]
}
} );
// Units for weight
// Body weight needs to be treated as a different fundamental unit type from mass (otherwise it would cancel out
// doing stoichiometry calculations.
// Gram-weight, which uses short SI prefixes (e.g. 1 kgwt = 1000 gwt)
mw.calculators.addUnitsBases( {
weight: {
toString: function( units ) {
return units.replace( 'wt', '' );
}
}
} );
mw.calculators.addUnits( {
gwt: {
baseName: 'weight',
prefixes: 'short'
},
lbwt: {
baseName: 'weight',
definition: '453.59237 gwt'
}
} );
mw.calculators.addVariables( {
age: {
name: 'Age',
type: 'number',
minValue: '20 wk',
maxValue: '125 yr',
maxLength: 3,
units: [
'yr',
'mo',
'wk'
]
},
gender: {
name: 'Gender',
type: 'string',
options: [
'',
'F',
'M'
]
},
height: {
name: 'Height',
type: 'number',
minValue: '20 cm',
maxValue: '300 cm',
maxLength: 3,
units: [
'cm',
'm',
'in',
'ft'
]
},
weight: {
name: 'Weight',
type: 'number',
minValue: '200 gwt',
maxValue: '750 kgwt',
maxLength: 3,
units: [
'kgwt',
'lbwt',
'gwt'
]
}
} );
/**
* Very basic patient calculations which may be used by many modules
*/
mw.calculators.addCalculations( {
ibw: {
name: 'Ideal body weight',
abbreviation: 'IBW',
data: {
variables: {
required: [ 'height', 'gender' ]
}
},
units: 'kgwt',
link: 'https://en.wikipedia.org/wiki/Human_body_weight#Ideal_body_weight',
description: 'Ideal body weight may only be applied to persons 152 cm (60 inches) or taller',
formula: '<math>\\mathrm{IBW} = \\mathrm{weight_{base}} + 2.3 * (\\mathrm{height_{in}} - 60) \\\\ \\mathrm{weight_{base}} =\\left\\{\t\\begin{array}{ll}\t\t\\text{45.5 kg} & \\mbox{if } \\text{female} \\\\\t\t\\text{50 kg} & \\mbox{if } \\text{male}\t\\end{array}\\right.</math>',
references: [
'Devine BJ. Gentamicin therapy. Drug Intell Clin Pharm. 1974;8:650–655.'
],
calculate: function( data ) {
if( data.height.toNumber( 'cm' ) < 152 ) {
throw new Error( 'Ideal body weight may only be applied to persons 152 cm (60 inches) or taller' );
}
var baseWeight;
if( data.gender === 'F' ) {
baseWeight = 45.5;
} else if( data.gender === 'M' ) {
baseWeight = 50;
} else {
throw new Error( 'Invalid gender "' + data.gender + '"' );
}
// baseWeight + 2.3 kg for every inch over 5 feet
return baseWeight + 2.3 * ( data.height.toNumber( 'in' ) - 60 );
}
},
lbw: {
name: 'Lean body weight',
abbreviation: 'LBW',
data: {
variables: {
required: [ 'gender', 'height', 'weight' ]
}
},
units: 'kgwt',
link: 'https://en.wikipedia.org/wiki/Lean_body_mass',
formula: '<math>\\mathrm{LBW} = \\begin{cases} \\frac{9270 * \\mathrm{weight_{kg}}}{8780+(244*\\mathrm{BMI}))} & \\mbox{if } \\text{female} \\\\\\\\ \\frac{9270 * \\mathrm{weight_{kg}}}{6680+(216*\\mathrm{BMI}))} & \\mbox{if } \\text{male} \\end{cases}</math>',
references: [
'Janmahasatian S, Duffull SB, Ash S, Ward LC, Byrne NM, Green B. Quantification of lean bodyweight. Clin Pharmacokinet. 2005; 44(10): 1051-65.'
],
calculate: function( data ) {
if( data.gender === 'F' ) {
return 9270 * data.weight.toNumber( 'kgwt' ) / ( 8780 + 244 * data.weight.toNumber( 'kgwt' ) / Math.pow( data.height.toNumber( 'm' ), 2 ) );
} else if( data.gender === 'M' ) {
return 9270 * data.weight.toNumber( 'kgwt' ) / ( 6680 + 216 * data.weight.toNumber( 'kgwt' ) / Math.pow( data.height.toNumber( 'm' ), 2 ) );
} else {
throw new Error( 'Invalid gender "' + data.gender + '"' );
}
}
},
tbw: {
name: 'Total body weight',
abbreviation: 'TBW',
data: {
variables: {
required: [ 'weight' ]
}
},
units: 'kgwt',
calculate: function( data ) {
return data.weight.toNumber( 'kgwt' );
}
}
} );
}() );