II: Prototype Design Specifications.

In order to meet all of the design requirements discussed above, we have organized the way we will store and structure protocol information in a way that will provide users maximum flexibility. First we will give a general overview of the basic building blocks of the system. Then we will list and discuss all of the separate classes, their components, and the purposes and functions of each. Data concerning the rules will be stored in tables which will be organized to have fields which match all of the instance variables defined for each class. In Appendix I we provide a detailed list of all components needed for detailed rules definition with brief field and function descriptions for each.

Events and Actions.

Events and Actions are the basic building blocks of the Protocol Engine. An event defines a condition that we can measure or evaluate by scanning data or reviewing information sent in a message. An action is a task that needs to be performed. Usually, the definition of an action will have elements defining who is responsible for performing the action, the time that will be required, and what the objective of the action is. On the computer, the differences between an event and action are somewhat semantic, since in order to evaluate whether an event has occurred, the computer must be performing an action. It will also need to keep track of how often it has scanned for particular events. But this will all be built into the system. As far as users are concerned, events will be measured passively. For our purposes we can say that in order to determine the occurrence or non-occurrence of an event, a computer will be scanning data that it is storing or has access to. An action will involve some additional activity on the computer's part, and will require some way to measure whether the activity was accomplished.

Expressions

An Expression is our term for abstracting any instructions telling the computer to perform a task. What we could also call events or status descriptors require a link to an Expression which tells the computer how they need to be evaluated. It is the way we will define every event, outcome, or status descriptor in ways that the computer can act on. We use the term Expression because for a computer an expression is made up of a series of operators and operands. Operators are things that compare or combine. Operands are the values that get operated on, i.e.: compared or combined. Thus at its simplest an expression could be a status descriptor, taking two operands such as a patient's age, and a value of 30, doing a greater than comparison, and returning a logical true if the patient is over thirty, and a false otherwise. Expressions can also be far more complex, and can include any number of operators and operands, including previously defined expressions. In this way any triggering event, outcome, or milestone can always refer to a single expression.

One way of handling expressions is to link every expression to a compiled routine. Unfortunately this would require that every time a user needs an expression somewhat different from what is already available, someone has to program what the new expression does. Another way is to provide building blocks from which users can pick and choose, and into which they can pass values, and in this way have the flexibility of building their own expressions without reprogramming being necessary. For example: the reason for a patient's exam is a common criteria which determines prescribed sets of actions. We could write a routine which will return a logical .t. if it sees that the reason for the visit was to receive a Pre-Placement Exam. Then we could write another routine which would check to see if the reason for the visit was a work related injury. Obviously after doing several of these we would want to have a single routine that would check the reason for the visit, and then compare it with some value which is passed as a parameter. This would allow us to have a single expression, to which we could pass a constant, and have it return a logical true or false. Additional discussions of considerations for efficiently handling expressions are provided in Appendix II. How we structure the definition, evaluation, and execution of expressions will be one of the primary design challenges of Phase II and beyond. It will have bearing to the usability, usefulness, and portability of the Protocol Engine.

Protocols

Each rule or protocol is defined by the following elements.
Number. Provides a unique identifier that can be used throughout the system to refer or point to the protocol.
Name. Descriptive name for lookup purposes so that users will always recognize the protocol being referenced.
Type Definition. Indicates the class of protocols that a specific protocol will be inheriting most of its attributes from. These classes of protocol types can also by user defined. It makes defining specific protocols a lot simpler, since most of the detailed information can be inherited from a more general definition, and then modified. Since the type definition also contains information about data files, it is used for increasing the efficiency of scanning for triggering events, since it may be possible to search for all triggering events of a specific protocol type in one pass through the data.
Trigger. Definition of condition elements that must be present for the protocol to be activated. In our design the protocol trigger is actually stored in the Expression list. The protocol keeps a reference to an expression in the expression list which defines all of the details necessary to determine if a triggering event has occurred.
Activities. A protocol can have any number of activities tied to it. Each protocol activity specifies an action to be performed, who will perform the action, when it will be performed, how many times it will need to be repeated, what the anticipated outcome will be, and how it can be measured. For each activity it will also be possible to define a list of reasons why the activity was not performed or the outcome achieved.
Outcomes. Protocols can have multiple outcomes, each of which again points to a condition defined within the expression list.



Protocol Components

