add abs-calibration based classification

This commit is contained in:
Pritimay Sarkar
2023-11-11 15:55:45 +05:30
parent f648a84c41
commit bdcc1f83ea

View File

@@ -137,28 +137,85 @@ exports.kitAlert = async (event, context) => {
console.log('Function triggered by change to: ' + resource);
// now log the full event object
console.log(JSON.stringify(event));
const { kitSerial, classificationResult } = event.value.fields;
const { kitSerial, classificationResult, _id, led1Average, led3Average } = event.value.fields;
console.log('kitSerial', kitSerial);
console.log('classificationResult', classificationResult);
if (classificationResult?.stringValue?.includes("Trait")) {
const currentKitTests = await admin.firestore().collection("testData").where("kitSerial", "==", kitSerial.stringValue).get();
let traitCount = 0;
currentKitTests?.docs.forEach((x) => {
if (x.data().classificationResult?.includes("Trait")) {
traitCount++;
}
});
console.log("traitCount", traitCount);
if (traitCount > 2) {
await admin.firestore().collection("alerts").add({
name: 'Kit Alert',
kit: kitSerial.stringValue,
traitCount: traitCount,
message: `${kitSerial.stringValue} has ${traitCount} traits`,
createdAt: moment().utcOffset("+05:30").format("YYYY-MM-DD HH:mm:ss")
});
}
// if (classificationResult?.stringValue?.includes("Trait")) {
// const currentKitTests = await admin.firestore().collection("testData").where("kitSerial", "==", kitSerial.stringValue).get();
// let traitCount = 0;
// currentKitTests?.docs.forEach((x) => {
// if (x.data().classificationResult?.includes("Trait")) {
// traitCount++;
// }
// });
// console.log("traitCount", traitCount);
// if (traitCount > 2) {
// await admin.firestore().collection("alerts").add({
// name: 'Kit Alert',
// traitCount: traitCount,
// message: `${kitSerial.stringValue} has ${traitCount} traits`
// });
// }
// const sgMail = require('@sendgrid/mail');
// sgMail.setApiKey('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');
// const msg = {
// to: ['hpos.smi@gmail.com', 'pritimay@sminnovations.in'],
// from: 'pritimay@sminnovations.in',
// subject: `Kit Alert: ${kitSerial.stringValue}`,
// text: `${kitSerial.stringValue} has ${traitCount} traits`,
// html: `<p>${kitSerial.stringValue} has ${traitCount} traits</p>`,
// };
// sgMail.send(msg);
// }
const led1Intercept = -0.85965;
const led3Slope = 0.184991;
const led3Intercept = 0.001704;
console.log('_id', _id?.stringValue);
console.log('led1Average', led1Average?.doubleValue);
console.log('led3Average', led3Average?.doubleValue);
const LED1Average = led1Average?.doubleValue;
const LED3Average = led3Average?.doubleValue;
const Abs427 = LED1Average * 1.2648 - 0.85965;
const Abs555 = LED3Average * 0.184991 + 0.001704;
const pdr = Abs555 / Abs427;
// const pdr = 0.239;
console.log(pdr);
let classification = "NA";
if (pdr > 0 && pdr <= 0.16) {
classification = "Normal";
}
if (pdr > 0.16 && pdr <= 0.165) {
classification = "Negative Borderline";
}
if (pdr > 0.165 && pdr <= 0.235) {
classification = "Sickle Cell Trait";
}
if (pdr > 0.235 && pdr <= 0.24) {
classification = "Positive Borderline";
}
if (pdr > 0.24 && pdr <= 1) {
classification = "Sickle Cell Disease";
}
console.log(classification);
const docs = await admin.firestore().collection("testData").where("_id", "==", _id.stringValue).get();
docs?.forEach(async (doc) => {
await admin.firestore().collection("testData").doc(doc.id).update({
abs427: Abs427,
abs555: Abs555,
predictedDenovixRatio: pdr,
prdClassification: classification
// incubationTime: admin.firestore.FieldValue.delete()
});
})
};