Exemple #1
0
        /// <summary>
        /// 自动处理长期医嘱的状态,在病人状态由在病区变成转科或出区(以及撤销状态改变操作)时调用
        /// </summary>
        /// <param name="ceaeReason">停医嘱的原因</param>
        /// <param name="isRollback">标记是否是撤销病人状态改变操作时调用</param>
        public void AutoHandleLongOrderState(string executorCode, OrderCeaseReason ceaseReason, bool isRollback)
        {
            if (!CoreBusinessLogic.BusinessLogic.EnableEmrOrderModul)
            {
                return;
            }

            LongOrder ltemp;
            DateTime  rollbackTime = DateTime.Now;

            foreach (Order order in m_CoreLogic.GetCurrentOrderTable(false).Orders)
            {
                if ((order.State == OrderState.Audited) || (order.State == OrderState.New))
                {
                    break;
                }
                ltemp = order as LongOrder;
                if ((ltemp.State == OrderState.Executed) && (!isRollback))
                {
                    // 将执行状态直接改成停止状态
                    ltemp.SetStateToCeased();
                }
                else if ((order.State == OrderState.Ceased) && (isRollback))
                {
                    // 如果停止原因和传入原因一致,且无停止时间或停止时间晚于当前日期,则将停止状态改成执行状态
                    ltemp.RollbackStateOfCeasedOrder(ceaseReason, rollbackTime);
                }
            }

            // 保存改变的数据(自动同步到HIS中)
            m_CoreLogic.SaveAllChangedOrderData(executorCode, MacAddress, true);
        }
Exemple #2
0
 /// <summary>
 /// 将医嘱状态设为已停止
 /// </summary>
 /// <param name="ceaseReason">停止原因</param>
 public void SetStateToCeased(OrderCeaseReason ceaseReason)
 {
     if (InnerState == OrderState.Executed)
     {
         InnerState   = OrderState.Ceased;
         EditState    = OrderEditState.Modified;
         Memo         = CeaseReason.ToString(); // 保留原始的停止原因,以便于恢复状态
         _ceaseReason = ceaseReason;
     }
 }
Exemple #3
0
 /// <summary>
 /// 将符合指定条件的已停止医嘱的状态恢复到执行状态
 /// </summary>
 /// <param name="ceaseReason">停止原因</param>
 /// <param name="rollbackTime">恢复状态的时间点</param>
 public void RollbackStateOfCeasedOrder(OrderCeaseReason ceaseReason, DateTime rollbackTime)
 {
     // 如果停止原因和传入原因一致,且无停止时间或停止时间晚于当前日期,则将停止状态改成执行状态
     if ((InnerState == OrderState.Ceased) && (CeaseReason == ceaseReason))
     {
         if ((_ceaseInfo == null) || (!_ceaseInfo.HadInitialized) || (_ceaseInfo.ExecuteTime > rollbackTime))
         {
             InnerState   = OrderState.Executed;
             Memo         = "";
             EditState    = OrderEditState.Modified;
             _ceaseReason = (OrderCeaseReason)Enum.Parse(typeof(OrderCeaseReason), Memo);
         }
     }
 }
