Skip to content

bjornna/dataserver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dataserver

Run

git clone git@github.com:bjornna/dataserver.git

npm run start

Dev

Use nodemon to hot reload

npm install --save-dev nodemon

npm run dev

Docker

docker build -t bjornna/dataserver .

docker run -p 3000:3000 -d bjornna/dataserver

Usage

The purpose of this dataserver was to explore the JS functionality of DIPS EHR Craft Forms.

Load blood pressure data

If you run this simple script inside a form. The systolic and diastolic value will be updated when the form is loaded.
CAUTION: Update the path to systolic and diastolic much match with the form.
var SYSTOLIC = "bna_vitale_opplysninger/blodtrykk/uspesifisert_hendelse/systolisk";
var DIASTOLIC = "bna_vitale_opplysninger/blodtrykk/uspesifisert_hendelse/diastolisk";
var bloodPressureUrl = "http://localhost:3000/api/blood_pressure";

http.get(bloodPressureUrl, function (result) {
    if (result.isSuccessStatusCode) {
        var json = JSON.parse(result.data);
        console.log("Systolic:" + json.systolic);
        console.log("Diastolic:" + json.systolic);
        updateBloodPressure(json.systolic, json.diastolic);
    } else {
        console.log("StatusCode: " + result.statusCode);
        console.log(result.data);
    }
});

function updateBloodPressure(systolic, diastolic) {
    updateSystolic(systolic);
    updateDiastolic(diastolic);
}

function updateSystolic(systolic) {
    var val = new DvQuantity();
    val.magnitude = systolic;
    val.units = "mm[Hg]";
    api.setFieldValue(SYSTOLIC, val);
}

function updateDiastolic(diastolic) {
    var val = new DvQuantity();
    val.magnitude = diastolic;
    val.units = "mm[Hg]";
    api.setFieldValue(DIASTOLIC, val);
}

Cancer trajectory decision

Below is javascript code to handle logic when starting trajectory for cancer.

let formIdTrajectory = 'pakkeforløp_for_kreft/iverksett_pakkeforløp_kreft/start_pakkeforløp/nåværende_aktivitet/forløp';
let formIdPhase1NumDays = 'pakkeforløp_for_kreft/iverksett_pakkeforløp_kreft/start_pakkeforløp/nåværende_aktivitet/detaljer_om_pakkeforløp_kreft/dager_til_første_oppmøte';
let formIdPhase2NumDays = 'pakkeforløp_for_kreft/iverksett_pakkeforløp_kreft/start_pakkeforløp/nåværende_aktivitet/detaljer_om_pakkeforløp_kreft/dager_til_klinisk_beslutning';
let formIdPhase3NumDays = 'pakkeforløp_for_kreft/iverksett_pakkeforløp_kreft/start_pakkeforløp/nåværende_aktivitet/detaljer_om_pakkeforløp_kreft/dager_til_start_behandling';

//DV_DATE - estimert tid for først oppmøte
let formIdDateStarted = 'pakkeforløp_for_kreft/iverksett_pakkeforløp_kreft/start_pakkeforløp/nåværende_aktivitet/start_første_hf';
let formIdEstimatedPhase1Date = 'pakkeforløp_for_kreft/iverksett_pakkeforløp_kreft/start_pakkeforløp/nåværende_aktivitet/detaljer_om_pakkeforløp_kreft/første_oppmøte';
let formIdEstimatedPhase2Date = 'pakkeforløp_for_kreft/iverksett_pakkeforløp_kreft/start_pakkeforløp/nåværende_aktivitet/detaljer_om_pakkeforløp_kreft/klinisk_beslutning';
let formIdEstimatedPhase3Date = 'pakkeforløp_for_kreft/iverksett_pakkeforløp_kreft/start_pakkeforløp/nåværende_aktivitet/detaljer_om_pakkeforløp_kreft/start_behandling';

let trajectoryCode = null;
let trajectoryName = null;

/**
 * Add some listeners
 */

api.addListener(formIdTrajectory, 'OnChanged', function (id, value, container) {
    let termId = value.DefiningCode.TerminologyId.Value;
    let codeId = value.DefiningCode.CodeString;

    trajectoryCode = codeId;
    trajectoryName = value.value;

    if(trajectoryCode == 'C01'){
        //diagnostisk pakkeforløp skal ikke ha start behandling
        api.disableField(formIdPhase3NumDays);
        api.disableField(formIdEstimatedPhase3Date);
    }else{
        api.enableField(formIdPhase3NumDays);
        api.enableField(formIdEstimatedPhase3Date);

    }

    updateEstimatedDaysBasedOnTrajectoryCode(codeId);

});

api.addListener(formIdDateStarted, 'OnChanged', function (id, value, container) {
    console.debug("trajectoryStartDate    changed to " + value + "(" + trajectoryName + ")");
    recalculateAndUpdateEstimatedDates();
});

/**
 * Listener on form element estimated days to first encounter
 */
api.addListener(formIdPhase1NumDays, 'OnChanged', function (id, value, container) {
    console.debug("phase1NumDays changed to " + value + "(" + trajectoryName + ")");
    recalculateAndUpdateEstimatedDates();
});
/**
 * Listener on form element estimated days to clinical decision
 */
