Example #1
0
        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);
        }
Example #2
0
 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);
 }
Example #3
0
        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));
        }
Example #4
0
        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}");
        }
Example #5
0
        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> >());
        }
Example #6
0
        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));
        }