We have stated that events and actions are the basic building blocks of protocols. However, in order to deal with many of the needs and complexities described previously, our overall protocol engine design includes many other components. We will describe them briefly here, and then define each component in more detail in Appendix I.

  1. Protocol Types

    Serve as templates from which specific protocols can inherit many of their attributes. In this class, protocol groups are defined in order to simplify the task of creating specific protocols that belong to the group. Each individual protocol will become an instance of its protocol type class and be able to inherit the default triggering event, activity list, outcomes, data sources, and tracking specifications defined for the group or class. The user can then modify a few elements of the protocol rather than having to fully define all elements of the protocol. For example we might want to create a protocol type for pre-placement exams that we do for any client company. In it we could describe standard actions that would be performed whenever someone came in for a pre-placement exam, what data would be tracked, and in which files that data would be found. Then whenever a user wanted to tailor a protocol to the requirements of a specific employer, by selecting the pre-placement protocol type, everything already defined for the class would be inherited, and it would only be necessary to change or add specific prescribed activities.

  2. Protocols

    The elements of every protocol, including the name, identification number, triggering event, activity list, and outcome list are described above.

  3. Actions

    This class provides the system with a list of all tasks that it is capable of performing, and information it needs to know how to perform them. Every item in a list of protocol activities will refer to an action in this list. The action class has methods which initialize, perform, and close actions.

    An action is one of the basic building blocks of the system. It is a task that needs to be performed either by the computer or by an individual. When it is to be performed by the computer, we need to provide enough information so that the computer will be able to complete it. When it is to performed by an individual, the computer can play a role in scheduling the task, monitoring that it has been performed, or checking data associated with or outcomes of the action.

  4. Expressions

    Every event, milestone, outcome, or status descriptor will be listed in the expression list. An expression is a means of describing an event in a way that a computer can interpret and compile for the purpose of rapid evaluation. The conversion of events and status descriptors into an expression list, is one of the levels of abstraction needed to make this system portable to different data and software environments.

  5. Protocol Activities

    The protocol activity definitions are the keys to making this system flexible enough to be used for critical path definition, clinical practice guidelines, clinical or treatment protocols, or standard order sets. Each protocol activity links a protocol to a predefined action item. It also put constraints on when that action needs to be performed, who will perform it, if it needs to be preceded by other actions or milestones, how often and at what frequency it needs to recur, how it should be followed up, how to determine if it was completed successfully, and what variances should be allowed to explain why it was not performed or completed.

  6. Protocol Activity Variances

    One or more variances can be defined for any protocol activity. Because of the nature of health care work, many prescribed protocol activities will not be performed, often with good justification. For a rules system to be useful, it must allow for this fact, and in order to facilitate the analysis and tracking, make it as efficient as possible for users to acknowledge that certain tasks weren't completed and explain why. The key to doing this is to pre-select the most likely reasons that any activity will not get completed, so that the majority of times that this happens, a user will be able to select the reason from the list that immediately pops up, if needed, add a few notes, and then proceed with other things. It should also be possible to indicate that if a specific protocol activity variance is selected as the reason that the activity was not completed, this is a triggering event that can initiate another protocol.

  7. Protocol Activity Tracking

    Whenever a protocol is triggered an action tracking record is initialized. One of these records is created for each activity included in the protocol. In addition to recording the date and time that the activity was initiated, this is where the system records when the activity was completed, or if it was not completed, the reason or variance, along with any additional notes.

  8. Activity Data Tracking

    The Data Tracking Class allows a user to designate specific data to be gathered as part of any single protocol activity. When a field identifier is used, the system will attempt to get the data based on information it finds in the Field Structure List, and any conditions specified in the expression reference to help narrow down a specific item of information, where there are multiples or some ambiguity. If no field or expression identifiers are filled in, the system can prompt users for the information.

  9. Data Access Components

    The data access components serve two purposes: they act as a layer between the Protocols or rules and the data to which those rules will be applied. They provide the descriptions which will allow the protocol engine to access and examine data, and they provide the translations necessary for a single set of protocols to function similarly on different sets and types of data. Data Access Components include classes describing data sources, data groupings, relations, tables, and fields, and are covered in more detail in Appendix I.




Home ck_MedRules ck_CompCare ck_Medical Grants The Company Employment Request Info Links

Copyright 1997 CK Software, Inc., 210 N. Higgins, Suite 334, Missoula, MT 59802
Phone: (406) 721-2606 Fax: 721-4225