api.addListener(formIdPhase2NumDays, 'OnChanged', function (id, value, container) {
    console.debug("phase2NumDays changed to " + value + "(" + trajectoryName + ")");
    recalculateAndUpdateEstimatedDates();
});

/**
 * Listener on form element estimated days to start treatment
 */
api.addListener(formIdPhase3NumDays, 'OnChanged', function (id, value, container) {
    console.debug("phase3NumDays changed to " + value + "(" + trajectoryName + ")");
    recalculateAndUpdateEstimatedDates();

});

function recalculateAndUpdateEstimatedDates() {
    let startDate = api.getFieldValue(formIdDateStarted);
    let phase1Count = getIntValueFromField(formIdPhase1NumDays);
    let phase2Count = getIntValueFromField(formIdPhase2NumDays);
    let phase3Count = getIntValueFromField(formIdPhase3NumDays);

    let p1Date = addDays(startDate, phase1Count);
    let p2Date = addDays(p1Date, phase2Count);
    let p3Date = addDays(p2Date, phase3Count);


    api.setFieldValue(formIdEstimatedPhase1Date, getDvDate(p1Date));
    api.setFieldValue(formIdEstimatedPhase2Date, getDvDate(p2Date));
    api.setFieldValue(formIdEstimatedPhase3Date, getDvDate(p3Date));
};

function getIntValueFromField(field) {
    let f = api.getFieldValue(field);
    return parseInt(f);
}


function addDays(date, days) {
    var result = new Date(date);
    result.setDate(result.getDate() + days);
    return result;
}

function type(obj) {
    return Object.prototype.toString.call(obj).slice(8, -1);
}

function getDvDate(date) {
    let rm = new DvDate(date);
    return rm;
}

function getDvCount(n) {
    let dvCount = new DvCount();
    dvCount.magnitude = n;
    return dvCount;
}


function updateNumberOfDays(a, b, c) {
    console.log("Update values: " + a + ", " + b + ", " + c);
    api.setFieldValue(formIdPhase1NumDays, getDvCount(a));
    api.setFieldValue(formIdPhase2NumDays, getDvCount(b));
    api.setFieldValue(formIdPhase3NumDays, getDvCount(c));
}

function updateEstimatedDaysBasedOnTrajectoryCode(codeId) {

    switch (codeId) {
        case 'A01': //Brystkreft
            updateNumberOfDays(7, 7, 10);
            break;
        case 'A02': //Hode-halskreft
            updateNumberOfDays(7, 7, 14);
            break;
        case 'A03': //Kronisk lymfatisk leukemi
            updateNumberOfDays(14, 10, 8);
            break;
        case 'A04': //Myelomatose
            updateNumberOfDays(7, 20, 3);
            break;
        case 'A05': //Akutt leukemi
            updateNumberOfDays(2, 5, 1);
            break;
        case 'A06': //Lymfom
            updateNumberOfDays(4, 14, 3);
            break;
        case 'A07': //Bukspyttkjertelkreft
            updateNumberOfDays(8, 14, 14);
            break;
        case 'A12': //Tykk- og endetarmskreft
            updateNumberOfDays(9, 12, 14);
            break;
        case 'A14': //Blærekreft
            updateNumberOfDays(7, 25, 14);
            break;
        case 'A15': //Nyrekreft
            updateNumberOfDays(7, 25, 11);
            break;
        case 'A16': //Prostatakreft
            updateNumberOfDays(10, 24, 3);
            break;
        case 'A17': //Peniskreft
            updateNumberOfDays(6, 21, 10);
            break;
        case 'A18': //Testikkelkreft
            updateNumberOfDays(5, 12, 14);
            break;
        case 'A20': //Livmorkreft(endometrie)
            updateNumberOfDays(6, 16, 8);
            break;
        case 'A21': //Eggstokkkreft
            updateNumberOfDays(6, 16, 8);
            break;
        case 'A22': //Livmorhalskreft
            updateNumberOfDays(6, 16, 8);
            break;

        case 'A23': //Hjernekreft
            updateNumberOfDays(6, 8, 7);
            break;

        case 'A26': //Lungekreft
            updateNumberOfDays(7, 21, 7);
            break;

        case 'A30': //Kreft hos barn
            updateNumberOfDays(3, 10, 3);
            break;

        case 'A32': //Kreft i spiserør og magesekk
            updateNumberOfDays(8, 21, 14);
            break;

        case 'A34': //Primær leverkreft
            updateNumberOfDays(5, 20, 7);
            break;

        case 'A36': //Sarkom
            updateNumberOfDays(8, 21, 14);
            break;
        case 'A37': //Skjoldbrukskjertelkreft
            updateNumberOfDays(10, 10, 21);
            break;

        case 'A38': //Føflekkkreft
            updateNumberOfDays(7, 14, 14);
            break;

        case 'A39': //Nevroendokrine svulster
            updateNumberOfDays(14, 21, 21);
            break;

        case 'A40': //Galleveiskreft
            updateNumberOfDays(6, 21, 14);
            break;

        case 'B01': //Metastaser med ukjent utgangspunkt
            updateNumberOfDays(7, 14, 10);
            break;
        case 'C01': //Diagnostisk pakkeforløp
            updateNumberOfDays(7, 15, 0);
            break;

        default:
            console.warn("The codeId has no match");
            updateNumberOfDays(-1, -1, -1);
            break;
    }

}

About

A simple nodejs app to test JS in forms

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published