Created
September 29, 2022 09:03
-
-
Save Fritiof/4335d80cc5dc719b8aab1422b429cfeb to your computer and use it in GitHub Desktop.
A method to aggregate and group unplanned vaccinations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface VaccineDose { | |
name: string; | |
category: string; | |
doseNumber: number; | |
vaccinationDate: Date; | |
isPlanned: boolean; | |
} | |
interface VaccineAggregate { | |
category: string; | |
lastDose: number; | |
count: number; | |
} | |
/** | |
* Group unplanned patient vaccinations by category (TBE/Measles etc) | |
*/ | |
export function aggregateVaccines(doses: VaccineDose[]): VaccineAggregate[] { | |
const pastDoses = doses.filter((dose) => !dose.isPlanned); | |
const reducedMap = new Map<string, VaccineAggregate>(); | |
pastDoses.forEach((dose) => { | |
const accumulatedData = reducedMap.get(dose.category); | |
if (accumulatedData) { | |
reducedMap.set(dose.category, { | |
category: dose.category, | |
lastDose: | |
accumulatedData.lastDose > dose.doseNumber | |
? accumulatedData.lastDose | |
: dose.doseNumber, | |
count: accumulatedData.count + 1, | |
}); | |
} else { | |
reducedMap.set(dose.category, { | |
category: dose.category, | |
lastDose: dose.doseNumber, | |
count: 1, | |
}); | |
} | |
}); | |
return Array.from(reducedMap.entries()).map(([k, v]) => { | |
return v; | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment