Skip to content

Instantly share code, notes, and snippets.

@Fritiof
Created September 29, 2022 09:03
Show Gist options
  • Save Fritiof/4335d80cc5dc719b8aab1422b429cfeb to your computer and use it in GitHub Desktop.
Save Fritiof/4335d80cc5dc719b8aab1422b429cfeb to your computer and use it in GitHub Desktop.
A method to aggregate and group unplanned vaccinations
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