private EntityNamePartQualifier GetQualifier(ParseContext context, XmlElement element, XmlToModelResult xmlToModelResult) { EntityNamePartQualifier result = null; if (element.HasAttribute(AbstractNameR2ElementParser <V> .QUALIFIER_ATTRIBUTE)) { string qualifierString = GetAttributeValue(element, AbstractNameR2ElementParser <V> .QUALIFIER_ATTRIBUTE); if (StringUtils.IsNotBlank(qualifierString)) { EntityNamePartQualifier qualifier = CodeResolverRegistry.Lookup <EntityNamePartQualifier>(qualifierString); if (qualifier == null) { RecordError("Invalid qualifier detected in name part: " + qualifierString, element, xmlToModelResult); } result = qualifier; if (StringUtils.Equals("PN", context.Type) && StringUtils.Equals(Ca.Infoway.Messagebuilder.Domainvalue.Basic.EntityNamePartQualifier .LEGALSTATUS.CodeValue, qualifierString)) { RecordError("Invalid qualifier for PN name part: " + qualifierString, element, xmlToModelResult); } } else { RecordError("Qualifier may not be blank.", element, xmlToModelResult); } } return(result); }
private static void PopulateStandardValuesV01(ControlActEventBean controlActEvent) { controlActEvent.EventId = new Identifier("2.16.840.1.113883.1.6", "8141234"); controlActEvent.StatusCode = CodeResolverRegistry.Lookup <ActStatus>("new"); controlActEvent.EffectiveTime = EFFECTIVE_TIME; controlActEvent.Author = CreateAuthorV01(); }
/// <exception cref="Ca.Infoway.Messagebuilder.Marshalling.HL7.XmlToModelTransformationException"></exception> private void HandlePersonName(XmlToModelResult xmlToModelResult, PersonName result, XmlNodeList childNodes) { foreach (XmlNode childNode in new XmlNodeListIterable(childNodes)) { if (childNode is XmlElement) { XmlElement element = (XmlElement)childNode; string name = NodeUtil.GetLocalOrTagName(element); string value = GetTextValue(element, xmlToModelResult); string qualifierString = GetAttributeValue(element, NAME_PART_TYPE_QUALIFIER); EntityNamePartQualifier qualifier = CodeResolverRegistry.Lookup <EntityNamePartQualifier>(qualifierString); if (StringUtils.IsNotBlank(value)) { result.AddNamePart(new EntityNamePart(value, GetPersonalNamePartType(name), qualifier)); } } else { //GN: Added in fix similar to what was done for AD.BASIC. Issue with XML containing mixture of elements and untyped text nodes. if (IsNonBlankTextNode(childNode)) { // validation will catch if this type does not allow for a free-form name result.AddNamePart(new EntityNamePart(childNode.Value.Trim(), null)); } } } }
public virtual NullFlavor ParseNullNode() { string attributeValue = GetAttributeValue(node, NULL_FLAVOR_ATTRIBUTE_NAME); NullFlavor nullFlavor = CodeResolverRegistry.Lookup <NullFlavor>(attributeValue); if (ConformanceLevelUtil.IsMandatory(this.conformanceLevel, null)) { xmlToModelResult.AddHl7Error(Hl7Error.CreateMandatoryAttributeIsNullError(NodeUtil.GetLocalOrTagName((XmlElement)node), GetAttributeValue (node, NULL_FLAVOR_ATTRIBUTE_NAME), (XmlElement)node)); } else { // RM #15431 - strictly speaking, nullFlavors are not allowed for REQUIRED fields. However, jurisdictions often ignore this restriction. // FIXME: TM (see RM18424) - once MB has error levels implemented, this can be reinstated as a warning // } else if (this.conformanceLevel != null && this.conformanceLevel == ConformanceLevel.REQUIRED) { // xmlToModelResult.addHl7Error(Hl7Error.createRequiredAttributeIsNullError( // NodeUtil.getLocalOrTagName((Element) node), // getAttributeValue(node, NULL_FLAVOR_ATTRIBUTE_NAME), // (Element) node)); if (this.isAssociation && !StringUtils.Equals(GetAttributeValue(node, NULL_FLAVOR_XSI_NIL_ATTRIBUTE_NAME), "true")) { if (!Ca.Infoway.Messagebuilder.BooleanUtils.ValueOf(Runtime.GetProperty(Ca.Infoway.Messagebuilder.Marshalling.HL7.Parser.NullFlavorHelper .MB_SUPPRESS_XSI_NIL_ON_NULLFLAVOR))) { xmlToModelResult.AddHl7Error(Hl7Error.CreateNullFlavorMissingXsiNilError(NodeUtil.GetLocalOrTagName((XmlElement)node), (XmlElement )node)); } } } return(nullFlavor); }
private Code GetCode(Type returnType, string codeValue, string codeSystem) { CodeResolver resolver = CodeResolverRegistry.GetResolver(returnType); return(StringUtils.IsBlank(codeSystem) ? resolver.Lookup <Code>(returnType, codeValue) : resolver.Lookup <Code>(returnType, codeValue, codeSystem)); }
public virtual void SetUp() { MockMessageBeanRegistry.Initialize(); CodeResolverRegistry.Register(new TrivialCodeResolver()); this.transformer = new MessageBeanTransformerImpl(new MockTestCaseMessageDefinitionService(), RenderMode.PERMISSIVE); this.factory = new DocumentFactory(); }
public virtual void SetUp() { MockMessageBeanRegistry.Initialize(); DefaultCodeResolutionConfigurator.ConfigureCodeResolversWithTrivialDefault(); CodeResolverRegistry.Register(new TrivialCodeResolver()); this.service = new MockTestCaseMessageDefinitionService(); }
private ICollection <Ca.Infoway.Messagebuilder.Domainvalue.PostalAddressUse> GetNameUses(string nameUseAttribute, XmlNode node, XmlToModelResult xmlToModelResult) { ICollection <Ca.Infoway.Messagebuilder.Domainvalue.PostalAddressUse> uses = CollUtils.SynchronizedSet(new LinkedSet <Ca.Infoway.Messagebuilder.Domainvalue.PostalAddressUse >()); if (nameUseAttribute != null) { StringTokenizer tokenizer = new StringTokenizer(nameUseAttribute); while (tokenizer.HasMoreElements()) { string token = tokenizer.NextToken(); x_BasicPostalAddressUse postalAddressUse = CodeResolverRegistry.Lookup <x_BasicPostalAddressUse>(token); if (postalAddressUse == null) { // error if a use is not found RecordError("PostalAddressUse '" + token + "' is not valid", (XmlElement)node, xmlToModelResult); } else { uses.Add(postalAddressUse); } } } return(uses); }
private static SeverityObservationBean CreateSeverityObservation() { SeverityObservationBean severityObservation = new SeverityObservationBean(); severityObservation.SetCode(CodeResolverRegistry.Lookup <Ca.Infoway.Messagebuilder.Domainvalue.ActCode>("DX")); severityObservation.SetStatusCode(CodeResolverRegistry.Lookup <ActStatus>("NORMAL")); return(severityObservation); }
public static void PopulateDetectedIssue(DetectedIssueBean detectedIssue) { detectedIssue.SetCode(CodeResolverRegistry.Lookup <ActDetectedIssueCode>("VALIDAT")); detectedIssue.SetPriorityCode(CodeResolverRegistry.Lookup <ActIssuePriority>("I")); detectedIssue.SetStatusCode(CodeResolverRegistry.Lookup <ActStatus>("NORMAL")); detectedIssue.SetText("patient not found"); detectedIssue.SetSeverityObservation(CreateSeverityObservation()); }
public virtual void SetUp() { MockMessageBeanRegistry.Initialize(); CodeResolverRegistry.Register(new TrivialCodeResolver()); this.document = GetSourceDocument(); this.service = new MockTestCaseMessageDefinitionService(); this.messageSource = new Hl7MessageSource(MockVersionNumber.MOCK_NEWFOUNDLAND, this.document, null, null, service); }
public override void SetUp() { base.SetUp(); this.result = new XmlToModelResult(); this.parser = new IvlTsElementParser(); CodeResolverRegistry.RegisterResolver(typeof(x_TimeUnitsOfMeasure), new EnumBasedCodeResolver(typeof(Ca.Infoway.Messagebuilder.Domainvalue.Basic.DefaultTimeUnit ))); }
public virtual void ShouldCopyOriginalTextFromCVImplObjectToBean() { BeanD beanD = new BeanD(); BeanWrapper wrapper = new BeanWrapper(beanD); CVImpl cvImpl = new CVImpl(CodeResolverRegistry.Lookup <IntoleranceValue>("CODE")); cvImpl.OriginalText = ORIGINAL_TEXT; wrapper.Write(new Relationship("value", "CV", Cardinality.Create("0-1")), cvImpl); Assert.AreEqual(ORIGINAL_TEXT, ((CV)beanD.GetField("someCode")).OriginalText, "originalText"); }
internal static object GetFixedValue(Relationship relationship, VersionNumber version, bool isR2, Hl7Errors errors, string propertyPath) { string fixedValue = relationship.FixedValue; if (StringUtils.Equals("BL", relationship.Type)) { return(true.ToString().EqualsIgnoreCase(fixedValue)); } else { if (StringUtils.Equals("INT.POS", relationship.Type)) { return(System.Convert.ToInt32(fixedValue)); } else { if (StringUtils.Equals("ST", relationship.Type)) { return(fixedValue); } else { if (relationship.CodedType) { Type codeType = DomainTypeHelper.GetReturnType(relationship, version, CodeTypeRegistry.GetInstance()); if (codeType == null) { codeType = typeof(Code); } Code code = CodeResolverRegistry.Lookup(codeType, fixedValue); if (code == null) { string message = System.String.Format("Fixed code lookup could not find match for {0}.{1}", relationship.DomainType, fixedValue ); errors.AddHl7Error(new Hl7Error(Hl7ErrorCode.VALUE_NOT_IN_CODE_SYSTEM, ErrorLevel.WARNING, message, propertyPath)); } //Fixup for .NET if (isR2) { return(code == null ? null : new CodedTypeR2 <Code>(code)); } else { return(code); } } else { throw new MarshallingException("Cannot handle a fixed relationship of type: " + relationship.Type); } } } } }
public static void PopulateStandardValues(ControlActEventBean controlActEvent) { controlActEvent.EventId = new Identifier("2.16.840.1.113883.1.6", "8141234"); controlActEvent.StatusCode = CodeResolverRegistry.Lookup <ActStatus>("new"); controlActEvent.EffectiveTime = EFFECTIVE_TIME; controlActEvent.Author = CreateAuthorV01(); ServiceDeliveryLocationBean location = new ServiceDeliveryLocationBean(); PopulateLocation(location); controlActEvent.Location = location; }
private CodedTypeR2 <ConsultDocumentType> GetLoincCode() { ConsultDocumentType code = CodeResolverRegistry.Lookup <ConsultDocumentType>(typeof(ConsultDocumentType), "11488-4", "2.16.840.1.113883.6.1"); CodedTypeR2 <ConsultDocumentType> loincCode = new CodedTypeR2 <ConsultDocumentType>(); loincCode.Code = code; loincCode.CodeSystemName = "LOINC"; loincCode.DisplayName = "ConsultationNote"; return(loincCode); }
private object ResolveCodeValue(Relationship relationship, string attributeValue, VersionNumber version, bool isR2) { Type returnType = (Type)DomainTypeHelper.GetReturnType(relationship, version, CodeTypeRegistry.GetInstance()); Code codeLookup = CodeResolverRegistry.Lookup(returnType, attributeValue); object result = codeLookup; if (isR2) { result = CodedTypeR2Helper.ConvertCodedTypeR2(new CodedTypeR2 <Code>(codeLookup), returnType); } return(result); }
public virtual void TearDown() { if (ignoredAsNotAllowedOriginalValue == null) { Runtime.ClearProperty(ConformanceLevelUtil.IGNORED_AS_NOT_ALLOWED); } else { Runtime.SetProperty(ConformanceLevelUtil.IGNORED_AS_NOT_ALLOWED, ignoredAsNotAllowedOriginalValue); } CodeResolverRegistry.UnregisterAll(); }
public virtual void SetUp() { MockMessageBeanRegistry.Initialize(); CodeResolverRegistry.Register(new TrivialCodeResolver()); this.service = new MockTestCaseMessageDefinitionService(); this.document = GetSourceDocument(); Hl7MessageSource rootSource = new Hl7MessageSource(MockVersionNumber.MOCK_NEWFOUNDLAND, document, null, null, this.service ); this.element = document.DocumentElement; this.partSource = rootSource.CreatePartSource(CreateRelationship("MFMI_MT700711CA.Author"), element); }
private void ParseAddressUses(XmlNode node, TelecommunicationAddress result) { string addressUses = GetAttributeValue(node, "use"); if (addressUses != null) { StringTokenizer tokenizer = new StringTokenizer(addressUses); while (tokenizer.HasMoreElements()) { result.AddAddressUse(CodeResolverRegistry.Lookup <Ca.Infoway.Messagebuilder.Domainvalue.TelecommunicationAddressUse>(tokenizer .NextToken())); } } }
public virtual void SetUp() { MockMessageBeanRegistry.Initialize(); CodeResolverRegistry.Register(new EnumBasedCodeResolver(typeof(Ca.Infoway.Messagebuilder.Domainvalue.Controlact.ActStatus ))); CodeResolverRegistry.Register(new TrivialCodeResolver()); this.service = new MockTestCaseMessageDefinitionService(); this.document = GetSourceDocument(XML); this.element = this.document.DocumentElement; Hl7MessageSource rootSource = new Hl7MessageSource(MockVersionNumber.MOCK_NEWFOUNDLAND, this.document, null, null, this.service ); this.partSource = rootSource.CreatePartSource(CreateRelationship("MCCI_MT002100CA.Sender"), element); }
private TelecommunicationAddress ParseTelecommunicationAddress(XmlNode node, XmlToModelResult xmlToModelResult) { string value = GetAttributeValue(node, "value"); if (StringUtils.IsBlank(value) && this.allowReference) { value = GetAttributeValue(node, "reference"); } // remove the // that appear after the colon if necessary // e.g. file://monkey value = value == null ? null : System.Text.RegularExpressions.Regex.Replace(value, "://", ":"); // anything before the FIRST colon is the URL scheme. Anything after it is the address. int colonIndex = value == null ? -1 : value.IndexOf(':'); string address = null; Ca.Infoway.Messagebuilder.Domainvalue.URLScheme urlScheme = null; if (colonIndex == -1) { address = value; } else { address = Ca.Infoway.Messagebuilder.StringUtils.Substring(value, colonIndex + 1); string urlSchemeString = Ca.Infoway.Messagebuilder.StringUtils.Substring(value, 0, colonIndex); urlScheme = CodeResolverRegistry.Lookup <Ca.Infoway.Messagebuilder.Domainvalue.URLScheme>(urlSchemeString); if (urlScheme == null) { string message = "Unrecognized URL scheme '" + urlSchemeString + "' in element " + XmlDescriber.DescribePath(node); xmlToModelResult.AddHl7Error(new Hl7Error(Hl7ErrorCode.DATA_TYPE_ERROR, message, (XmlElement)node)); } } TelecommunicationAddress result = new TelecommunicationAddress(); result.Address = address; result.UrlScheme = urlScheme; // handle address uses string addressUses = GetAttributeValue(node, "use"); if (addressUses != null) { StringTokenizer tokenizer = new StringTokenizer(addressUses); while (tokenizer.HasMoreElements()) { result.AddAddressUse(CodeResolverRegistry.Lookup <Ca.Infoway.Messagebuilder.Domainvalue.TelecommunicationAddressUse>(tokenizer .NextToken())); } } return(result); }
private Ca.Infoway.Messagebuilder.Domainvalue.Basic.Currency ValidateCurrency(string currencyCode, XmlNode node, XmlToModelResult xmlToModelResult) { if (StringUtils.IsBlank(currencyCode)) { return(null); } // TM - the MB enum for currency is very limited Ca.Infoway.Messagebuilder.Domainvalue.Basic.Currency currency = CodeResolverRegistry.Lookup <Ca.Infoway.Messagebuilder.Domainvalue.Basic.Currency >(currencyCode); if (currency == null) { RecordUnknownCurrencyError(currencyCode, node, xmlToModelResult); } return(currency); }
public virtual XmlToModelResult TransformFromHl7(VersionNumber version, XmlDocument hl7Message, TimeZoneInfo dateTimeZone , TimeZoneInfo dateTimeTimeZone, GenericCodeResolverRegistry codeResolverRegistryOverride) { CodeResolverRegistry.SetThreadLocalVersion(version); CodeResolverRegistry.SetThreadLocalCodeResolverRegistryOverride(codeResolverRegistryOverride); XmlToModelResult result = new Hl7SourceMapper().MapToTeal(new Hl7MessageSource(version, hl7Message, dateTimeZone, dateTimeTimeZone , this.service)); if (this.performAdditionalCdaValidationWhenUnmarshalling) { PerformAdditionalCdaValidation(version, hl7Message, result); } CodeResolverRegistry.ClearThreadLocalVersion(); CodeResolverRegistry.ClearThreadLocalCodeResolverRegistryOverride(); return(result); }
private Code GetCode(Type expectedReturnType, string codeValue, string codeSystem) { CodeResolver resolver = null; Type returnType = null; if (typeof(ANY <object>).Equals(expectedReturnType)) { // if the underlying datatype is an ANY, then we don't have enough information to figure out the domaintype; have to assume generic Code returnType = typeof(Code); resolver = new TrivialCodeResolver(); } else { returnType = GetReturnTypeAsCodeType(expectedReturnType); resolver = CodeResolverRegistry.GetResolver(returnType); } return(StringUtils.IsBlank(codeSystem) ? resolver.Lookup <Code>(returnType, codeValue) : resolver.Lookup <Code>(returnType , codeValue, codeSystem)); }
public virtual void SetUp() { ignoredAsNotAllowedOriginalValue = Runtime.GetProperty(ConformanceLevelUtil.IGNORED_AS_NOT_ALLOWED); CodeResolverRegistry.RegisterResolver(typeof(ActStatus), new EnumBasedCodeResolver(typeof(Ca.Infoway.Messagebuilder.Domainvalue.Controlact.ActStatus ))); CodeResolverRegistry.RegisterResolver(typeof(Realm), new EnumBasedCodeResolver(typeof(Domainvalue.Transport.Realm))); this.visitor = new XmlRenderingVisitor(MockVersionNumber.MOCK_MR2009); this.partBridge = new MockPartBridge(); this.attributeBridge = new MockAttributeBridge("aPropertyName"); this.interation = new Interaction(); this.interation.Name = "ABCD_IN123456CA"; Argument argument = new Argument(); argument.Name = "ABCD_MT987654CA.Baby"; argument.TemplateParameterName = "act"; argument.TraversalName = "bambino"; this.interation.Arguments.Add(argument); }
private void Setup() { //Standard configuration with HL7v3 code resolution DefaultCodeResolutionConfigurator.ConfigureCodeResolversWithTrivialDefault(); //Separate configuration for CDA code resolution GenericCodeResolverRegistry cdaCodeResolverRegistry = new GenericCodeResolverRegistryImpl(); Assembly cdaAssembly = Assembly.Load("message-builder-release-cda-ab-shr"); cdaCodeResolverRegistry.Register(new CdaCodeResolver( new TypedCodeFactory(), ResourceLoader.GetResource(cdaAssembly, "/voc.xml"), ResourceLoader.GetResource(cdaAssembly, "/vocabNameMap.xml"), CdaCodeResolver.MODE_LENIENT )); CodeResolverRegistry.RegisterCodeResolverRegistryForVersion(SpecificationVersion.CDA_AB_SHR, cdaCodeResolverRegistry); }
public virtual bool HasValidNullFlavorAttribute() { string attributeValue = GetAttributeValue(node, NULL_FLAVOR_ATTRIBUTE_NAME); if (attributeValue == null) { return(false); } else { if (StringUtils.IsEmpty(attributeValue) || CodeResolverRegistry.Lookup <NullFlavor>(attributeValue) == null) { xmlToModelResult.AddHl7Error(new Hl7Error(Hl7ErrorCode.VALUE_NOT_IN_CODE_SYSTEM, System.String.Format("The nullFavor attribute value \"{0}\" is not valid ({1})" , attributeValue, XmlDescriber.DescribeSingleElement((XmlElement)node)), (XmlElement)node)); return(false); } } return(true); }
private TelecommunicationAddress ParseValue(XmlNode node, XmlToModelResult xmlToModelResult) { string value = GetAttributeValue(node, "value"); if (StringUtils.IsBlank(value)) { xmlToModelResult.AddHl7Error(new Hl7Error(Hl7ErrorCode.DATA_TYPE_ERROR, "TEL elements must have a value or a nullFlavor." , (XmlElement)node)); } // remove the // that appear after the colon if necessary // e.g. file://monkey value = value == null ? null : System.Text.RegularExpressions.Regex.Replace(value, "://", ":"); // anything before the FIRST colon is the URL scheme. Anything after it is the address. int colonIndex = value == null ? -1 : value.IndexOf(':'); string address = null; Ca.Infoway.Messagebuilder.Domainvalue.URLScheme urlScheme = null; if (colonIndex == -1) { address = value; } else { address = Ca.Infoway.Messagebuilder.StringUtils.Substring(value, colonIndex + 1); string urlSchemeString = Ca.Infoway.Messagebuilder.StringUtils.Substring(value, 0, colonIndex); urlScheme = CodeResolverRegistry.Lookup <Ca.Infoway.Messagebuilder.Domainvalue.URLScheme>(urlSchemeString); if (urlScheme == null) { urlScheme = CodeResolverRegistry.Lookup <Ca.Infoway.Messagebuilder.Domainvalue.URLScheme>(urlSchemeString.ToLower()); if (urlScheme == null) { string message = "Unrecognized URL scheme '" + urlSchemeString + "' in element " + XmlDescriber.DescribePath(node); xmlToModelResult.AddHl7Error(new Hl7Error(Hl7ErrorCode.DATA_TYPE_ERROR, message, (XmlElement)node)); } } } TelecommunicationAddress result = new TelecommunicationAddress(); result.Address = address; result.UrlScheme = urlScheme; return(result); }
public static void PopulateStandardValuesV01(NewBaseMessageBean bean) { bean.MessageIdentifier = new Identifier("2.16.124.113620.1.1.1.1.2", "293844"); bean.MessageTimestamp = DateUtil.GetDate(2008, 5, 25, 14, 16, 10, 0); bean.ProcessingCode = Ca.Infoway.Messagebuilder.Domainvalue.Transport.ProcessingID.PRODUCTION; bean.ProcessingMode = Ca.Infoway.Messagebuilder.Domainvalue.Transport.ProcessingMode.CURRENT_PROCESSING; bean.ResponseType = Ca.Infoway.Messagebuilder.Domainvalue.Transport.ResponseMode.IMMEDIATE; bean.DesiredAcknowledgmentType = Ca.Infoway.Messagebuilder.Domainvalue.Transport.AcknowledgementCondition.ALWAYS; bean.Receiver = new Receiver(); bean.Receiver.DeviceId = new Identifier("1.2.3", "123"); bean.Receiver.SetTelecommunicationAddress(new TelecommunicationAddress(CodeResolverRegistry.Lookup <Ca.Infoway.Messagebuilder.Domainvalue.URLScheme >("http"), "123.456.789.10")); bean.Sender = new Sender(); bean.Sender.DeviceId = new Identifier("1.2.3", "123"); bean.Sender.ManufacturerModelNumber = "1.0"; bean.Sender.SoftwareName = "Panacea Pharmacy"; bean.Sender.TelecommunicationAddress = new TelecommunicationAddress(); bean.Sender.TelecommunicationAddress.Address = "987.654.321.0"; bean.Sender.TelecommunicationAddress.UrlScheme = CodeResolverRegistry.Lookup <Ca.Infoway.Messagebuilder.Domainvalue.URLScheme >("http"); }