示例#1
0
        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);
        }
示例#2
0
        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");
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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());
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        // 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))
            {
            }
        }