public async Task <QuestionnaireResponse> PostResponse([FromBody] QuestionnaireResponse response) { var fs = new FileStorageUtils(); await fs.WriteQuestionnaireResponse(response); return(response); }
public List <QuestionnaireResponse> getQRByPatientId(long id) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); List <QuestionnaireResponse> QRs = new List <QuestionnaireResponse>(); Bundle results = client.Search <QuestionnaireResponse>(new string[] { "subject=Patient/" + id }); while (results != null) { foreach (var entry in results.Entry) { QuestionnaireResponse QR = (QuestionnaireResponse)entry.Resource; QRs.Add(QR); } results = client.Continue(results); } stopwatch.Stop(); var ts = stopwatch.Elapsed; log.logTimeSpan("getQRByPatientId(" + id.ToString() + ")_from_server", ts, QRs.Count); return(QRs); }
/// <summary> /// Deserialize JSON into a FHIR QuestionnaireResponse /// </summary> public static void DeserializeJson(this QuestionnaireResponse current, ref Utf8JsonReader reader, JsonSerializerOptions options) { string propertyName; while (reader.Read()) { if (reader.TokenType == JsonTokenType.EndObject) { return; } if (reader.TokenType == JsonTokenType.PropertyName) { propertyName = reader.GetString(); if (Hl7.Fhir.Serialization.FhirSerializerOptions.Debug) { Console.WriteLine($"QuestionnaireResponse >>> QuestionnaireResponse.{propertyName}, depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}"); } reader.Read(); current.DeserializeJsonProperty(ref reader, options, propertyName); } } throw new JsonException($"QuestionnaireResponse: invalid state! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}"); }
public List <string> calculateWarning(List <QuestionnaireResponse> QRs) { //TODO current assumption is that last element will be latest, check if this is the case QuestionnaireResponse lastQR = QRs[QRs.Count - 1]; QuestionnaireResponse secondLastQR = QRs[QRs.Count - 2]; //KeyValuePair<string, float> highestDelta = new KeyValuePair<string, float>("", int.MinValue); List <string> triggeredCategories = new List <string>(); foreach (var item in secondLastQR.Item) { float valuePrev = (float)Int32.Parse(item.Answer[0].Value.ToString()); //read float?? string keyPrev = item.Text; var correspondingItem = lastQR.Item.Where(x => x.Text == keyPrev).First(); float valueLast = (float)Int32.Parse(correspondingItem.Answer[0].Value.ToString()); float delta = valueLast - valuePrev; //higher is worse if (delta >= threshold) { triggeredCategories.Add(keyPrev + " +" + delta); } } return(triggeredCategories); }
public async Task CanSubmitQuestionnaireResponse() { QuestionnaireResponseItem CreateRI(int questionId, string resp) { return(new QuestionnaireResponseItem { QuestionId = questionId, Response = resp }); } var response = await _client.GetAsync("/api/questionnaire/getquestionnaire/Questionnaire1"); Questionnaire r = await response.Content.ReadAsAsync <Questionnaire>(); var qr = new QuestionnaireResponse { QuestionnaireName = r.Name, SubmitTimeStamp = 0L, Responses = new List <QuestionnaireResponseItem> { CreateRI(1, "Tony"), CreateRI(2, "1"), CreateRI(3, "3"), CreateRI(4, "Orange choclate"), CreateRI(5, "Whaaat!") } }; var r1 = await _client.PostAsJsonAsync("/api/questionnaire/postresponse", qr); r1.EnsureSuccessStatusCode(); var c1 = await r1.Content.ReadAsStringAsync(); Debug.WriteLine($"@@@ {c1}"); }
public override Task <QuestionnaireResponse> GetQuestionnaire(Empty request, ServerCallContext context) { var resp = new QuestionnaireResponse() { Result = new QuestionnaireResponse.Types.QuestionnairePayload() }; return(Task.FromResult(resp)); }
public async Task <QuestionnaireResponse> GetQuestionnaireAsync() { Question[] questions = await _questionnaireService.GetQuestionsAsync(); var result = new QuestionnaireResponse { Questionnaire = _mapper.Map <QuestionModel[]>(questions) }; return(result); }
public List <string> calculateFlag(List <QuestionnaireResponse> QRs) { //find QRs matching "qid" string List <QuestionnaireResponse> matchingQRs = new List <QuestionnaireResponse>(); foreach (var QR in QRs) { if (QR.Questionnaire.Reference == qid) { matchingQRs.Add(QR); } } //find latest and second latest of matched QRs QuestionnaireResponse lastQR = null; QuestionnaireResponse secondLastQR = null; foreach (var QR in matchingQRs) { DateTime date = DateTime.Parse(QR.Authored); if (lastQR == null || DateTime.Parse(lastQR.Authored) < date) { secondLastQR = lastQR; lastQR = QR; } } if (lastQR != null && secondLastQR != null) { KeyValuePair <string, float> highestDelta = new KeyValuePair <string, float>("", int.MinValue); foreach (var item in secondLastQR.Item) { float valuePrev = (float)Int32.Parse(item.Answer[0].Value.ToString()); string keyPrev = item.Text; var correspondingItem = lastQR.Item.Where(x => x.Text == keyPrev).First(); float valueLast = (float)Int32.Parse(correspondingItem.Answer[0].Value.ToString()); float delta = valueLast - valuePrev; //higher is worse if (delta >= threshold) { if (delta > highestDelta.Value) { highestDelta = new KeyValuePair <string, float>(keyPrev + " +" + delta + " (" + valueLast + ")", delta); } } } return(new List <string>(new string[] { highestDelta.Key })); } return(new List <string>(new string[] { "" })); }
public List <string> calculateWarning(List <QuestionnaireResponse> QRs) { //find QRs matching "qid" string List <QuestionnaireResponse> matchingQRs = new List <QuestionnaireResponse>(); if (QRs != null) { foreach (var QR in QRs) { if (QR.Questionnaire.Reference == qid) { matchingQRs.Add(QR); } } } //find latest and second latest of matched QRs QuestionnaireResponse lastQR = null; if (matchingQRs.Count > 0) { foreach (var QR in matchingQRs) { DateTime date = DateTime.Parse(QR.Authored); if (lastQR == null || DateTime.Parse(lastQR.Authored) < date) { lastQR = QR; } } } List <string> triggeredCategories = new List <string>(); if (lastQR != null) { foreach (var item in lastQR.Item) { if (item.Text == "Suicidal thoughts") { float value = (float)Int32.Parse(item.Answer[0].Value.ToString()); if (value >= threshold) { triggeredCategories.Add("Suicidal thoughts " + value.ToString()); return(triggeredCategories); } } } } return(triggeredCategories); }
protected void Page_Load(object sender, EventArgs e) { try { if (Request.QueryString["Type"] != null) { switch (Request.QueryString["Type"]) { case "QuestionnaireResponse": if (Request.QueryString["PQID"] != null) { QuestionnaireResponse report = new QuestionnaireResponse(); securityAgent = new CryptoProvider(); report.Parameters["@PQID"].Value = securityAgent.decryptText(Request.QueryString["PQID"].Replace(" ", "+")); ReportViewerControl.Report = report; } break; case "PatientReport": if (Request.QueryString["PatientID"] != null) { ConsolidatedReport report = new ConsolidatedReport(); securityAgent = new CryptoProvider(); report.Parameters["@PatientID"].Value = securityAgent.decryptText(Request.QueryString["PatientID"].Replace(" ", "+")); ReportViewerControl.Report = report; } break; case "VisitDetails": if (Request.QueryString["PatientID"] != null) { TestSummaryReport report = new TestSummaryReport(); securityAgent = new CryptoProvider(); report.Parameters["@PatientID"].Value = securityAgent.decryptText(Request.QueryString["PatientID"].Replace(" ", "+")); ReportViewerControl.Report = report; } break; } } } catch (Exception ex) { CommonHelpers.writeLogToFile("Page_Load: ReportViewer.aspx", ex.Message); } }
public int calculateUrgency(List <QuestionnaireResponse> QRs) { //find QRs matching "qid" string List <QuestionnaireResponse> matchingQRs = new List <QuestionnaireResponse>(); if (QRs != null) { foreach (var QR in QRs) { if (QR.Questionnaire.Reference == qid) { matchingQRs.Add(QR); } } } //find latest and second latest of matched QRs QuestionnaireResponse lastQR = null; if (matchingQRs.Count > 0) { foreach (var QR in matchingQRs) { DateTime date = DateTime.Parse(QR.Authored); if (lastQR == null || DateTime.Parse(lastQR.Authored) < date) { lastQR = QR; } } } int sum = 0; if (lastQR != null) { foreach (var item in lastQR.Item) { int value = Int32.Parse(item.Answer[0].Value.ToString()); sum += value; } } return(sum); }
public List <QuestionnaireResults> ProcessAttendeeResults() { var ResultList = new List <QuestionnaireResults>(); //First get the Primary Answers IRequestMeta RequestMeta = IRequestMetaFactory.CreateRequestMeta().Set($"{FHIRAllTypes.QuestionnaireResponse.GetLiteral()}/{_PrimaryQuestionnaireResponseAnswerResourceId}"); var Answers = this.IResourceServices.GetRead(_PrimaryQuestionnaireResponseAnswerResourceId, RequestMeta); if (Answers.SuccessfulTransaction && Answers.ResourceResult != null && Answers.ResourceResult is QuestionnaireResponse QuestionnaireResponseAnswers) { //Now get the Attendee's answers string SearchQuery = $"questionnaire=Questionnaire/{_QuestionnaireResourceId}"; IRequestMeta RequestMetaQuestionnaireResource = IRequestMetaFactory.CreateRequestMeta().Set($"{FHIRAllTypes.QuestionnaireResponse.GetLiteral()}?{SearchQuery}"); var AttendeeAnswers = this.IResourceServices.GetSearch(RequestMetaQuestionnaireResource); if (AttendeeAnswers.SuccessfulTransaction && AttendeeAnswers.ResourceResult != null && AttendeeAnswers.ResourceResult is Bundle AttendeeAnswersBundle) { foreach (var Entry in AttendeeAnswersBundle.Entry) { QuestionnaireResponse QuestionnaireResponseAttendee = Entry.Resource as QuestionnaireResponse; if (QuestionnaireResponseAttendee.Source != null && !string.IsNullOrWhiteSpace(QuestionnaireResponseAttendee.Source.Reference)) { if (QuestionnaireResponseAttendee.Source.Url != null) { } else { string Ref = QuestionnaireResponseAttendee.Source.Reference; } } QuestionnaireResults QuestionnaireResults = QuestionnaireResponseChecker.Check(QuestionnaireResponseAnswers, QuestionnaireResponseAttendee); ResultList.Add(QuestionnaireResults); } } } else { throw new Exception($"Could not resolve the primary Answer QuestionnaireResponse resource with id = {_PrimaryQuestionnaireResponseAnswerResourceId}"); } return(ResultList); }
private QuestionnaireResponse createPatientQuestionReponses(FhirDateTime date, Patient patient, ServiceRequest order) { var patientQuestions = new QuestionnaireResponse { Authored = date.ToString(), Subject = order.GlobalURLReference(client.UseFullResourcePath), Source = patient.GlobalURLReference(client.UseFullResourcePath), Status = QuestionnaireResponse.QuestionnaireResponseStatus.Completed, Item = new List <QuestionnaireResponse.ItemComponent>() { new QuestionnaireResponse.ItemComponent() { LinkId = $"https://dia.medicover.com/serviceknowledgebase/question/LastMeal", Definition = $"https://dia.medicover.com/serviceknowledgebase/question/LastMeal", Text = "Time from last meal", Answer = new List <QuestionnaireResponse.AnswerComponent> { new QuestionnaireResponse.AnswerComponent { Value = new Quantity(2, "h") } } }, new QuestionnaireResponse.ItemComponent { LinkId = $"https://dia.medicover.com/serviceknowledgebase/question/Nice", Definition = $"https://dia.medicover.com/serviceknowledgebase/question/Nice", Text = "Nice enviroment?", Answer = new List <QuestionnaireResponse.AnswerComponent> { new QuestionnaireResponse.AnswerComponent { Value = new FhirBoolean(true) } } } } }; return(client.Create(patientQuestions)); }
/// <summary> /// Deserialize JSON into a FHIR QuestionnaireResponse /// </summary> public static void DeserializeJsonProperty(this QuestionnaireResponse current, ref Utf8JsonReader reader, JsonSerializerOptions options, string propertyName) { switch (propertyName) { case "identifier": current.Identifier = new Hl7.Fhir.Model.Identifier(); ((Hl7.Fhir.Model.Identifier)current.Identifier).DeserializeJson(ref reader, options); break; case "basedOn": if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read())) { throw new JsonException($"QuestionnaireResponse error reading 'basedOn' expected StartArray, found {reader.TokenType}! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}"); } current.BasedOn = new List <ResourceReference>(); while (reader.TokenType != JsonTokenType.EndArray) { Hl7.Fhir.Model.ResourceReference v_BasedOn = new Hl7.Fhir.Model.ResourceReference(); v_BasedOn.DeserializeJson(ref reader, options); current.BasedOn.Add(v_BasedOn); if (!reader.Read()) { throw new JsonException($"QuestionnaireResponse error reading 'basedOn' array, read failed! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}"); } if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); } } if (current.BasedOn.Count == 0) { current.BasedOn = null; } break; case "partOf": if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read())) { throw new JsonException($"QuestionnaireResponse error reading 'partOf' expected StartArray, found {reader.TokenType}! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}"); } current.PartOf = new List <ResourceReference>(); while (reader.TokenType != JsonTokenType.EndArray) { Hl7.Fhir.Model.ResourceReference v_PartOf = new Hl7.Fhir.Model.ResourceReference(); v_PartOf.DeserializeJson(ref reader, options); current.PartOf.Add(v_PartOf); if (!reader.Read()) { throw new JsonException($"QuestionnaireResponse error reading 'partOf' array, read failed! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}"); } if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); } } if (current.PartOf.Count == 0) { current.PartOf = null; } break; case "questionnaire": if (reader.TokenType == JsonTokenType.Null) { current.QuestionnaireElement = new Canonical(); reader.Skip(); } else { current.QuestionnaireElement = new Canonical(reader.GetString()); } break; case "_questionnaire": if (current.QuestionnaireElement == null) { current.QuestionnaireElement = new Canonical(); } ((Hl7.Fhir.Model.Element)current.QuestionnaireElement).DeserializeJson(ref reader, options); break; case "status": if (reader.TokenType == JsonTokenType.Null) { current.StatusElement = new Code <Hl7.Fhir.Model.QuestionnaireResponse.QuestionnaireResponseStatus>(); reader.Skip(); } else { current.StatusElement = new Code <Hl7.Fhir.Model.QuestionnaireResponse.QuestionnaireResponseStatus>(Hl7.Fhir.Utility.EnumUtility.ParseLiteral <Hl7.Fhir.Model.QuestionnaireResponse.QuestionnaireResponseStatus>(reader.GetString())); } break; case "_status": if (current.StatusElement == null) { current.StatusElement = new Code <Hl7.Fhir.Model.QuestionnaireResponse.QuestionnaireResponseStatus>(); } ((Hl7.Fhir.Model.Element)current.StatusElement).DeserializeJson(ref reader, options); break; case "subject": current.Subject = new Hl7.Fhir.Model.ResourceReference(); ((Hl7.Fhir.Model.ResourceReference)current.Subject).DeserializeJson(ref reader, options); break; case "encounter": current.Encounter = new Hl7.Fhir.Model.ResourceReference(); ((Hl7.Fhir.Model.ResourceReference)current.Encounter).DeserializeJson(ref reader, options); break; case "authored": if (reader.TokenType == JsonTokenType.Null) { current.AuthoredElement = new FhirDateTime(); reader.Skip(); } else { current.AuthoredElement = new FhirDateTime(reader.GetString()); } break; case "_authored": if (current.AuthoredElement == null) { current.AuthoredElement = new FhirDateTime(); } ((Hl7.Fhir.Model.Element)current.AuthoredElement).DeserializeJson(ref reader, options); break; case "author": current.Author = new Hl7.Fhir.Model.ResourceReference(); ((Hl7.Fhir.Model.ResourceReference)current.Author).DeserializeJson(ref reader, options); break; case "source": current.Source = new Hl7.Fhir.Model.ResourceReference(); ((Hl7.Fhir.Model.ResourceReference)current.Source).DeserializeJson(ref reader, options); break; case "item": if ((reader.TokenType != JsonTokenType.StartArray) || (!reader.Read())) { throw new JsonException($"QuestionnaireResponse error reading 'item' expected StartArray, found {reader.TokenType}! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}"); } current.Item = new List <QuestionnaireResponse.ItemComponent>(); while (reader.TokenType != JsonTokenType.EndArray) { Hl7.Fhir.Model.QuestionnaireResponse.ItemComponent v_Item = new Hl7.Fhir.Model.QuestionnaireResponse.ItemComponent(); v_Item.DeserializeJson(ref reader, options); current.Item.Add(v_Item); if (!reader.Read()) { throw new JsonException($"QuestionnaireResponse error reading 'item' array, read failed! depth: {reader.CurrentDepth}, pos: {reader.BytesConsumed}"); } if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); } } if (current.Item.Count == 0) { current.Item = null; } break; // Complex: QuestionnaireResponse, Export: QuestionnaireResponse, Base: DomainResource default: ((Hl7.Fhir.Model.DomainResource)current).DeserializeJsonProperty(ref reader, options, propertyName); break; } }
public ProjectQuestionnaireResponse(Project project, QuestionnaireResponse questionnaireResponse) { this.project = project; this.QuestionnaireResponse = questionnaireResponse; }
/// <summary> /// Saves the given <see cref="QuestionnaireResponse"/> to the database /// Existing answers are overwritten /// </summary> /// <param name="questionnaireId">The Id of the questionnaire to save the response for</param> /// <param name="groupId">The Id of the group for which to save the responses</param> /// <param name="questionnaireCompleted">Indicates whether or user has filled in all responses and the Questionnaire is now completed</param> /// <param name="responses">A list of <see cref="QuestionnaireResponse"/> to save</param> /// <param name="status">The optional status to set the QuestionnaireUserResponse group to. If not given the status will be adjusted based upon the QuestionnaireCompleted flag and if there are any responses</param> /// <exception cref="ArgumentException">Thrown when either the questionniare or group has not been found</exception> public void SaveQuestionnaireResponse(int questionnaireId, int groupId, bool questionnaireCompleted, List <QuestionnaireResponse> responses, QuestionnaireUserResponseGroupStatus?status = null) { Questionnaire questionnaire = this.context.Questionnaires.Where(q => q.Id == questionnaireId).SingleOrDefault(); QuestionnaireUserResponseGroup group = this.context.QuestionnaireUserResponseGroups.Where(u => u.Questionnaire.Name == questionnaire.Name && u.Id == groupId).Include(u => u.Questionnaire).Include(u => u.Patient).SingleOrDefault(); if (group == null) { throw new ArgumentException("No group has been found for the given User and Questionnaire"); } if (questionnaire == null) { throw new ArgumentException("Questionniare doesn't exist"); } if (!group.StartTime.HasValue) { group.StartTime = DateTime.Now; } if (questionnaireCompleted) { group.Completed = true; group.Status = QuestionnaireUserResponseGroupStatus.Completed; group.DateTimeCompleted = DateTime.Now; } else if (responses.Count > 0) { group.Status = QuestionnaireUserResponseGroupStatus.InProgress; } if (status.HasValue) { group.Status = status.Value; } if (responses.Count > 0) { List <QuestionnaireResponse> existingResponses = this.context.QuestionnaireResponses.Where(r => r.QuestionnaireUserResponseGroup.Id == groupId).Include(r => r.Item).ToList(); if (group.Questionnaire.Id != questionnaireId) { // delete all existing answers as we have a new questionnaire Id group.Questionnaire = this.context.Questionnaires.Where(q => q.Id == questionnaireId).Single(); } // Get all option groups that multi-select enabled List <int> multiSelectGroupsIds = this.context.QuestionnaireItemOptionGroups.Where(g => g.Item.Section.Questionnaire.Id == questionnaireId && g.ResponseType == QuestionnaireResponseType.MultiSelect).Select(g => g.Id).ToList(); // Load all the relevant options to increase performance this.context.QuestionnaireItemOptions.Where(o => o.Group.Item.Section.Questionnaire.Id == questionnaireId).Load(); foreach (QuestionnaireResponse response in responses) { // QuestionnaireItem item = this.context.QuestionnaireElements.OfType<QuestionnaireItem>().Where(q => q.Id == response.Item.Id).Include(i => i.OptionGroups.Select(g => g.Options)).Single(); QuestionnaireItemOptionGroup optionGroup = response.Option == null ? null : this.context.QuestionnaireItemOptions.Where(o => o.Id == response.Option.Id).Select(o => o.Group).Single(); if (multiSelectGroupsIds.Contains(optionGroup.Id)) { response.QuestionnaireUserResponseGroup = group; response.Item = response.Item == null ? null : this.context.QuestionnaireElements.OfType <QuestionnaireItem>().Where(el => el.Id == response.Item.Id).SingleOrDefault(); response.Option = response.Option == null ? null : this.context.QuestionnaireItemOptions.Where(o => o.Id == response.Option.Id).SingleOrDefault(); if (response.Item == null && response.Option == null) { throw new ArgumentNullException("Both Item and Option are null in the QuestionnaireResponse and this is not allowed"); } this.context.QuestionnaireResponses.Add(response); } else { QuestionnaireResponse existing = existingResponses.Where(r => r.Item.Id == response.Item.Id && r.Id == optionGroup.Id).SingleOrDefault(); if (existing != null) { existing.Option = response.Option == null ? null : this.context.QuestionnaireItemOptions.Where(o => o.Id == response.Option.Id).SingleOrDefault(); existing.ResponseValue = response.ResponseValue; existing.ResponseText = response.ResponseText; this.context.Entry(existing).State = EntityState.Modified; } else { response.QuestionnaireUserResponseGroup = group; response.Item = response.Item == null ? null : this.context.QuestionnaireElements.OfType <QuestionnaireItem>().Where(el => el.Id == response.Item.Id).SingleOrDefault(); response.Option = response.Option == null ? null : this.context.QuestionnaireItemOptions.Where(o => o.Id == response.Option.Id).SingleOrDefault(); if (response.Item == null && response.Option == null) { throw new ArgumentNullException("Both Item and Option are null in the QuestionnaireResponse and this is not allowed"); } this.context.QuestionnaireResponses.Add(response); } } } existingResponses.Where(r => this.context.Entry(r).State == EntityState.Unchanged).ToList().ForEach(o => this.context.Entry(o).State = EntityState.Deleted); } try { this.context.SaveChanges(); } catch (DbEntityValidationException e) { string errorResult = string.Empty; foreach (var eve in e.EntityValidationErrors) { errorResult += "Entity of type \" " + eve.Entry.Entity.GetType().Name + "\" in state \"" + eve.Entry.State + "\" has the following validation errors: \n"; foreach (var ve in eve.ValidationErrors) { errorResult += "- Property: \"" + ve.PropertyName + "\", Error: \"" + ve.ErrorMessage + "\" \n"; } } throw new DbEntityValidationException(errorResult, e); } }
/// <summary> /// Serialize a FHIR QuestionnaireResponse into JSON /// </summary> public static void SerializeJson(this QuestionnaireResponse current, Utf8JsonWriter writer, JsonSerializerOptions options, bool includeStartObject = true) { if (includeStartObject) { writer.WriteStartObject(); } writer.WriteString("resourceType", "QuestionnaireResponse"); // Complex: QuestionnaireResponse, Export: QuestionnaireResponse, Base: DomainResource (DomainResource) ((Hl7.Fhir.Model.DomainResource)current).SerializeJson(writer, options, false); if (current.Identifier != null) { writer.WritePropertyName("identifier"); current.Identifier.SerializeJson(writer, options); } if ((current.BasedOn != null) && (current.BasedOn.Count != 0)) { writer.WritePropertyName("basedOn"); writer.WriteStartArray(); foreach (ResourceReference val in current.BasedOn) { val.SerializeJson(writer, options, true); } writer.WriteEndArray(); } if ((current.PartOf != null) && (current.PartOf.Count != 0)) { writer.WritePropertyName("partOf"); writer.WriteStartArray(); foreach (ResourceReference val in current.PartOf) { val.SerializeJson(writer, options, true); } writer.WriteEndArray(); } if (current.QuestionnaireElement != null) { if (!string.IsNullOrEmpty(current.QuestionnaireElement.Value)) { writer.WriteString("questionnaire", current.QuestionnaireElement.Value); } if (current.QuestionnaireElement.HasExtensions() || (!string.IsNullOrEmpty(current.QuestionnaireElement.ElementId))) { JsonStreamUtilities.SerializeExtensionList(writer, options, "_questionnaire", false, current.QuestionnaireElement.Extension, current.QuestionnaireElement.ElementId); } } writer.WriteString("status", Hl7.Fhir.Utility.EnumUtility.GetLiteral(current.StatusElement.Value)); if (current.Subject != null) { writer.WritePropertyName("subject"); current.Subject.SerializeJson(writer, options); } if (current.Encounter != null) { writer.WritePropertyName("encounter"); current.Encounter.SerializeJson(writer, options); } if (current.AuthoredElement != null) { if (!string.IsNullOrEmpty(current.AuthoredElement.Value)) { writer.WriteString("authored", current.AuthoredElement.Value); } if (current.AuthoredElement.HasExtensions() || (!string.IsNullOrEmpty(current.AuthoredElement.ElementId))) { JsonStreamUtilities.SerializeExtensionList(writer, options, "_authored", false, current.AuthoredElement.Extension, current.AuthoredElement.ElementId); } } if (current.Author != null) { writer.WritePropertyName("author"); current.Author.SerializeJson(writer, options); } if (current.Source != null) { writer.WritePropertyName("source"); current.Source.SerializeJson(writer, options); } if ((current.Item != null) && (current.Item.Count != 0)) { writer.WritePropertyName("item"); writer.WriteStartArray(); foreach (QuestionnaireResponse.ItemComponent val in current.Item) { val.SerializeJson(writer, options, true); } writer.WriteEndArray(); } if (includeStartObject) { writer.WriteEndObject(); } }
public ProgressionRepresentation aggregate(List <QuestionnaireResponse> QRs) { //find QRs matching "qid" string List <QuestionnaireResponse> matchingQRs = new List <QuestionnaireResponse>(); foreach (var QR in QRs) { if (QR.Questionnaire.Reference == qid) { matchingQRs.Add(QR); } } //find latest and second latest of matched QRs QuestionnaireResponse lastQR = null; QuestionnaireResponse secondLastQR = null; foreach (var QR in matchingQRs) { DateTime date = DateTime.Parse(QR.Authored); if (lastQR == null || DateTime.Parse(lastQR.Authored) < date) { secondLastQR = lastQR; lastQR = QR; } } //calculate sums int sumLatest = 0; int sumSecondLatest = 0; if (lastQR != null && secondLastQR != null) { foreach (var item in lastQR.Item) { var valueElement = item.Answer[0].Value; int value = Int32.Parse(valueElement.ToString()); // getting the Value property from the Element class was problematic sumLatest += value; } foreach (var item in secondLastQR.Item) { var valueElement = item.Answer[0].Value; int value = Int32.Parse(valueElement.ToString()); // getting the Value property from the Element class was problematic sumSecondLatest += value; } //compare float delta = sumSecondLatest - sumLatest; if (delta < -threshold) { //sum going up => condition declining return(ProgressionRepresentation.declining); } else if ((delta >= -threshold) && (delta <= threshold)) { return(ProgressionRepresentation.steady); } else if (delta > threshold) { return(ProgressionRepresentation.improving); } return(ProgressionRepresentation.error); } else { return(ProgressionRepresentation.blank); } }
public static List <QuestionnaireResponse> ParseResponses(Dictionary <string, string> formCollection) { List <QuestionnaireResponse> questionnaireResponses = new List <QuestionnaireResponse>(); foreach (string key in formCollection.Keys) { if (key.Contains(".")) { string[] keyValues = key.Split('.'); switch (keyValues[0]) { case "Radio": case "DropDown": string[] values = formCollection[key].Split('.'); int questionnaireItemId = Convert.ToInt32(keyValues[1]); int questionnaireItemOptionId = Convert.ToInt32(values[0]); double responseValue = Convert.ToDouble(values[1]); QuestionnaireResponse response = new QuestionnaireResponse() { Item = new PCHI.Model.Questionnaire.QuestionnaireItem() { Id = questionnaireItemId }, Option = new QuestionnaireItemOption() { Id = questionnaireItemOptionId }, ResponseValue = responseValue }; questionnaireResponses.Add(response); break; case "Slider": questionnaireItemId = Convert.ToInt32(keyValues[1]); responseValue = Convert.ToDouble(formCollection[key]); questionnaireItemOptionId = Convert.ToInt32(keyValues[3]); response = new QuestionnaireResponse() { Item = new PCHI.Model.Questionnaire.QuestionnaireItem() { Id = questionnaireItemId }, Option = new QuestionnaireItemOption() { Id = questionnaireItemOptionId }, ResponseValue = responseValue, ResponseText = null }; questionnaireResponses.Add(response); break; case "CheckBox": values = formCollection[key].Split('.'); questionnaireItemId = Convert.ToInt32(keyValues[1]); questionnaireItemOptionId = Convert.ToInt32(values[0]); string responseText; if (Double.TryParse(values[1], out responseValue)) { response = new QuestionnaireResponse() { Item = new PCHI.Model.Questionnaire.QuestionnaireItem() { Id = questionnaireItemId }, Option = new QuestionnaireItemOption() { Id = questionnaireItemOptionId }, ResponseValue = responseValue } } ; else { responseText = values[1]; response = new QuestionnaireResponse() { Item = new PCHI.Model.Questionnaire.QuestionnaireItem() { Id = questionnaireItemId }, Option = new QuestionnaireItemOption() { Id = questionnaireItemOptionId }, ResponseText = responseText }; } questionnaireResponses.Add(response); break; case "DatePicker": case "TextBox": case "TextArea": questionnaireItemId = Convert.ToInt32(keyValues[1]); questionnaireItemOptionId = Convert.ToInt32(keyValues[3]); responseText = formCollection[key]; response = new QuestionnaireResponse() { Item = new PCHI.Model.Questionnaire.QuestionnaireItem() { Id = questionnaireItemId }, Option = new QuestionnaireItemOption() { Id = questionnaireItemOptionId }, ResponseText = responseText, ResponseValue = null }; questionnaireResponses.Add(response); break; case "HiddenCheckBox": values = formCollection[key].Split('.'); questionnaireItemId = Convert.ToInt32(keyValues[1]); questionnaireItemOptionId = Convert.ToInt32(keyValues[3]); responseText = keyValues[2] + "." + values[0]; response = new QuestionnaireResponse() { Item = new PCHI.Model.Questionnaire.QuestionnaireItem() { Id = questionnaireItemId }, Option = new QuestionnaireItemOption() { Id = questionnaireItemOptionId }, ResponseText = responseText, ResponseValue = null }; questionnaireResponses.Add(response); break; default: // TODO for the other option types there are break; } } } return(questionnaireResponses); }
public static QuestionnaireResults Check(QuestionnaireResponse Answers, QuestionnaireResponse Response) { var QuestionnaireResults = new QuestionnaireResults(); return(ProcessItems(Answers.Item, Response.Item, QuestionnaireResults)); }