签名业务流程的说明
概述
签名是医生对完成的报告的确认操作,是医生对报告完成状况的认可。
一般情况下一份报告对应一个录音,而一个录音对应一个病人的一次诊疗过程,因此只有那些参与了录音或诊疗过程的医生,才能具有对报告的签名权限(任何非医生用户没有对任何报告的签名权限)。
由于不同医院对于报告签名的流程有着不同的要求,所以在EHR系统的签名业务流程中设置了一些系统参数,这些参数的作用域为一个医院,它们控制着报告的签名业务流程。
由于病历报告是根据录音生成的,所以录音人员的身份资格对整个签名业务流程也起着至关重要的影响。
转诊(Refering)过程中涉及到了两个不同科室(或不同医院)的医生,这不同于非转诊(非转诊中涉及的医生一般是在同一个科室)。同一个科室的医生,他们相互熟悉,因此在某些情况中,他们中某些医生的签名可以理解为其他医生同样对该报告认可。而不同科室的医生,却不能有这样的流程规定。
备注:
- 当ref = dict,dict签名即算ref签完。
- Attd不存在,报告规定需要attd签名时,dict签了即算attd签完。
- 原则上repersente医生可以代替 sup\attd\dict医生,不管rep医生是否是正规医生都对被代替者的身份不产生影响,这份报告的dict是实习医生需要sup确认签名,即使rep医生是正规医生还是需要dict的sup签名。
- 对于Double Sign的医生身份进行了扩展,根据Sign_Cfg的设置,来确定Double Sign医生是Attending医生还是Admtting医生
签名常见的几个问题:
- 刚完成的报告MedToDoLst的Unsigned为何看不到报告?答案是:是否到了允许签名的时间,请查SystemSetting.SignWaitTime设为多少,SystemSetting.WaitDictSign是否设为ON.
- Unsigned中进去的报告,怎么Sign按钮为Disabled? 答案是:请看是否指定了电子病历编辑器!
参数说明
医生身份概述:
- Dictator 录音医生
录音医生中根据级别分为以下几类:
-
-
- sub_slevl=0,4 正规医生,他录制的报告不需要supervisor(监督医生)的复核签名,是否需要合签根据医院的Sys_cfg的COSIGN_EN = 0x01000决定,且报告的合签只需要考虑attending(接诊医生)即可,其他不考虑
- sub_slevl=1 正规医生,不需要任何人合签,他的签名即为最终签名
- sub_slevl=2 实习医生,他录制的报告是否需要合签,完全根据医院的签名设置来,如需要合签attending, supervisor都要考虑
- sub_slevl=3 实习医生,他录制的报告必须合签,且合签的对象包括attending,supervisor
-
- Attending 接诊医生
诊疗过程中的主要角色,Attending可以查Patvisit.Atnd_dr
- Admitting 入院医生
在签名流程中和Attneding医生地位等同的医生,根据Rptmas的Sign_cfg位来确定Double Sign医生是Attneding医生 还是 admitting 医生
- Supervisor 监督医生
实习医生的监督医生,Supervisor可以通过Doctor Links查到
- Represent 代替医生
代替签名医生,Represent可以通过DocLinks查到
Represent医生代替其他医生签名时,不考虑Represent医生本人的身份等级,Represent医生对报告签名后不对报告的签名流程产生额外的影响,其签名的流程还是按被代替医生的情况走,举个例子:Dictator是sub_slevl=3的实习医生,Represent是正规医生,Represent医生签名后,报告还是需要attending,supervisor医生的签名,不会因为Represent医生的身份(正规医生)而对原本的报告签名流程产生影响.
- Refering 转诊医生
由Attending医生推荐的医生,Refering可以查病人Visit记录的Refr Doctor
注意:实习医生不可能是Supervisor,也不可能是Referring,也不可能是Represent
因为Supervisor,Referring,Represent为正规医生。
当Refering医生同时是Dictator医生的话,Dictator医生签完名后,Refering医生也就签完了.
病历 参数设置说明
Sign_Cfg 中的Double Sign指定了 合签 是Attending医生还是Admitting医生
/
医院参数设置说明:
-
SystemSetting的SignWaitTime 单位 是分钟,报告完成后,在相隔WaitDictSign时间后,才能签名
-
SystemSetting的WaitDictSign 开关量,控制合签的顺序,只有当Dictator签名后,其他合签人才能继续签名
-
RefSignOrder 当报告涉及Refering时,由RefSignOrder对Attending和Refering签名顺序进行控制,已确定报告需要Attending先签还是Refering先签。
"AR" -- 报告必须由Attending先签,而后Refering才能签
"RA" -- 报告必须由Refering先签,而后Attending才能签
"" -- 报告对于Attending和Refering的签名先后顺序没有要求。
- Syst_Cfg中的关于签名的设置有:
/* syst_cfg int null - bit control */...
#define COSIGN_EN 0x1000 /* enable cosign for resident doctor */
#define ATTNSIGN_EN 0x2000 /* enable attending sign */
#define SUPSIGN_EN 0x4000 /* enable supervisor sign */
#define REPSIGN_EN 0x8000 /* enable represent sign */
#define ATTNSIGN_SIGNED 0x10000 /* if attending doctor sign, the report is signed */
#define EDITSIGN_EN 0x20000 /* Allow edit signed report */
#define WRKSCR_ONLY 0x40000 /* Allow only report information screen without report */
#define REFSIGN_EN 0x40000000 /*enable referring sign*/
#define EDITSIGN_ONLYDEMO 0x20000000 /* Allow edit sign report but only workassigment */
- COSIGN_EN -- 激活合签。决定是否需要除Dictator以外的医生对报告签名。(Dcitator的sub_slevl=3的报告除外,即,关闭该控制位则除Dictator的sub_slevl=3的报告外,所有报告,包括Refering报告都只需要Dictator医生签名,不需要其他医生的合签。)
- ATTNSIGN_EN -- 激活Attending 签名。决定是否允许Attending医生对报告进行签名。
- SUPSIGN_EN -- 激活指导医生(Supervisor)签名。决定是否允许Supervisor医生对报告进行签名。
- REPSIGN_EN -- 激活代替医生(Represent)签名。决定是否允许Represent医生代替Dictator对报告进行签名。
- ATTNSIGN_SIGNED -- 激活Attending最终签名。如果Attending Doctor签名,报告就算签完名了。(该控制位只在无Refering的报告中起作用,Refering报告中不产生影响。)
- EDITSIGN_EN -- 当报告签名完成后,仍然能够编辑报告。
- WRKSCR_ONLY - 当报告签名完成后,仍然能够编辑报告的信息,但不包括报告主体。
- REFSIGN_EN- 激活转诊医生(Refering)签名。允许Refering医生对转诊报告进行签名。
- EDITSIGN_ONLYDEMO-需要判断是否允许在Document Detail Info中做完签名后允许编辑病人信息、医生信息等,但是不能改报告本身。
签名业务流程说明
报告的签名流程中,当报告的某个签名医生不存在时,系统将自动跳过该医生,不再要求该医生签名(注意,是不要求该数据库中不存在的医生签名,不是默认该医生已经签名,也就是说不会在数据库的签名记录中添加该医生的签名记录).
-
- 不涉及到Refering****医生签名的情况下
当报告没有经过转诊时,根据录音医生Dictator的sub_slevl的级别不同,可以分为一下几种情况:
- 当录音医生Dictator的sub_slevl = 0 或 4时:
Dictator必须签名,再根据COSIGN_EN位,和ATTNSIGN_EN位的情况来确定是否需要Attending医生的合签。(如果ATTNSIGN_SIGNED置位时,则Attending签名后即可确定报告签名完毕。)
- 当录音医生Dictator的sub_slevl = 1 时:
报告只需要Dictator医生一人签名。
- 当录音医生Dictator的sub_slevl = 2 时:
Dictator必须签名,再根据COSIGN_EN位确定是否需要合签,如需要合签则根据ATTNSIGN_EN位,SUPSIGN_EN位来确定是否需要Attending医生,supervisor医生的合签。
- 当录音医生Dictator的sub_slevl = 3时:
Dictator必须签名,且不论COSIGN_EN位是否置位,都要根据ATTNSIGN_EN位,SUPSIGN_EN位来确定是否需要Attending医生,supervisor医生的合签。
-
- 涉及到Refering 医生签名的情况下:
当报告经过转诊,且REFSIGN_EN位置位时,则报告需要Refering医生的签名。
由于目前我们无法确切的知道,Dictator是同Attending一个科室,还是和Refering一个科室,因此在对报告签名时不论Dictator的sub_slevl的级别,只要医院的签名设置(COSIGN_EN,ATTNSIGN_EN,REFSIGN_EN)允许的情况下,Attending医生和Refering医生都必须对报告进行合签。由于Refering医生和Attending医生不在同一个科室,所以在转诊报告中,ATTNSIGN_SIGNED位不在发生作用。
- 当录音医生Dictator的sub_slevl = 0,1,4时:
Dictator必须签名,再根据COSIGN_EN位确定是否需要其他医生的合签,如需要合签,再根据ATTNSIGN_EN,REFSIGN_EN的置位情况确定是否需要attending医生,refering医生的合签。
- 当录音医生Dictator的sub_slevl = 2时:
Dictator必须签名,再根据COSIGN_EN位确定是否需要其他医生的合签,如需要合签,再根据SUPSIGN_EN,ATTNSIGN_EN,REFSIGN_EN的置位情况确定是否需要Supervisor医生,attending医生,refering医生的合签。
- 当录音医生Dictator的sub_slevl = 3 时:
Dictator必须签名,且不论COSIGN_EN位是否置位,都要根据SUPSIGN_EN,ATTNSIGN_EN,REFSIGN_EN的置位情况来确定是否需要Supervisor医生,attending医生,refering医生的合签。
-
- Represent 医生代替其他医生签名的情况:
某些医生可能由于休假等原因无法及时的对报告进行签名,所以这些医生可以指定同科室的其他医生为自己的Represent医生(必须为正规医生),在其无法及时对报告进行签名的情况下代替该医生对报告进行签名。Represent医生代替其他医生签名,对原本的报告签名流程不产生额外的影响,报告的签名流程还是按原本被代替医生签名的流程走.
Represent医生代替签名时,系统在数据库MedTrans表中Status位仍然标记原被代替医生已签名,而在MedSign表中则记录Represent医生代替了什么医生对报告签名了.
-
- 医生签名身份重叠的处理:
签名身份重叠,即相对于同一份报告而言,同一名医生具有2种或2种以上的身份。 有可能重叠的几种身份如下:
Dictator = Attending
即接诊医生可以自己录音(实习医生可以接诊??)
Attending = Supervisor
当Supervisor = Attending时,Dictator是实习医生,且Refering!=Dictator
Refering = Dictator
当Refering = Dictator时,Dictator不是实习医生
当医生作为其中一个身份签名时,另一身份将自动进行签名操作。
-
- 几个系统设置的优先级:
@ATTN_SIGNED > @WaitDictSign
-
- 对规则产生影响的参数主要有:
-
- 医院的规定。
- Dictator医生的级别。
- 医生相对报告的角色。
- 各种类型报告的要求。
- SystemSetting表中的设置 SignWaitTime WaitDictSign,RefSignOrder
签名状态标记
签名状态标记由Status的数据位定义:
#define MTR_DICTSIGN 0x08000 /* Dictator Signed */
#define MTR_SUPSIGN 0x04000 /* Supervisor Signed */
#define MTR_ATTSIGN 0x02000 /* Attending doctor Signed */
#define MTR_REPSIGN 0x10000 /* Represent doctor signed */
#define MTR_REFSIGN 0x20000 /*Refering doctor signed */
#define MTR_SIGNED 0x01000 /* Report is signed */
...
Dictator签名后,置MTR_DICTSIGN
Supervisor签名后,置MTR_SUPSIGN
Attending签名后,置MTR_ATTSIGN
Refering签名后,置MTR_REFSIGN
Represent代替Dictator签名后,依旧置MTR_DICTSIGN
Represent代替Supervisor签名后,依旧置MTR_SUPSIGN
Represent代替Attending签名后,依旧置MTR_ATTSIGN
Represent代替Refering签名后,依旧置MTR_REFSIGN
报告完全签名完成后,置MTR_SIGNED
签名医生关系定义
签名医生关系由Doctor Links的Status的数据位定义
/* status smallint not null - value control */
#define DOC_NULL 0 /* No relation */
#define DOC_SUPV 1 /* Supervisory targ supervise srcs */
#define DOC_REPS 2 /* Representive targ represents srcs*/
#define DOC_LEAD 3 /* Head relation targ leads srcs , medrtvl用到了这个值*/
#define DOC_SCRE 4 /* Secretary work for dictator , medrtvl用到了这个值*/
Dictator Doctor的身份由sub_slevl定义
- 0,4 - regular doctor, if not need cosign, then report is signed。为医院正式医生,如果医院不规定合签,他的签名就是最终签名;如果医院规定合签,只要检查是否需要Attending Doctor合签,不需要Supervision Doctor合签。
- 1 -- resident doctor, not require cosign, report is signed。为实习医生,不要求合签,他的签名就是最终签名
- 2 -- resident doctor 。为实习医生,是否合签(COSIGN)完全按医院的规定来。
- 3 --resident doctor, require cosign。为实习医生,不管医院如何规定,都必须合签。
报告签名纪录
报告签名纪录MedSign
* Major Electronic Sign Table */
CREATE TABLE MedSign (
/* Sign No */
document char(8) not null /* DOC# -> MedTrans */
CONSTRAINT medsign_pk PRIMARY KEY CLUSTERED,
sign_type smallint not null, /* Electronical Sign Type */
/* Sign and Chart Information */
sigd_code char(6) not null, /* Signature Doctor Code */
atnd_code char(6) null, /* Attending Doctor Code */
spvr_code char(6) null, /* Supervisor Doctor Code */
repr_code char(6) null, /* Arthourized Doctor Code for dictator */
repr_code_atnd char(6) null, /* Arthourized Doctor Code for attending*/
repr_code_spvr char(6) null, /* Arthourized Doctor Code for supervisor*/
repr_code_refr char(6) null, /* Arthourized Doctor Code for refering */
refr_code char(6) null, /*Refering Doctor Code*/
sign_dt smalldatetime null, /* date&time dictator signs */
spvs_dt smalldatetime null, /* date&time supervisor signs */
atnd_dt smalldatetime null, /* date&time attending signs */
repr_dt smalldatetime null, /* date&time Arthurized signs for dictator */
repr_dt_atnd smalldatetime null, /* date&time Arthurized signs for attending */
repr_dt_spvr smalldatetime null, /* date&time Arthurized signs for supervisor */
repr_dt_refr smalldatetime null, /* date&time Arthurized signs for refering */
refr_dt smalldatetime null, /*date&time Refering signs*/
archv_dt smalldatetime null, /* Archive Date & Time */
updt_dt smalldatetime null, /* N/A */
chk_dt smalldatetime null, /* N/A */
status smallint null, /* Signature Status, to be defined */
/* Reserved for future use */
cresv_1 varchar(31) null,
nresv_1 smallint null,
dresv_1 smalldatetime null
)
以上的MedSign表详细记录医生的报告签名信息.
Sign_code 为Dictator医生签名后记录下的Code。
Sign_dt 为Dictator医生签名的时间。
×Represent医生签名后,不仅记录相应的Represent的Code和签名时间,同时也记录被代替医生的签名时间。即,当Dictator医生的Represent签名,在记录repr_code和repr_dt的同时也要记录sign_dt.
注意,当向该表插入记录时,而dictator code没有信息时,可以向sigd_code字段填入' '空字符.
支撑签名业务的主要存储过程和函数:
包括2个存储过程和2个函数:
1. netFuncGetDrIDForDocument
判断医生与报告的关系,当医生对报告具有多个签名身份的话,该函数将所有身份返回,例如:'| 1_Dict|3_Atnd'. 返回如下信息:
'0_NoRights', -- 医生和报告无签名关系
'0_NoDocument', -- 报告不存在
'1_Dict', -- 录音医生
'2_Repr_Dict', -- 录音医生的代替医生
'3_Atnd', -- Attending医生
'4_Repr_Atnd', -- Attending医生的代替医生
'5_Spvr', -- Supervisor医生
'6_Repr_Spvr', -- Supervisor医生的代替医生
'7_Refr', -- Refering医生
'8_Repr_Refr' -- Refering医生的代替医生
'9_Admt' -- Admitting医生
'10_Repr_Admt' -- Admitting医生的代替医生
2. netFuncGetSignRight
判断医生可以以何种身份对报告进行签名,当医生可以以多种身份对报告签名的话,该函数返回多种身份.返回如下信息:
'0_NoRights', -- 无签名权限
'1_Dict', -- 可以以Dictator身份签名
'2_Repr_Dict', -- 可以以Dictator的代替医生的身份签名
'3_Atnd', -- 可以以Attending身份签名
'4_Repr_Atnd', -- 可以以Attending的代替医生的身份签名
'5_Spvr', -- 可以以Supervisor的身份签名
'6_Repr_Spvr', -- 可以以Supervisor的代替医生的身份签名
'7_Refr', -- 可以以Refering的身份签名
'8_Repr_Refr' -- 可以以Refering的代替医生的身份签名
'9_Admt' -- 可以以Admitting医生身份签名
'10_Repr_Admt' -- 可以以Admitting的代替医生的身份签名
3. netSignDocument
根据netFuncGetSignRight返回的签名身份,对报告进行签名操作(Update数据库)。当医生以多种身份签名成功后,返回所有成功身份,但是当有某步update或insert操作失败的话,则只返回' 0DataBaseError'的错误信息.返回的信息如下:
'0_NoRights' -- 没有签名权限
'0DataBaseError' -- 数据库操作update或insert出错
'1_Dict' -- 以Dictator身份签名成功
'2_Repr_Dict' -- 以Dictator的代替医生身份签名成功
'3_Atnd' -- 以Attending身份签名成功
'4_Repr_Atnd' -- 以Attending的代替医生身份签名成功
'5_Spvr' -- 以Supervisor的身份签名成功
'6_Repr_Spvr' -- 以Supervisor的代替医生身份签名成功
'7_Refr' -- 以Refering的身份签名成功
'8_Repr_Refr' -- 以Refering的代替医生身份签名成功
'9_Admt' -- 以Admitting身份签名成功
'10_Repr_Admt' -- 以Admitting代替医生的身份签名成功
4. netFinishSignDocument
根据医院的签名业务流程设置,判断报告的当前状态是否可以确定为完成签名状态。返回的信息如下:
'0_NoDocumnet' -- 报告不存在
'0_DocAlreadySigned' -- 报告为已签名完成报告
'1_FinishedSign' -- 报告成功确认为已签名完成报告
'0_NotFinished' -- 报告不可确认为已签名完成报告
EHR 中单个报告签名流程:
对于单个报告,
A) 先调用通过存储过程netGetDocumentInfo调用函数netFuncGetSignRight以确定用户对报告是否有签名权限。
B) 判断是否需要输入SignPin,如果需要输入SignPin,但用户没有输入的话,则用户无权对该报告进行签名操作。
C)根据以上判断,如果当前用户有权对报告进行签名,则Enable签名按钮,并对GlueFile对象传入可签名的信息。
D)当用户执行签名操作时,通过存储过程netSignDocument和netFinishSignDocument 对数据库签名信息记录进行更新,而后设置签名标签Session["signfile"],及用户签名身份SignID,通过GlueFile对象,生成签名文件。
E)当系统参数UPLOADINCOME 为 ON时,更新数据库中的incomepool表
注:对于一些医院存在特殊的设置,即如没有srve_dt,则不能对报告进行签名。
EHR 中的 BatchSign 批签名的处理:
批签名即是用户用户选定一批报告对该批报告进行全部签名的处理,且不需要查看报告的过程。当用户为医生用户,则在MedBrow中会出现BatchSign按钮,用户可以通过点击该按钮实现对MedBrow中选定报告的批签名。
批签名操作是轮流对每一个报告进行签名,在MedBrow中是通过对每一个选定的报告轮流执行Ajax请求来实现的。Ajax所请求的页面为../Signature/BatSignRptEx.aspx,该页面完成对一个单独报告的签名,其流程与单个报告的签名流程相同。
EHR 中的 UnSign 取消签名的处理
当登录用户的安全等级(Secu_Levl)为6时,在MedBrow中出现Unsign按钮.
Unsign只是清空数据库中相关报告的签名记录和签名状态,不对保存的报告文件进行任何处理.
TODOLIST中的等待签名报告
ToDoList中的等待签名报告(To Be Signed Reports)主要分为两类待签名报告,一类为登录医生作为其他医生的Represent医生的待签名报告,另一类为登录医生作为Dictator,Attending,Supervisor,Refering的待签名报告.
对于医生对报告是否有签名权限,可以以何种身份签名的判断是通过函数netFuncGetSignRight来实现的.
等待签名报告的存储过程为: netToDoListGetReportsTobeSigned
签名相关的报表
签名状态统计报表 - Statistic Reports/Sign Status Statistic Report
统计数据项包括:Dictator完成签名报告数,Attending完成签名报告数,Supervisior完成签名报告数,Repersent完成签名报告数,Refering完成签名报告数,总的完成签名报告数,未完成签名报告数;详细数据为对应的报告列表。
待签名的任务-To be Signed report
统计数据项包括:Dictator未完成签名报告数,Attending未完成签名报告数,Supervisior未完成签名报告数,Repersent未完成签名报告数,Refering未完成签名报告数,总的未完成签名报告数;详细数据为对应医院的录音医生分组统计数据。
关于批签名说明:
批签名是由EHR生成*.sgn文件,然后由iServer调用SignUtility.SignUtilityObj 进行后台签名。