private void CreateAllergy(AllergyDto dto, Patient patient, Provenance provenance) { var allergyStatus = _mappingHelper.MapLookupField <AllergyStatus> (dto.AllergyStatus); CodedConcept allergenCodedConcept = null; if (dto.AllergenCodedConcept != null) { allergenCodedConcept = new CodedConceptBuilder().WithCodedConceptDto(dto.AllergenCodedConcept); } var allergy = patient.AddAllergy(allergyStatus, allergenCodedConcept, provenance); var allergySeverityType = _mappingHelper.MapLookupField <AllergySeverityType> (dto.AllergySeverityType); var allergyType = _mappingHelper.MapLookupField <AllergyType> (dto.AllergyType); allergy.ReviseAllergySeverityType(allergySeverityType); allergy.ReviseAllergyType(allergyType); allergy.ReviseOnsetDateRange(new DateRange(dto.OnsetStartDate, dto.OnsetEndDate)); // Map reactions var deletedReactions = allergy.AllergyReactions.Where( a => dto.AllergyReactions.All(ad => ad.Key != a.Reaction.Key)).ToList(); deletedReactions.ForEach(allergy.DeleteReaction); var addedReactions = dto.AllergyReactions.Where( a => allergy.AllergyReactions.All(ad => ad.Reaction.Key != a.Key)).ToList(); addedReactions.ForEach(r => allergy.AddReaction(_mappingHelper.MapLookupField <Reaction> (r))); }