private void TranslateBaseClinicalAssertion(TranslationContext context, Node node, CREFModel.ClinicalAssertion assertion) { var actionIdNode = node.Children.FirstOrDefault(c => c.Name == "actionId"); if (actionIdNode != null) { assertion.ID = actionIdNode.GetAttribute<string>("root") + ':' + actionIdNode.GetAttribute<string>("extension", ""); } var textEquivalentNode = node.Children.FirstOrDefault(c => c.Name == "textEquivalent"); if (textEquivalentNode != null) { assertion.Description = textEquivalentNode.GetAttribute<string>("value"); } }
private void TranslateActionSentence(TranslationContext context, Node node, CREFModel.MissingDataAssertion result) { // If we assert that the source artifact can only use specific types of expressions, and that the expressions must be literal (evaluable at compile-time) // then we can translate the basic aspects of the assertion, code, code system, and severity. var proposalExpression = node.Children.FirstOrDefault(c => c.Name == "actionSentence") as ASTNode; if (proposalExpression != null) { switch (proposalExpression.ResultType.Name) { case "SubstanceAdministrationProposal" : case "SubstanceAdministrationEvent" : { var substanceCode = ((Node)proposalExpression).Children.FirstOrDefault(c => c.Name == "property" && c.Attributes.ContainsKey("name") && c.GetAttribute<string>("name") == "substance.substanceCode"); if (substanceCode != null) { var codeValue = substanceCode.Children.FirstOrDefault(c => c.Name == "value" && c.NodeType.GetLocalName() == "CodeLiteral"); if (codeValue != null) { result.Code = codeValue.GetAttribute<string>("code"); result.CodeSet = codeValue.GetAttribute<string>("codeSystem"); } } } break; } } }
private object GetRelatedClinicalStatement(TranslationContext context, ASTNode node, string idPropertyName, CREFModel.PatientQueryType type) { var propertyNode = GetRelatedClinicalStatementPropertyNode(node); if (propertyNode == null) { throw new InvalidOperationException("Could not resolve related clinical statement property access node."); } var id = new CREFModel.PropertyExpression(); var source = propertyNode.Children.FirstOrDefault(); if (source != null) { id.Item = context.TranslateNode(source); } id.Path = idPropertyName; var request = new CREFModel.RequestExpression(); request.Cardinality = CREFModel.RequestCardinality.Multiple; request.CardinalitySpecified = true; request.Type = type; request.TypeSpecified = true; var filter = new CREFModel.FilterExpression(); filter.Items.Add(request); var condition = new CREFModel.BinaryExpression(); condition.Operator = CREFModel.BinaryOperator.opEqual; condition.OperatorSpecified = true; var idReference = new CREFModel.PropertyExpression(); idReference.Path = "ID"; condition.Items.Add(idReference); condition.Items.Add(id); filter.Items.Add(condition); var first = new CREFModel.UnaryExpression(); first.Item = filter; first.Operator = CREFModel.UnaryOperator.opFirst; first.OperatorSpecified = true; return first; }