CDA的说明和例子

CDA的说明和例子一 CDA 的定义 CDA 是一种基于 XML 的标准 用于描述和交换临床文档

大家好,欢迎来到IT知识分享网。

CDA简介

其实CDA的标准最早是1997年提出来的,慢慢的成为医疗行业的通用标准。

CDA的例子

之前为了讲课,写了下面的这个例子。

CDA的说明和例子

国家标准 

国家在这方面发布了详细的要求文档。常用的有53个文档,每个文档有几十到一百页。文档可以在官网下载 。而且文档的最后都有数据样例。

CDA的说明和例子 

CDA的说明和例子 

CDA的说明和例子 

CDA的读取和创建 

使用了C#代码 进行CDA的读取和创建。

CDA的说明和例子 

CDA的说明和例子 

 CDA文件的显示、打印和导出

CDA的说明和例子 

这是导出的PDF

 CDA的说明和例子

 导出的Word文件

CDA的说明和例子

CDADOC的代码,整个工程的代码量还是非常多的。下面仅仅一个代码文件。

using System; using System.Collections.Generic; using System.Data; using System.Text; using System.Xml; namespace CDAUtils { public class CDADOC { public CDANode Data = new CDANode(); public CDADOC() { } public virtual void set_dataset(DataSet ds) { set_datatable_文档信息(ds.Tables["文档信息"]); set_datatable_by_path(ds.Tables["患者角色"], "recordTarget/patientRole"); set_datatable_by_path(ds.Tables["文档创作者"], "author"); set_datatable_by_path(ds.Tables["文档管理机构信息"], "custodian"); set_datatable_by_path(ds.Tables["联系人"], "participant"); } public virtual DataSet get_dataset() { DataSet ds = CDADOC_XSD.get_dataset(this.GetType().Name); get_datatable_文档信息( ds.Tables["文档信息"] ); get_datatable_by_path(ds.Tables["患者角色"], "recordTarget/patientRole"); get_datatable_by_path(ds.Tables["文档创作者"], "author"); get_datatable_by_path(ds.Tables["文档管理机构信息"], "custodian"); get_datatable_by_path(ds.Tables["联系人"], "participant"); return ds; } public void get_datatable_文档信息(DataTable dt) { dt.Rows.Clear(); DataRow dr = dt.NewRow(); dr["文档流水号"] = id; dr["文档机器生成时间"] = effectiveTime; dr["文档集合编号"] = setId; dr["文档版本号"] = versionNumber; dt.Rows.Add(dr); } public void set_datatable_文档信息(DataTable dt) { if (dt == null) return; if (dt.Rows.Count < 1) { id = ""; effectiveTime = ""; setId = ""; versionNumber = ""; } else { DataRow dr = dt.Rows[0]; id = Utils.get_str(dr, "文档流水号"); effectiveTime = Utils.get_str(dr, "文档机器生成时间"); setId = Utils.get_str(dr, "文档集合编号"); versionNumber = Utils.get_str(dr, "文档版本号"); } } public void get_datatable_by_path(DataTable dt,string path) { dt.Rows.Clear(); CDANode node= Data.find_node(path); if (node!=null) { Dictionary<string, string> data = node.get_data(); DataRow dr = dt.NewRow(); foreach (DataColumn dc in dt.Columns) { string key = dc.ColumnName; if (data.ContainsKey(key)) dr[key] = data[key]; } dt.Rows.Add(dr); } } public void set_datatable_by_path(DataTable dt, string path) { if (dt == null) return; CDANode node = Data.find_node(path); if (node != null) { if (dt.Rows.Count < 1) { node.set_data(Utils.dr2dict_empaty(dt)); return; } Dictionary<string, string> data = Utils.dr2dict(dt.Rows[0]); node.set_data(data); } } public void set_doc_info(string path, string name, string v) { CDANode node = Data.find_node(path); node.set_property(name, v); } public string get_doc_info(string path, string name) { CDANode node = Data.find_node(path); return node.get_property(name); } public string effectiveTime { get { return get_doc_info("effectiveTime", "value"); } set { set_doc_info("effectiveTime", "value", value); } } public string id { get { return get_doc_info("id", "extension"); } set { set_doc_info("id", "extension", value); } } public string setId { get { return get_doc_info("setId", "text"); } set { set_doc_info("setId", "text", value); } } public string versionNumber { get { return get_doc_info("versionNumber", "text"); } set { set_doc_info("versionNumber", "text", value); } } public virtual void save(XmlDocument doc) { XmlNode ClinicalDocument = doc.SelectSingleNode("/*[name()='ClinicalDocument']"); Data.save_sub_nodes(ClinicalDocument); } public void set_patient_data(Dictionary<string, string> data) { Data.find_node("recordTarget/patientRole").set_data(data); } public void set_patient_provider_data(Dictionary<string, string> data) { Data.find_node("recordTarget/patientRole/providerOrganization").set_data(data); } public void set_legalAuthenticator_data(Dictionary<string, string> data) { Data.find_node("legalAuthenticator").set_data(data); } public Dictionary<string, string> get_patient_data() { return Data.find_node("recordTarget/patientRole").get_data(); } public void set_author_data(Dictionary<string, string> data) { Data.find_node("author").set_data(data); } public Dictionary<string, string> get_author_data() { return Data.find_node("author").get_data(); } public void set_custodian_data(Dictionary<string, string> data) { Data.find_node("custodian").set_data(data); } public Dictionary<string, string> get_custodian_data() { return Data.find_node("custodian").get_data(); } public void set_participant_data(Dictionary<string, string> data) { Data.find_node("participant").set_data(data); } public Dictionary<string, string> get_participant_data() { return Data.find_node("participant").get_data(); } public virtual void load(XmlDocument doc) { Data.Nodes.Clear(); XmlNode ClinicalDocument = doc.SelectSingleNode("/*[name()='ClinicalDocument']"); foreach (XmlNode node in ClinicalDocument.ChildNodes) { string name = node.Name; switch (name) { case "realmCode": { Data.Nodes.Add(new CS().load(node)); break; } case "typeId": { Data.Nodes.Add(new TI().load(node)); break; } case "templateId": { Data.Nodes.Add(new II().load(node)); break; } case "id": { Data.Nodes.Add(new II().load(node)); break; } case "code": { Data.Nodes.Add(new CE().load(node)); break; } case "title": { Data.Nodes.Add(new ST().load(node)); break; } case "effectiveTime": { Data.Nodes.Add(new TS().load(node)); break; } case "confidentialityCode": { Data.Nodes.Add(new CE().load(node)); break; } case "languageCode": { Data.Nodes.Add(new CS().load(node)); break; } case "setId": { Data.Nodes.Add(new TXT().load(node)); break; } case "versionNumber": { Data.Nodes.Add(new TXT().load(node)); break; } case "recordTarget": { Data.Nodes.Add(new RecordTarget().load(node)); break; } case "author": { Data.Nodes.Add(new Author().load(node)); break; } case "custodian": { Data.Nodes.Add(new Custodian().load(node)); break; } case "participant": { Data.Nodes.Add(new Participant().load(node)); break; } case "relatedDocument": { Data.Nodes.Add(new RelatedDocument().load(node)); break; } case "component": { Data.Nodes.Add(new DocComponent().load(node)); break; } } } } } } 

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/132113.html

(0)
上一篇 2025-08-02 21:00
下一篇 2025-08-02 21:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信