Skip to content

Instantly share code, notes, and snippets.

@nurfarazi
Created March 24, 2020 13:00
Show Gist options
  • Save nurfarazi/d113e957d0ff573d0a0fd0c37ed668b2 to your computer and use it in GitHub Desktop.
Save nurfarazi/d113e957d0ff573d0a0fd0c37ed668b2 to your computer and use it in GitHub Desktop.
export const covid19UserResponse = functions.https.onCall(async (data, context) => {
try {
// https://docs.google.com/spreadsheets/d/13x-6koKiqRnIK6_trJX-abLJyi65OzqV621u9iwM1qw/edit#gid=2008915096
await admin.firestore().collection('corona-user-responses').add(data);
// tslint:disable-next-line:radix
let is_elder = parseInt(data['age']['answer']) > 60 ? '1' : '0';
let has_diseases_history = data['high_risk']['answer'] === 'true' ? '1' : '0';
let symptom_risk = getSymptomRisk(data);
let epidemic_risk = getEpidemicRisk(data);
let finalRiskAssessment = getFinalRiskAssessment(symptom_risk, is_elder, has_diseases_history, epidemic_risk);
let message = getMessage(finalRiskAssessment);
return {
message
};
} catch (error) {
return error;
}
});
function getSymptomRisk(data): number {
let is_feverish = data['is_feverish']['answer'] === 'true' ? '1' : '0';
let has_sore_throat = data['has_sore_throat']['answer'] === 'true' ? '1' : '0';
let has_breathlessness = data['has_breathlessness']['answer'] === 'true' ? '1' : '0';
if (`${is_feverish}${has_sore_throat}${has_breathlessness}` === `000`) return 0;
if (`${is_feverish}${has_sore_throat}${has_breathlessness}` === `001`) return 2;
if (`${is_feverish}${has_sore_throat}${has_breathlessness}` === `010`) return 1;
if (`${is_feverish}${has_sore_throat}${has_breathlessness}` === `011`) return 2;
if (`${is_feverish}${has_sore_throat}${has_breathlessness}` === `100`) return 1;
if (`${is_feverish}${has_sore_throat}${has_breathlessness}` === `101`) return 2;
if (`${is_feverish}${has_sore_throat}${has_breathlessness}` === `110`) return 1;
if (`${is_feverish}${has_sore_throat}${has_breathlessness}` === `111`) return 2;
return 0;
}
function getEpidemicRisk(data) {
let is_visited_abroad = data['is_visited_abroad']['answer'] === 'true' ? '1' : '0';
let is_contacted_with_covid = data['is_contacted_with_covid']['answer'] === 'true' ? '1' : '0';
let is_contacted_with_family_who_cough = data['is_contacted_with_family_who_cough']['answer'] === 'true' ? '1' : '0';
if (`${is_visited_abroad}${is_contacted_with_covid}${is_contacted_with_family_who_cough}` === `000`) return 0;
if (`${is_visited_abroad}${is_contacted_with_covid}${is_contacted_with_family_who_cough}` === `001`) return 1;
if (`${is_visited_abroad}${is_contacted_with_covid}${is_contacted_with_family_who_cough}` === `010`) return 2;
if (`${is_visited_abroad}${is_contacted_with_covid}${is_contacted_with_family_who_cough}` === `011`) return 2;
if (`${is_visited_abroad}${is_contacted_with_covid}${is_contacted_with_family_who_cough}` === `100`) return 1;
if (`${is_visited_abroad}${is_contacted_with_covid}${is_contacted_with_family_who_cough}` === `101`) return 2;
if (`${is_visited_abroad}${is_contacted_with_covid}${is_contacted_with_family_who_cough}` === `110`) return 2;
if (`${is_visited_abroad}${is_contacted_with_covid}${is_contacted_with_family_who_cough}` === `111`) return 2;
return 0;
}
// tslint:disable-next-line:cyclomatic-complexity
function getFinalRiskAssessment(symptom_risk, is_elder, has_diseases_history, epidemic_risk): number {
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `0000`) return 0;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `0001`) return 1;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `0002`) return 1;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `0010`) return 0;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `0011`) return 1;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `0012`) return 2;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `0100`) return 0;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `0101`) return 1;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `0102`) return 3;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `0110`) return 0;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `0111`) return 2;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `0112`) return 2;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `1000`) return 1;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `1001`) return 1;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `1002`) return 4;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `1010`) return 1;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `1011`) return 2;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `1012`) return 4;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `1100`) return 1;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `1101`) return 4;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `1102`) return 4;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `1110`) return 1;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `1111`) return 4;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `1112`) return 4;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `2000`) return 5;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `2001`) return 5;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `2002`) return 6;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `2010`) return 5;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `2011`) return 5;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `2012`) return 6;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `2100`) return 5;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `2101`) return 5;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `2102`) return 6;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `2110`) return 5;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `2111`) return 5;
if (`${symptom_risk}${is_elder}${has_diseases_history}${epidemic_risk}` === `2112`) return 6;
return 0;
}
function getMessage(risk) {
if (`${risk}` === `0`) return 'Safe';
if (`${risk}` === `1`) return 'Stay Home/Quarantine';
if (`${risk}` === `2`) return 'Mandatory Quarantine/Followup';
if (`${risk}` === `3`) return 'Request Test';
if (`${risk}` === `4`) return 'Urgent/Contact with Covid Facility';
if (`${risk}` === `5`) return 'Extra Urgent';
if (`${risk}` === `6`) return 'VIP';
return 'Safe';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment