Exemplo n.º 1
0
        StatsDaily GetDailyStatsFromRaw(ImmutableDictionary <string, int> header, string line, int?previousDecasedToDate, int?previousOutOfHospitalToDate)
        {
            var fields              = ParseLine(line);
            int?deceasedToDate      = GetInt("state.deceased.todate", header, fields);
            int?deceased            = GetDelta(deceasedToDate, previousDecasedToDate);
            int?outOfHospitalToDate = GetInt("state.out_of_hospital.todate", header, fields);
            int?outOfHospital       = GetDelta(outOfHospitalToDate, previousOutOfHospitalToDate);
            var cases = new Cases(
                GetInt("cases.confirmed", header, fields),
                GetInt("cases.confirmed.todate", header, fields),
                GetInt("cases.recovered.todate", header, fields),
                GetInt("cases.closed.todate", header, fields),
                GetInt("cases.active", header, fields),
                new HealthSystemSCases(GetInt("cases.hs.employee.confirmed.todate", header, fields)),
                new RetirementHomeCases(
                    GetInt("cases.rh.employee.confirmed.todate", header, fields),
                    GetInt("cases.rh.occupant.confirmed.todate", header, fields)
                    ),
                new UnclassifiedCases(GetInt("cases.unclassified.confirmed.todate", header, fields))
                );
            var perTreatment = new PerTreatment(
                GetInt("state.in_hospital", header, fields),
                GetInt("state.in_hospital.todate", header, fields),
                GetInt("state.icu", header, fields),
                GetInt("state.critical", header, fields),
                deceasedToDate,
                deceased,
                outOfHospitalToDate,
                outOfHospital,
                GetInt("state.recovered.todate", header, fields)
                );
            var perRegion = ImmutableDictionary <string, int?> .Empty;

            foreach (var pair in header)
            {
                string[] keyParts = pair.Key.Split('.');
                if (keyParts.Length == 3 && keyParts[0] == "region" && keyParts[2] == "todate")
                {
                    perRegion = perRegion.Add(keyParts[1], GetInt(fields[pair.Value]));
                }
            }
            var perAgeSum = ImmutableArray <PerAgeBucket> .Empty;

            foreach (var bucket in ageBuckets)
            {
                var perAge = new PerAgeBucket(
                    bucket.AgeFrom,
                    bucket.AgeTo,
                    GetInt($"age.{bucket.Key}.todate", header, fields),
                    GetInt($"age.female.{bucket.Key}.todate", header, fields),
                    GetInt($"age.male.{bucket.Key}.todate", header, fields)
                    );
                perAgeSum = perAgeSum.Add(perAge);
            }
            var deceasedPerAge = ImmutableArray <PerAgeBucket> .Empty;

            foreach (var bucket in ageBuckets)
            {
                var perAge = new PerAgeBucket(
                    bucket.AgeFrom,
                    bucket.AgeTo,
                    GetInt($"deceased.{bucket.Key}.todate", header, fields),
                    GetInt($"deceased.female.{bucket.Key}.todate", header, fields),
                    GetInt($"deceased.male.{bucket.Key}.todate", header, fields)
                    );
                deceasedPerAge = deceasedPerAge.Add(perAge);
            }
            var date   = GetDate(fields[header["date"]]);
            var result = new StatsDaily(
                GetInt("day", header, fields) ?? 0,
                date.Year,
                date.Month,
                date.Day,
                fields[header["phase"]],
                GetInt("tests.performed.todate", header, fields),
                GetInt("tests.performed", header, fields),
                GetInt("tests.positive.todate", header, fields),
                GetInt("tests.positive", header, fields),
                new Tests(
                    performed: new CommonTests(
                        GetInt("tests.performed.todate", header, fields),
                        GetInt("tests.performed", header, fields)
                        ),
                    positive: new CommonTests(
                        GetInt("tests.positive.todate", header, fields),
                        GetInt("tests.positive", header, fields)
                        ),
                    regular: new RegularTests(
                        performed: new CommonTests(
                            GetInt("tests.regular.performed.todate", header, fields),
                            GetInt("tests.regular.performed", header, fields)
                            ),
                        positive: new CommonTests(
                            GetInt("tests.regular.positive.todate", header, fields),
                            GetInt("tests.regular.positive", header, fields)
                            )
                        ),
                    nSApr20: new RegularTests(
                        performed: new CommonTests(
                            GetInt("tests.ns-apr20.performed.todate", header, fields),
                            GetInt("tests.ns-apr20.performed", header, fields)
                            ),
                        positive: new CommonTests(
                            GetInt("tests.ns-apr20.positive.todate", header, fields),
                            GetInt("tests.ns-apr20.positive", header, fields)
                            )
                        )
                    ),
                GetInt("age.female.todate", header, fields),
                GetInt("age.male.todate", header, fields),
                cases,
                perTreatment,
                perRegion,
                perAgeSum,
                deceasedPerAge
                );

            return(result);
        }
