/// <summary>Export aggregate.</summary> /// <param name="outputDirectory">Directory to write files.</param> /// <param name="timeSteps"> Number of time-step updates to generate.</param> /// <param name="timePeriodHours">Time-step period in hours (default: 24).</param> private static void ExportAggregate( string outputDirectory, int timeSteps, int timePeriodHours) { // write meta-data (canonical resources) only in t0 string dir = _outputFlat ? outputDirectory : Path.Combine(outputDirectory, "t0"); List <IReportingFormat> formats = FormatHelper.GetFormatList(); foreach (IReportingFormat format in formats) { Bundle measureBundle = SanerMeasure.GetBundle(format); if (measureBundle != null) { WriteBundle( Path.Combine( dir, $"{_filenameBaseForMeasures}-{format.Name}{_extension}"), measureBundle); } Bundle questionnaireBundle = SanerQuestionnaire.GetBundle(format); if (questionnaireBundle != null) { WriteBundle( Path.Combine( dir, $"{_filenameBaseForQuestionnaires}-{format.Name}{_extension}"), questionnaireBundle); } } // iterate over the orgs generating their data foreach (string orgId in _orgById.Keys) { Console.WriteLine($"Processing org: {orgId}"); dir = _outputFlat ? outputDirectory : Path.Combine(outputDirectory, "t0"); WriteOrgBundle(orgId, dir); CreateAggregateData( orgId, out OrgDeviceData deviceData, out OrgPatientData patientData, out OrgTestData testData, out OrgWorkerData workerData); // loop over timeSteps for (int step = 0; step < timeSteps; step++) { dir = _outputFlat ? outputDirectory : Path.Combine(outputDirectory, $"t{step}"); if (step != 0) { UpdateAggregateDataForStep( ref deviceData, ref patientData, ref testData, ref workerData); } TimeSpan hoursToSubtract = new TimeSpan(timePeriodHours * (timeSteps - step), 0, 0); DateTime dt = DateTime.UtcNow.Subtract(hoursToSubtract); WriteOrgReportBundle( orgId, dir, dt, deviceData, patientData, testData, workerData, step); } } }