Пример #1
0
        void BuildValueSet(VSInfo vi)
        {
            vi.ClassCode.Blocks.Find("Fields")
            .DefineBlock(out CodeBlockNested fieldsBlock)
            ;

            vi.ClassCode.Blocks.Find("Methods")
            .DefineBlock(out CodeBlockNested methodBlock)
            ;

            if (vi.ValueSet.Compose.Exclude.Count > 0)
            {
                throw new NotImplementedException("Have not implemented ValueSet.Compose.Exclude");
            }

            methodBlock
            .AppendCode($"public static IEnumerable<TCoding> Codes()")
            .OpenBrace()
            ;
            foreach (ValueSet.ConceptSetComponent component in vi.ValueSet.Compose.Include)
            {
                if (component.Filter.Count > 0)
                {
                    throw new NotImplementedException("Have not implemented ValueSet.Compose.Include.Filter");
                }
                foreach (ValueSet.ConceptReferenceComponent concept in component.Concept)
                {
                    if (this.CodeSystems.TryGetValue(component.System, out CSInfo ci) == false)
                    {
                        throw new Exception($"CodeSystem {component.System} not found");
                    }
                    String codeName        = CSMisc.CodeName(concept.Code);
                    String codingReference = $"{CSMisc.CodeSystemName(ci)}.{codeName}";
                    fieldsBlock
                    .AppendCode($"public static TCoding {codeName} = new TCoding({codingReference});")
                    ;
                    methodBlock
                    .AppendCode($"yield return {codeName};")
                    ;
                }
            }

            methodBlock
            .CloseBrace()
            ;
        }
Пример #2
0
        void BuildCodeSystem(CSInfo ci)
        {
            CodeBlockNested csFields = ci.ClassCode.Blocks.Find("Fields");

            csFields
            .AppendCode($"const string System = \"{ci.CodeSystem.Url}\";");
            ;

            if (ci.CodeSystem.Filter.Count > 0)
            {
                throw new NotImplementedException("Have not implemented CodeSystem.Filter");
            }

            foreach (CodeSystem.ConceptDefinitionComponent component in ci.CodeSystem.Concept)
            {
                String display = component.Display?.Replace("\"", "'");
                String code    = component.Code;

                csFields
                .BlankLine()
                .AppendLine("/// <summary>")
                ;
                if (component.Definition != null)
                {
                    foreach (String line in component.Definition.Split('\n'))
                    {
                        String s = line
                                   .Trim()
                                   .Replace("\r", "")
                                   .Replace("%", "\\%")
                        ;
                        s = WebUtility.HtmlEncode(s);
                        csFields.AppendLine($"/// {s}");
                    }
                }

                csFields
                .AppendLine("/// </summary>")
                .AppendCode($"public static Coding {CSMisc.CodeName(component.Code)} = new Coding(System, \"{code}\", \"{display}\");")
                ;
            }
        }