public void TestEscaping() { var url = new RestUrl("http://www.server.org/fhir"); url.AddParam("_since", FhirDateTime.Now().Value); var output = url.Uri; Assert.IsFalse(output.ToString().Contains("+")); // don't use un-escaped + }
public void ValidateChoiceWithConstraints() { var obs = new Observation() { Status = Observation.ObservationStatus.Final, Code = new CodeableConcept("http://somesystem.org/codes", "AABB"), Meta = new Meta { Profile = new[] { "http://validationtest.org/fhir/StructureDefinition/WeightHeightObservation" } } }; _validator.Settings.Trace = true; obs.Value = new FhirString("I should be ok"); var report = _validator.Validate(obs); Assert.True(report.Success); Assert.Equal(0, report.Warnings); // 1 warning about valueset too complex obs.Value = FhirDateTime.Now(); report = _validator.Validate(obs); Assert.False(report.Success); Assert.Equal(0, report.Warnings); obs.Value = new Quantity(78m, "kg"); report = _validator.Validate(obs); Assert.True(report.Success); Assert.Equal(0, report.Warnings); obs.Value = new Quantity(183m, "cm"); report = _validator.Validate(obs); Assert.True(report.Success); Assert.Equal(0, report.Warnings); obs.Value = new Quantity(300m, "in"); report = _validator.Validate(obs); Assert.False(report.Success); Assert.Equal(0, report.Warnings); }
public void TestUpdateEncounter() { var patient = new Patient { Name = new List <HumanName> { new HumanName { Given = new List <string> { "Test", "Update" }, Family = "Patient" } }, Active = true, Address = new List <Address> { new Address { State = "Ontario", Country = "Canada", Line = new List <string> { "123 King Street" }, City = "Hamilton" } } }; var encounter = new Encounter() { Class = new Coding("http://santedb.org/conceptset/v3-ActEncounterCode", "HH"), Status = Encounter.EncounterStatus.Finished, Period = new Period { StartElement = FhirDateTime.Now(), EndElement = FhirDateTime.Now() }, }; Resource actualPatient; Resource actualEncounter; TestUtil.CreateAuthority("TEST", "1.2.3.4", "http://santedb.org/fhir/test", "TEST_HARNESS", AUTH); using (TestUtil.AuthenticateFhir("TEST_HARNESS", AUTH)) { var patientResourceHandler = FhirResourceHandlerUtil.GetResourceHandler(ResourceType.Patient); var encounterResourceHandler = FhirResourceHandlerUtil.GetResourceHandler(ResourceType.Encounter); actualPatient = patientResourceHandler.Create(patient, TransactionMode.Commit); encounter.Subject = new ResourceReference($"urn:uuid:{actualPatient.Id}"); actualEncounter = encounterResourceHandler.Create(encounter, TransactionMode.Commit); } Assert.NotNull(actualPatient); Assert.NotNull(actualEncounter); Assert.IsInstanceOf <Patient>(actualPatient); Assert.IsInstanceOf <Encounter>(actualEncounter); var createdEncounter = (Encounter)actualEncounter; Assert.NotNull(createdEncounter); createdEncounter.Status = Encounter.EncounterStatus.Cancelled; createdEncounter.Class = new Coding("http://santedb.org/conceptset/v3-ActEncounterCode", "FLD"); Resource actual; using (TestUtil.AuthenticateFhir("TEST_HARNESS", AUTH)) { var encounterResourceHandler = FhirResourceHandlerUtil.GetResourceHandler(ResourceType.Encounter); actual = encounterResourceHandler.Update(createdEncounter.Id, createdEncounter, TransactionMode.Commit); } Assert.NotNull(actual); Assert.IsInstanceOf <Encounter>(actual); var updatedEncounter = (Encounter)actual; Assert.AreEqual(Encounter.EncounterStatus.Cancelled, updatedEncounter.Status); Assert.AreEqual("FLD", updatedEncounter.Class.Code); }
/// <summary> /// Converts a Trifolia ValueSet model to a FHIR ValueSet model. /// </summary> /// <param name="valueSet">The Trifolia ValueSet model to convert to a FHIR model</param> /// <param name="summaryType">Does not populate certain fields when a summaryType is specified.</param> /// <param name="publishedValueSets">Optional list of ValueSets that are used by a published implementation guide. If not specified, queries the database for implementation guides that this value set may be published under.</param> /// <returns>A FHIR ValueSet model</returns> public FhirValueSet Convert(ValueSet valueSet, SummaryType?summaryType = null, IEnumerable <ValueSet> publishedValueSets = null) { bool usedByPublishedIgs = false; if (publishedValueSets == null) { var implementationGuides = (from tc in valueSet.Constraints join t in this.tdb.Templates on tc.TemplateId equals t.Id select t.OwningImplementationGuide); usedByPublishedIgs = implementationGuides.Count(y => y.PublishStatus != null && y.PublishStatus.IsPublished) > 0; } else { usedByPublishedIgs = publishedValueSets.Contains(valueSet); } FhirValueSet fhirValueSet = new FhirValueSet() { Id = valueSet.GetFhirId(), Name = valueSet.Name, Status = usedByPublishedIgs ? ConformanceResourceStatus.Active : ConformanceResourceStatus.Draft, Description = new Markdown(valueSet.Description), Url = valueSet.Oid }; if (summaryType == null || summaryType == SummaryType.Data) { var activeMembers = valueSet.GetActiveMembers(DateTime.Now); if (activeMembers.Count > 0) { // Compose var compose = new FhirValueSet.ComposeComponent(); fhirValueSet.Compose = compose; foreach (var groupedMember in activeMembers.GroupBy(y => y.CodeSystem, y => y)) { var include = new FhirValueSet.ConceptSetComponent(); compose.Include.Add(include); include.System = groupedMember.Key.Oid; foreach (var member in groupedMember) { include.Concept.Add(new FhirValueSet.ConceptReferenceComponent() { Code = member.Code, Display = member.DisplayName }); } } // Expansion var expansion = new FhirValueSet.ExpansionComponent(); expansion.Identifier = string.Format("urn:uuid:{0}", Guid.NewGuid()); expansion.Timestamp = FhirDateTime.Now().ToString(); fhirValueSet.Expansion = expansion; foreach (ValueSetMember vsMember in activeMembers) { var fhirMember = new FhirValueSet.ContainsComponent() { System = STU3Helper.FormatIdentifier(vsMember.CodeSystem.Oid), Code = vsMember.Code, Display = vsMember.DisplayName }; expansion.Contains.Add(fhirMember); } } } return(fhirValueSet); }
public void WriteMetaData(IKey key, int level, Resource resource) { if (level == 0) { document.Write(InternalField.ID, this.RootId); string selflink = key.ToUriString(); document.Write(InternalField.SELFLINK, selflink); document.Write(InternalField.JUSTID, key.ResourceId); var fdt = resource.Meta.LastUpdated.HasValue ? new FhirDateTime(resource.Meta.LastUpdated.Value) : FhirDateTime.Now(); Write(InternalField.LASTUPDATED, fdt); /* * //For testing purposes: * string term = resloc.Id;. * List<Tag> tags = new List<Tag>() { new Tag(term, "http://tags.hl7.org", "labello"+term) } ; * tags.ForEach(Collect); * /* */ // DSTU2: tags //if (entry.Tags != null) //{ // entry.Tags.ToList().ForEach(Collect); //} } else { string id = resource.Id; document.Write(InternalField.ID, this.RootId + "#" + id); } string category = resource.TypeName; //ModelInfo.GetResourceNameForType(resource.GetType()).ToLower(); document.Write(InternalField.RESOURCE, category); document.Write(InternalField.LEVEL, level); }
private Timing GetDosageTiming(MedicationEntity entity) { var timing = new Timing(); timing.Repeat = new Timing.RepeatComponent(); try { entity.Duration = entity.Duration == null ? "1" : entity.Duration; var resultDuration = Regex.Match(entity.Duration, @"\d+")?.Value; if (!string.IsNullOrEmpty(resultDuration)) { int intDuration; var isvalid = int.TryParse(resultDuration, out intDuration); if (isvalid) { timing.Repeat.Duration = intDuration; } } if (entity.Duration.ToLower().Contains("day") || entity.Duration.ToLower().Contains("days")) { timing.Repeat.DurationUnit = Timing.UnitsOfTime.D; } else if (entity.Duration.ToLower().Contains("week") || entity.Duration.ToLower().Contains("weeks")) { timing.Repeat.DurationUnit = Timing.UnitsOfTime.Wk; } else { timing.Repeat.DurationUnit = Timing.UnitsOfTime.D; } if (entity.FrenquencyInDay > 0) { timing.Repeat.DurationUnit = Timing.UnitsOfTime.H; } // timing.Repeat.Count = 1; timing.Repeat.Frequency = entity.DurationInNumber; timing.Repeat.WhenElement = GetFrequencyTimings(entity); try { if (timing.Repeat.WhenElement != null) { var intcount = timing.Repeat.WhenElement.Count; timing.Repeat.Period = intcount; } } catch (Exception) { timing.Repeat.Period = 1; } // timing.EventElement = var objMedicineDuration = new Period(); objMedicineDuration.StartElement = FhirDateTime.Now(); objMedicineDuration.EndElement = new FhirDateTime(DateTime.Now.AddDays(entity.DurationInNumber)); timing.Repeat.Bounds = objMedicineDuration; return(timing); } catch (System.Exception ex) { return(null); } }