private async void ReturnEntriesForNavjot() { const string consentId = "ConsentId"; const string consentManagerId = "ConsentManagerId"; var grantedContexts = new List <GrantedContext> { new GrantedContext("RVH1002", "NCP1007"), new GrantedContext("RVH1002", "RV-MHD-01.17.0024") }; var dateRange = new DateRange("2013-12-01T15:43:00.000+0000", "2021-12-31T15:43:19.279+0000"); var hiTypes = new List <HiType> { HiType.Condition, HiType.Observation, HiType.DiagnosticReport, HiType.MedicationRequest, HiType.DocumentReference, HiType.Prescription, HiType.DischargeSummary }; var traceableDataRequest = new TraceableDataRequest(grantedContexts, dateRange, "/someUrl", hiTypes, "someTxnId", null, consentManagerId, consentId, "sometext", Uuid.Generate().ToString()); var entries = await collect.CollectData(traceableDataRequest); entries.ValueOrDefault().CareBundles.Count().Should().Be(17); }
public virtual async Task SendDataToHiu(TraceableDataRequest dataRequest, IEnumerable <Entry> data, KeyMaterial keyMaterial) { await PostTo(dataRequest.ConsentId, dataRequest.DataPushUrl, dataRequest.CareContexts, new DataResponse(dataRequest.TransactionId, data, keyMaterial), dataRequest.CmSuffix, dataRequest.CorrelationId).ConfigureAwait(false); }
public async Task HandleDataFlowMessage(TraceableDataRequest dataRequest) { var sentKeyMaterial = dataRequest.KeyMaterial; var data = await collect.CollectData(dataRequest).ConfigureAwait(false); var encryptedEntries = data.FlatMap(entries => dataEntryFactory.Process(entries, sentKeyMaterial, dataRequest.TransactionId)); encryptedEntries.MatchSome(async entries => await dataFlowClient.SendDataToHiu(dataRequest, entries.Entries, entries.KeyMaterial).ConfigureAwait(false)); }
private static void LogDataRequest(TraceableDataRequest request) { var ccList = JsonConvert.SerializeObject(request.CareContexts); var requestedHiTypes = string.Join(", ", request.HiType.Select(hiType => hiType.ToString())); Log.Information("Data request received." + $" transactionId:{request.TransactionId} , " + $"CareContexts:{ccList}, " + $"HiTypes:{requestedHiTypes}," + $" From date:{request.DateRange.From}," + $" To date:{request.DateRange.To}, " + $"CallbackUrl:{request.DataPushUrl}"); }
private Dictionary <string, List <string> > FindPatientData(TraceableDataRequest request) { try { LogDataRequest(request); var jsonData = File.ReadAllText(careContextMapFile); var patientDataMap = JsonConvert .DeserializeObject <Dictionary <string, Dictionary <string, List <CareContextRecord> > > >(jsonData); var careContextsAndListOfDataFiles = new Dictionary <string, List <string> >(); foreach (var grantedContext in request.CareContexts) { var refData = patientDataMap[grantedContext.PatientReference]; var ccData = refData?[grantedContext.CareContextReference]; var listOfDataFiles = new List <string>(); if (ccData == null) { continue; } // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator foreach (var ccRecord in ccData) { var captureTime = ParseDate(ccRecord.CapturedOn); if (!WithinRange(request.DateRange, captureTime)) { continue; } foreach (var hiType in request.HiType) { var hiTypeStr = hiType.ToString().ToLower(); var dataFiles = ccRecord.Data.GetValueOrDefault(hiTypeStr) ?? new List <string>(); if (dataFiles.Count > 0) { listOfDataFiles.AddRange(dataFiles); } } } careContextsAndListOfDataFiles.Add(grantedContext.CareContextReference, listOfDataFiles); } return(careContextsAndListOfDataFiles); } catch (Exception e) { Log.Error("Error Occured while collecting data. {Error}", e); } return(new Dictionary <string, List <string> >()); }
public async Task <Option <Entries> > CollectData(TraceableDataRequest dataRequest) { var bundles = new List <CareBundle>(); var patientData = FindPatientData(dataRequest); var careContextReferences = patientData.Keys.ToList(); foreach (var careContextReference in careContextReferences) { foreach (var result in patientData.GetOrDefault(careContextReference)) { Log.Information($"Returning file: {result}"); bundles.Add(new CareBundle(careContextReference, await FileReader.ReadJsonAsync <Bundle>(result))); } } var entries = new Entries(bundles); return(Option.Some(entries)); }