This algorithm is designed to produce a spinal cord injury classification consistent with the International Standards for Neurological Classification of Spinal Cord Injury developed and maintained by the American Spinal Injury Association (ASIA).
<!-- using IIFE -->
<!-- defines ISNCSCI on window object -->
<script src="https://unpkg.com/isncsci/iife/ISNCSCI.min.js"></script>
<!-- using ES module -->
<script type="module">
// using default import
import ISNCSCI from "https://unpkg.com/isncsci/esm/ISNCSCI.min.js"
// using named import
import { ISNCSCI } from "https://unpkg.com/isncsci/esm/ISNCSCI.min.js"
</script>
Install library using NPM
npm i isncsci
Then import the library in your project
Named import
// Recommended with typescript
import { ISNCSCI, Exam } from 'isncsci';
Default import
import ISNCSCI from 'isncsci';
CommonJS
const { ISNCSCI } = require("isncsci");
// or
const ISNCSCI = require("isncsci").ISNCSCI;
To get a classification and the totals, you just need pass an exam
as a parameter while using the ISNCSCI
constructor.
Interface for exam
parameter can be found below.
Below is an example in TypeScript:
// create exam
let exam: Exam = {
deepAnalPressure: "Yes",
voluntaryAnalContraction: "Yes",
right: {
lowestNonKeyMuscleWithMotorFunction: "C8",
motor: {
C5: "5",
/* ... */
S1: "2*",
},
lightTouch: {
C2: "2",
/* ... */
S4_5: "1*",
},
pinPrick: {
C2: "1**",
/* ... */
S4_5: "0",
}
},
left: {
motor: { /* ... */ },
lightTouch: { /* ... */ },
pinPrick: { /* ... */ },
},
}
// get result
let result = new ISNCSCI(exam);
// output classification result
console.log(result.classification);
// output totals result
console.log(result.totals);
Following shows the interfaces associated to Exam
used for ISNCSCI
constructor.
interface Exam {
right: ExamSide;
left: ExamSide;
voluntaryAnalContraction: BinaryObservation;
deepAnalPressure: BinaryObservation;
}
interface ExamSide {
motor: Motor;
lightTouch: Sensory;
pinPrick: Sensory;
lowestNonKeyMuscleWithMotorFunction?: MotorLevel;
}
interface Motor {
C5: MotorMuscleValue;
C6: MotorMuscleValue;
C7: MotorMuscleValue;
C8: MotorMuscleValue;
T1: MotorMuscleValue;
L2: MotorMuscleValue;
L3: MotorMuscleValue;
L4: MotorMuscleValue;
L5: MotorMuscleValue;
S1: MotorMuscleValue;
}
interface Sensory {
C2: SensoryPointValue;
C3: SensoryPointValue;
C4: SensoryPointValue;
C5: SensoryPointValue;
C6: SensoryPointValue;
C7: SensoryPointValue;
C8: SensoryPointValue;
T1: SensoryPointValue;
T2: SensoryPointValue;
T3: SensoryPointValue;
T4: SensoryPointValue;
T5: SensoryPointValue;
T6: SensoryPointValue;
T7: SensoryPointValue;
T8: SensoryPointValue;
T9: SensoryPointValue;
T10: SensoryPointValue;
T11: SensoryPointValue;
T12: SensoryPointValue;
L1: SensoryPointValue;
L2: SensoryPointValue;
L3: SensoryPointValue;
L4: SensoryPointValue;
L5: SensoryPointValue;
S1: SensoryPointValue;
S2: SensoryPointValue;
S3: SensoryPointValue;
S4_5: SensoryPointValue;
}
Here lists the valid values for interfaces above.
Tagged values represents impairment due to non-SCI injury.
Single star (*
) represents consider not normal
for classification.
Double star (**
) represents consider normal
for classification.
type BinaryObservation = 'Yes' | 'No' | 'NT';
type MotorLevel =
'C5' | 'C6' | 'C7' | 'C8' | 'T1' |
'L2' | 'L3' | 'L4' | 'L5' | 'S1';
type MotorMuscleValue =
'0' | '1' | '2' | '3' | '4' | '5' |
'0*' | '1*' | '2*' | '3*' | '4*' |
'0**' | '1**' | '2**' | '3**' | '4**' |
'NT' | 'NT*' | 'NT**';
type SensoryPointValue =
'0' | '1' | '2' |
'0*' | '1*' |
'0**' | '1**' |
'NT' | 'NT*' | 'NT**';
Demo files that can be used as examples are found in the demo
folder.
You run *.spec.*
tests using npx jest demo
command.
You can view the test for *.html
file by opening it on any modern browser that supports ES modules.
demo/cjs.spec.js
: demo using CommonJS syntaxdemo/esm.spec.ts
: demo using ES module and TypeScript syntaxdemo/iife-and-esm.html
: demo using ES module and IIFE on the browser