Exemplo n.º 2
0
        public ImmutableArray <VaccinationDay> GetVaccinationsFromRaw(string raw)
        {
            string[] lines                      = raw.Split('\n');
            var      header                     = ParseHeader(lines[0]);
            int      dateIndex                  = header["date"];
            int      administeredIndex          = header["vaccination.administered"];
            int      administeredToDateIndex    = header["vaccination.administered.todate"];
            int      administered2ndIndex       = header["vaccination.administered2nd"];
            int      administered2ndToDateIndex = header["vaccination.administered2nd.todate"];
            int      usedToDateIndex            = header["vaccination.used.todate"];
            var      usedByManufacturersIndex   = header
                                                  .Select(h => new { Parts = h.Key.Split('.'), Index = h.Value })
                                                  .Where(h => h.Parts.Length == 4 &&
                                                         string.Equals(h.Parts[0], "vaccination", StringComparison.Ordinal) &&
                                                         string.Equals(h.Parts[2], "used", StringComparison.Ordinal) &&
                                                         string.Equals(h.Parts[3], "todate", StringComparison.Ordinal))
                                                  .Select(h => new { Manufacturer = h.Parts[1], Index = h.Index })
                                                  .ToImmutableArray();
            int deliveredToDateIndex          = header["vaccination.delivered.todate"];
            var deliveredByManufacturersIndex = header
                                                .Select(h => new { Parts = h.Key.Split('.'), Index = h.Value })
                                                .Where(h => h.Parts.Length == 4 &&
                                                       string.Equals(h.Parts[0], "vaccination", StringComparison.Ordinal) &&
                                                       string.Equals(h.Parts[2], "delivered", StringComparison.Ordinal) &&
                                                       string.Equals(h.Parts[3], "todate", StringComparison.Ordinal))
                                                .Select(h => new { Manufacturer = h.Parts[1], Index = h.Index })
                                                .ToImmutableArray();
            var result = new List <VaccinationDay>();

            foreach (string line in IterateLines(lines))
            {
                var fields             = ParseLine(line);
                var date               = GetDate(fields[dateIndex]);
                var usedByManufacturer = usedByManufacturersIndex
                                         .Select(i => new { Manufacturer = i.Manufacturer, Value = GetInt(fields[i.Index]) })
                                         .Where(v => v.Value.HasValue)
                                         .ToImmutableDictionary(v => v.Manufacturer, v => v.Value.Value);
                var deliveredByManufacturer = deliveredByManufacturersIndex
                                              .Select(i => new { Manufacturer = i.Manufacturer, Value = GetInt(fields[i.Index]) })
                                              .Where(v => v.Value.HasValue)
                                              .ToImmutableDictionary(v => v.Manufacturer, v => v.Value.Value);
                var perAgeVaccinated = ImmutableArray <PerAgeBucket> .Empty;
                foreach (var bucket in ageBuckets)
                {
                    var perAge = new PerAgeBucket(
                        bucket.AgeFrom,
                        bucket.AgeTo,
                        GetInt($"vaccination.age.{bucket.Key}.1st.todate", header, fields),
                        GetInt($"vaccination.age.{bucket.Key}.2nd.todate", header, fields)
                        );
                    perAgeVaccinated = perAgeVaccinated.Add(perAge);
                }
                var item = new VaccinationDay(date.Year, date.Month, date.Day,
                                              Administered: new VaccinationData(GetInt(fields[administeredIndex]), GetInt(fields[administeredToDateIndex])),
                                              Administered2nd: new VaccinationData(GetInt(fields[administered2ndIndex]), GetInt(fields[administered2ndToDateIndex])),
                                              UsedToDate: GetInt(fields[usedToDateIndex]),
                                              UsedByManufacturer: usedByManufacturer,
                                              DeliveredToDate: GetInt(fields[deliveredToDateIndex]),
                                              DeliveredByManufacturer: deliveredByManufacturer,
                                              perAgeVaccinated
                                              );
                result.Add(item);
            }
            return(result.ToImmutableArray());
        }