private CodedTypeR2 <Code> CreateCodedType() { Code codeWithFixedCodeSystem = this.trivialCodeResolver.Lookup <ActStatus>(TYPE, "aCode", "1.2.840.10008.2.6.1"); Code name = this.trivialCodeResolver.Lookup <ActStatus>(TYPE, "121139", "1.2.840.10008.2.16.4"); Code value = this.trivialCodeResolver.Lookup <ActStatus>(TYPE, "anotherCode", "1.2.88888888"); CodeRole qualifier = new CodeRole(new CodedTypeR2 <Code>(name), new CodedTypeR2 <Code>(value)); CodedTypeR2 <Code> codedType = new CodedTypeR2 <Code>(codeWithFixedCodeSystem); codedType.Qualifier.Add(qualifier); return(codedType); }
public virtual void TestParseEmptyNode() { XmlNode node = CreateNode("<something/>"); CodeRole codeRole = (CodeRole) new CrR2ElementParser().Parse(CreateContext(), node, this.xmlResult).BareValue; Assert.IsFalse(this.xmlResult.IsValid()); Assert.AreEqual(1, this.xmlResult.GetHl7Errors().Count); Assert.AreEqual("CR types must have a value element (or a nullFlavor attribute)", this.xmlResult.GetHl7Errors()[0].GetMessage ()); Assert.IsNull(codeRole, "code role"); }
public virtual void TestEverythingSpecified() { CodedTypeR2 <Code> translation1 = new CodedTypeR2 <Code>(); translation1.Code = CeRxDomainTestValues.KILOGRAM; CodedTypeR2 <Code> translation2 = new CodedTypeR2 <Code>(); translation2.Code = CeRxDomainTestValues.FLUID_OUNCE; CodedTypeR2 <Code> name1 = new CodedTypeR2 <Code>(); name1.Code = CeRxDomainTestValues.CENTIMETRE; CodedTypeR2 <Code> name2 = new CodedTypeR2 <Code>(); name2.Code = Ca.Infoway.Messagebuilder.Domainvalue.Payload.AdministrativeGender.MALE; CodedTypeR2 <Code> value1 = new CodedTypeR2 <Code>(); value1.Code = Ca.Infoway.Messagebuilder.Domainvalue.Controlact.ActStatus.NORMAL; CodedTypeR2 <Code> value2 = new CodedTypeR2 <Code>(); value2.Code = Ca.Infoway.Messagebuilder.Domainvalue.Controlact.ActClass.ACT; CodeRole codeRole1 = new CodeRole(name1, value1, true); CodeRole codeRole2 = new CodeRole(name2, value2, true); CodedTypeR2 <Code> codedType = new CodedTypeR2 <Code>(); codedType.Code = CeRxDomainTestValues.CENTIMETRE; codedType.CodeSystemName = "aCodeSystemName"; codedType.CodeSystemVersion = "aCodeSystemVersion"; codedType.DisplayName = "aDisplayName"; codedType.SimpleValue = "simpleValue"; codedType.Operator = SetOperator.CONVEX_HULL; codedType.Value = BigDecimal.ONE; codedType.Operator = SetOperator.INTERSECT; codedType.Qualifier.Add(codeRole1); codedType.Qualifier.Add(codeRole2); codedType.Translation.Add(translation1); codedType.Translation.Add(translation2); codedType.Qty = 1122; EncapsulatedData originalText = new EncapsulatedData(); originalText.Content = "some original text"; codedType.OriginalText = originalText; BXIT <CodedTypeR2 <Code> > sxcm_cd = new BXITImpl <CodedTypeR2 <Code> >(codedType); string result = new BxitCdR2PropertyFormatter().Format(GetContext("name", "BXIT<CD>"), sxcm_cd); Assert.IsFalse(this.result.IsValid()); Assert.AreEqual(3, this.result.GetHl7Errors().Count); AssertXml("result", "<name code=\"cm\" codeSystem=\"1.2.3.4\" codeSystemName=\"aCodeSystemName\" codeSystemVersion=\"aCodeSystemVersion\" displayName=\"aDisplayName\" qty=\"1122\">" + "<originalText>some original text</originalText>" + "<qualifier inverted=\"true\"><name code=\"cm\" codeSystem=\"1.2.3.4\"/><value code=\"normal\" codeSystem=\"2.16.840.1.113883.5.14\" displayName=\"Normal\"/></qualifier>" + "<qualifier inverted=\"true\"><name code=\"M\" codeSystem=\"2.16.840.1.113883.5.1\" displayName=\"Male\"/><value code=\"ACT\" codeSystem=\"2.16.840.1.113883.5.6\" displayName=\"Act\"/></qualifier>" + "<translation code=\"kg\" codeSystem=\"1.2.3.4\"/>" + "<translation code=\"[foz_br]\" codeSystem=\"1.2.3.4\"/>" + "</name>" , StringUtils.Trim(result), true); }
public virtual void TestInvalidMissingValue() { CodedTypeR2 <Code> name = new CodedTypeR2 <Code>(); name.Code = Ca.Infoway.Messagebuilder.Domainvalue.Payload.AdministrativeGender.MALE; CodeRole codeRole = new CodeRole(name, null, true); string result = new CrR2PropertyFormatter().Format(GetContext("codeRole", "CR"), new CRImpl(codeRole)); Assert.IsFalse(this.result.IsValid()); Assert.AreEqual(1, this.result.GetHl7Errors().Count); AssertXml("result", "<codeRole inverted=\"true\"><name code=\"M\" codeSystem=\"2.16.840.1.113883.5.1\" displayName=\"Male\"/></codeRole>" , result); }
public virtual void TestParseValidValue() { XmlNode node = CreateNode("<something inverted=\"true\"><name code=\"testCode\" codeSystem=\"11.22.33\" /><value code=\"oneMoreCode\" codeSystem=\"55.66.77\" /></something>" ); CodeRole codeRole = (CodeRole) new CrR2ElementParser().Parse(CreateContext(), node, this.xmlResult).BareValue; Assert.IsTrue(this.xmlResult.IsValid()); Assert.IsNotNull(codeRole, "code role"); Assert.IsTrue(codeRole.Inverted); Assert.AreEqual("testCode", codeRole.Name.GetCodeValue()); Assert.AreEqual("11.22.33", codeRole.Name.GetCodeSystem()); Assert.AreEqual("oneMoreCode", codeRole.Value.GetCodeValue()); Assert.AreEqual("55.66.77", codeRole.Value.GetCodeSystem()); }
public virtual void TestValid() { CodedTypeR2 <Code> name = new CodedTypeR2 <Code>(); name.Code = Ca.Infoway.Messagebuilder.Domainvalue.Payload.AdministrativeGender.MALE; CodedTypeR2 <Code> value = new CodedTypeR2 <Code>(); value.Code = Ca.Infoway.Messagebuilder.Domainvalue.Controlact.ActStatus.COMPLETED; CodeRole codeRole = new CodeRole(name, value, true); string result = new CrR2PropertyFormatter().Format(GetContext("codeRole", "CR"), new CRImpl(codeRole)); Assert.IsTrue(this.result.IsValid()); AssertXml("result", "<codeRole inverted=\"true\"><name code=\"M\" codeSystem=\"2.16.840.1.113883.5.1\" displayName=\"Male\"/><value code=\"completed\" codeSystem=\"2.16.840.1.113883.5.14\" displayName=\"Completed\"/></codeRole>" , result); }
public virtual void TestValidFull() { CodedTypeR2 <Code> translation1 = new CodedTypeR2 <Code>(); translation1.Code = CeRxDomainTestValues.KILOGRAM; CodedTypeR2 <Code> translation2 = new CodedTypeR2 <Code>(); translation2.Code = CeRxDomainTestValues.FLUID_OUNCE; CodedTypeR2 <Code> name1 = new CodedTypeR2 <Code>(); name1.Code = CeRxDomainTestValues.CENTIMETRE; CodedTypeR2 <Code> name2 = new CodedTypeR2 <Code>(); name2.Code = Ca.Infoway.Messagebuilder.Domainvalue.Payload.AdministrativeGender.MALE; CodedTypeR2 <Code> value1 = new CodedTypeR2 <Code>(); value1.Code = Ca.Infoway.Messagebuilder.Domainvalue.Controlact.ActStatus.NORMAL; CodedTypeR2 <Code> value2 = new CodedTypeR2 <Code>(); value2.Code = Ca.Infoway.Messagebuilder.Domainvalue.Controlact.ActClass.ACT; CodeRole codeRole1 = new CodeRole(name1, value1, true); CodeRole codeRole2 = new CodeRole(name2, value2, true); CodedTypeR2 <Code> codedType = new CodedTypeR2 <Code>(); codedType.Code = CeRxDomainTestValues.CENTIMETRE; codedType.CodeSystemName = "aCodeSystemName"; codedType.CodeSystemVersion = "aCodeSystemVersion"; codedType.DisplayName = "aDisplayName"; codedType.Operator = SetOperator.INTERSECT; codedType.Qualifier.Add(codeRole1); codedType.Qualifier.Add(codeRole2); codedType.Translation.Add(translation1); codedType.Translation.Add(translation2); EncapsulatedData originalText = new EncapsulatedData(); originalText.Content = "some original text"; codedType.OriginalText = originalText; string result = new SxcmCdR2PropertyFormatter().Format(GetContext("name", "SXCM<CD>"), new SXCM_R2Impl <CodedTypeR2 <Code> > (codedType)); Assert.IsTrue(this.result.IsValid()); AssertXml("result", "<name code=\"cm\" codeSystem=\"1.2.3.4\" codeSystemName=\"aCodeSystemName\" codeSystemVersion=\"aCodeSystemVersion\" displayName=\"aDisplayName\" operator=\"A\">" + "<originalText>some original text</originalText>" + "<qualifier inverted=\"true\"><name code=\"cm\" codeSystem=\"1.2.3.4\"/><value code=\"normal\" codeSystem=\"2.16.840.1.113883.5.14\" displayName=\"Normal\"/></qualifier>" + "<qualifier inverted=\"true\"><name code=\"M\" codeSystem=\"2.16.840.1.113883.5.1\" displayName=\"Male\"/><value code=\"ACT\" codeSystem=\"2.16.840.1.113883.5.6\" displayName=\"Act\"/></qualifier>" + "<translation code=\"kg\" codeSystem=\"1.2.3.4\"/>" + "<translation code=\"[foz_br]\" codeSystem=\"1.2.3.4\"/>" + "</name>" , StringUtils.Trim(result), true); }
// only the following constraints are being handled for now: // qualifier (mandatory) // qualifier.name (mandatory) // qualifier.name.code (mandatory, fixed) // qualifier.name.codeSystem (mandatory, fixed) // qualifier.value (mandatory) // codeSystem (mandatory, fixed) public virtual void HandleConstraints(ConstrainedDatatype constraints, CodedTypeR2 <Code> codedType, ErrorLogger logger) { if (codedType == null || constraints == null) { return; } IList <CodeRole> qualifiers = codedType.Qualifier; int numberOfQualifiers = qualifiers.Count; // check if qualifier fits into constrained number of items (1, 0-1) this.constraintsHandler.ValidateConstraint("qualifier", qualifiers.IsEmpty() ? null : "qualifiers", constraints, logger); // just checks if any qualifiers provided if (numberOfQualifiers == 1) { // if only one qualifier present, check other qualifier constraints CodeRole qualifier = qualifiers[0]; CodedTypeR2 <Code> qualifierName = qualifier.Name; this.constraintsHandler.ValidateConstraint("qualifier.name", qualifierName == null ? null : "qualifierName", constraints, logger); // just checks if name provided if (qualifierName != null) { string nameCode = qualifierName.GetCodeValue(); string newNameCode = this.constraintsHandler.ValidateConstraint("qualifier.name.code", nameCode, constraints, logger); string nameCodeSystem = qualifierName.GetCodeSystem(); string newNameCodeSystem = this.constraintsHandler.ValidateConstraint("qualifier.name.codeSystem", nameCodeSystem, constraints , logger); if (!StringUtils.Equals(nameCode, newNameCode) || !StringUtils.Equals(nameCodeSystem, newNameCodeSystem)) { Type type = typeof(Code); //For .NET translation Code newName = this.trivialCodeResolver.Lookup <Code>(type, newNameCode, newNameCodeSystem); qualifierName.Code = newName; } } CodedTypeR2 <Code> qualifierValue = qualifier.Value; this.constraintsHandler.ValidateConstraint("qualifier.value", qualifierValue == null ? null : "qualifierValue", constraints , logger); } else { // just checks if value provided if (numberOfQualifiers > 1) { // (qualifier can be constrained to at most 1 and to exactly 1) Relationship qualifierConstraint = constraints.GetRelationship("qualifier"); if (qualifierConstraint != null) { Cardinality qualifierConstraintCardinality = qualifierConstraint.Cardinality; if (qualifierConstraintCardinality != null && !qualifierConstraintCardinality.Contains(numberOfQualifiers)) { string message = System.String.Format("Property {0} of type {1} is constrained to a cardinality of {2} but contains {3} values" , "qualifier", constraints.BaseType, qualifierConstraintCardinality, numberOfQualifiers); logger.LogError(Hl7ErrorCode.CDA_CARDINALITY_CONSTRAINT, ErrorLevel.ERROR, message); } } } } string codeSystem = codedType.GetCodeSystem(); codeSystem = StringUtils.IsBlank(codeSystem) ? "not provided" : codeSystem; string newCodedSystem = this.constraintsHandler.ValidateConstraint("codeSystem", codeSystem, constraints, logger); if (!StringUtils.Equals(codeSystem, newCodedSystem)) { } }