Exemple #4
0
        /// <summary>
        /// 停止医嘱(设置停止时间和停止者)
        /// </summary>
        /// <param name="employeeCode"></param>
        /// <param name="ceaseTime"></param>
        /// <param name="ceaseReason">停止原因</param>
        /// <returns></returns>
        public bool CeaseOrder(string employeeCode, DateTime ceaseTime, OrderCeaseReason ceaseReason)
        {
            if (ReadOnly)
            {
                throw new InvalidOperationException(MessageStringManager.GetString("ObjectIsReadOnly"));
            }

            if (_ceaseInfo == null)
            {
                _ceaseInfo = new OrderOperateInfo(employeeCode, ceaseTime);
            }
            else
            {
                _ceaseInfo.SetPropertyValue(employeeCode, ceaseTime);
            }

            _ceaseReason = ceaseReason;

            EditState = OrderEditState.Modified;

            FireOrderChanged(new OrderChangedEventArgs(SerialNo));
            return(true);
        }
        private void DoAfterPatientStateChanged(DataRow sourceRow, DataRow targetRow)
        {
            InpatientState oldState = (InpatientState)Enum.Parse(typeof(InpatientState)
                                                                 , targetRow[colPatientState].ToString());
            InpatientState newState = (InpatientState)Enum.Parse(typeof(InpatientState)
                                                                 , sourceRow[colPatientState].ToString());

            bool             isRollback  = false;
            OrderCeaseReason ceaseReason = OrderCeaseReason.None;
            bool             needHandle  = false; // 标记是否需要处理长期医嘱的状态

            if (oldState == InpatientState.InWard)
            {
                switch (newState)
                {
                case InpatientState.ShiftDept:
                    // 转科
                    isRollback  = false;
                    ceaseReason = OrderCeaseReason.ShiftDept;
                    needHandle  = true;
                    // 发送转科消息
                    break;

                case InpatientState.OutWard:
                    // 出区
                    isRollback  = false;
                    ceaseReason = OrderCeaseReason.LeaveHospital;
                    needHandle  = true;
                    // 发送出院消息
                    break;
                }
            }
            else if (newState == InpatientState.InWard)
            {
                switch (oldState)
                {
                case InpatientState.ShiftDept:
                case InpatientState.InICU:
                case InpatientState.InDeliveryRoom:
                    if ((targetRow[colFinalyWard].ToString() == sourceRow[colFinalyWard].ToString()) &&
                        (targetRow[colFinalyDept].ToString() == sourceRow[colFinalyDept].ToString()))
                    {
                        // 撤销转科
                        isRollback  = true;
                        ceaseReason = OrderCeaseReason.ShiftDept;
                        needHandle  = true;
                    }
                    else
                    {
                        // 如果是转科,则发送转入消息
                    }
                    break;

                case InpatientState.OutWard:
                case InpatientState.CancleBalanced:
                    // 出区召回
                    isRollback  = true;
                    ceaseReason = OrderCeaseReason.LeaveHospital;
                    needHandle  = true;
                    break;
                }
            }
        }
Exemple #6
0
        private void DoAfterPatientStateChanged(DataRow sourceRow, DataRow targetRow)
        {
            InpatientState oldState = (InpatientState)Enum.Parse(typeof(InpatientState)
                                                                 , targetRow[colPatientState].ToString());
            InpatientState newState = (InpatientState)Enum.Parse(typeof(InpatientState)
                                                                 , sourceRow[colPatientState].ToString());

            OrderCeaseReason ceaseReason = OrderCeaseReason.None;

            if (oldState == InpatientState.InWard)
            {
                switch (newState)
                {
                case InpatientState.ShiftDept:
                    // 转科
                    ceaseReason = OrderCeaseReason.ShiftDept;
                    // 发送转科消息
                    SendQCMessage(targetRow, targetRow[colBedDoctor].ToString(), oldState
                                  , Convert.ToDateTime(sourceRow[colTimeOfLeaveWard]));
                    break;

                case InpatientState.OutWard:
                    // 出区
                    ceaseReason = OrderCeaseReason.LeaveHospital;
                    // 发送出院消息
                    SendQCMessage(targetRow, targetRow[colBedDoctor].ToString(), oldState
                                  , Convert.ToDateTime(sourceRow[colTimeOfLeaveWard]));
                    break;
                }
            }
            else if (newState == InpatientState.InWard)
            {
                switch (oldState)
                {
                case InpatientState.ShiftDept:
                case InpatientState.InICU:
                case InpatientState.InDeliveryRoom:
                    if ((targetRow[colFinalyWard].ToString() == sourceRow[colFinalyWard].ToString()) &&
                        (targetRow[colFinalyDept].ToString() == sourceRow[colFinalyDept].ToString()))
                    {
                        // 撤销转科
                        ceaseReason = OrderCeaseReason.ShiftDept;
                    }
                    else
                    {
                        // 如果是转科,则发送转入消息
                        SendQCMessage(targetRow, targetRow[colBedDoctor].ToString(), oldState, DateTime.Now);
                    }
                    break;

                case InpatientState.OutWard:
                case InpatientState.CancleBalanced:
                    // 出区召回
                    ceaseReason = OrderCeaseReason.LeaveHospital;
                    break;
                }
            }
            else if (newState == InpatientState.Balanced)
            {
                if (oldState != InpatientState.Balanced) // 发送出院消息
                {
                    SendQCMessage(targetRow, targetRow[colBedDoctor].ToString(), InpatientState.OutWard, DateTime.Parse(sourceRow["OutWardDate"].ToString()));
                }
            }
        }