BuildFromFHIRRepeat method Null safety
build a Frequency object from a FHIR Timing.repeat Map
Implementation
static Frequency BuildFromFHIRRepeat(
Map<String, dynamic> fhirTiming, String fhirFreqText) {
Map<String, String> periodUnitMap = {
"d": "Day",
"h": "Hour",
"wk": "Week",
"mo": "Month",
"y": "Year"
};
Map<String, String> weekDaystMap = {
"mon": "Monday",
"tue": "Tuesday",
"wed": "Wednesday",
"thu": "Thursday",
"fri": "Friday",
"sat": "Saturday",
"sun": "Sunday"
};
if (fhirTiming.containsKey("frequency") &&
fhirTiming.containsKey("period") &&
fhirTiming.containsKey("periodUnit")) {
if ((fhirTiming.containsKey("timeOfDay"))) {
String pPeriod = periodUnitMap[fhirTiming["periodUnit"]].toString();
return Frequency.Static(
"", pPeriod, fhirTiming["timeOfDay"].split("|"));
} else if ((fhirTiming.containsKey("DayOfWeek"))) {
String pPeriod = periodUnitMap[fhirTiming["periodUnit"]].toString();
List<String> daysInWeek = fhirTiming["DayOfWeek"].split("|");
return Frequency.Static("", pPeriod,
daysInWeek.map((e) => weekDaystMap[e].toString()).toList());
} else {
String pInterval = periodUnitMap[fhirTiming["periodUnit"]].toString();
double pTimesPerIntervald =
(fhirTiming["frequency"]) * (fhirTiming["period"]);
int pTimesPerInterval = pTimesPerIntervald.toInt();
if ((pInterval == "Hour") ||
((pInterval == "Day") && (fhirTiming["period"] == 1))) {
pTimesPerInterval =
24 ~/ ((fhirTiming["frequency"]) * (fhirTiming["period"]));
pInterval = "Day";
} else if ((pInterval == "Day") && (fhirTiming["period"] > 1)) {
pTimesPerInterval =
30 ~/ ((fhirTiming["frequency"]) * (fhirTiming["period"]));
pInterval = "Month";
}
return Frequency.Dynamic("", pInterval, pTimesPerInterval);
}
} else if (fhirTiming.containsKey("count") &&
(fhirTiming["count"] as int == 1)) {
return Frequency.Once("");
}
return Frequency.Text(fhirFreqText);
}