Author: Dale Sahlberg 1 COMMON ORDER ENHANCEMENT – PRH20 Lab Common Orders SELECT SERVICES ------------------------------------------------------------------------------? ANTIBODY ID ? CPK ? TYPE AND SCREEN ? BLOOD CULTURE ? DIGOXIN ? CREATININE ? BUN ? PACKED RBC CROSSMATCH ? LDH ? IGG COOMBS ? RHOGAM ? PTT ? CBC ? U/A ? CHOLESTEROL ------------------------------------------------------------------------------! (PF15) RETURN PRESS ENTER TO CONTINUE Statistical studies have shown that 20 tests can compose 86% of the total number of orders performed for the year by a department (LAB,RAD), so having a screen listing the top 20 tests can save significant order entry time. Not only can a department (LAB) use a common order screen, but a nursing floor (ICU) can also benefit from a common order screen with the top 20 orders across departments (CAR,FNS,LAB,RAD,RSP). By not having to hunt through several screens or department order lists, the common order screen results in less wasted motions and more time for patient care. For example, the user can choose from a screen: TOP - ! 1 ! 2 ! 3 ! 4 ! 5 20 ORDERS for floor: - - - - - - - - - - - – Emergency room – ICU – 1 Main – 2 South – 3 Main TOP 20 ORDERS for departments: - - - - - - - - - - - - - - - ! 6 – Cardiology ! 7 – Laboratory ! 8 – Pharmacy ! 9 – Radiology ! 10– Respiratory CURRENT METHODS Methods used to display common orders: 1) 2) 3) 4) 5) Alphabrowse Ordersets Hard coded screen Driver tcls Profiles What are the advantages or drawbacks to each method? Alphabrowse: Alphabrowse is driven directly from the service master so it is one of the simplest display methods to implement. Departments other than MIS can maintain the service master, freeing up MIS time. The alphabrowse program is great for listing all the orders in a subdepartment, such as CHE (chemistry) but the list can be long with many !NEXT PAGE and !PREV PAGE prompts. Alphabrowse has limited functionality when you just want a short top 20 list or a mix of orders across departments (ICU). Alphabrowse can have slow response times (heavy CPU usage). Author: Dale Sahlberg 2 Ordersets: The convenience or department ordersets for common orders have the advantage of listing many orders under a single service master code – the orders then are easily displayed on a selection screen. However, there is considerable work involved in creating or modifying these ordersets. CONVENIENCE ORDERSET MAINT ORDERSET: LAB1957 DEPT SVC CODE DISPLAY MEMBERS DESCRIPTION TYPE ORD MAX ACT REQ CLASS IND QTY IND IND ------------------------------------------------------------------------------SELECT ONE MEMBER TO DISPLAY: ! 1 ANTIBODY ID ! 2 TYPE AND SCREEN ! 3 CPK ! 4 BLOOD CULTURE ! 5 CREATININE ! 6 DIGOXIN ! 7 BUN ! 8 LDH ! 9 CHOLESTEROL ------------------------------------------------------------------------------! PF15 Action Menu ENTER # __ PRESS ENTER Each of those members open up to a screen that lists additional data. CONVENIENCE ORDERSET MAINT MEMBER DEFAULT INFO ORDERSET: DESC: SVC CODE: ------------------------------------------------------------------------------ORDERING PARTY: ORDER PRIORITY: DLY/WKLY FREQ: SVC CATEGORY: DURATION: COUNTERSGN IND: QUANTITY: COMMENTS: DEFAULT TCL: ------------------------------------------------------------------------------!PF15 ACTION MENU !PF5 COMMON INFO & ENTER TO RETURN Ordersets create @tcls - these @ tcls can be numerous depending on how many ordersets and submembers are created. Example below of @ tcl @0094501 "%GETX#02"='DEXTROSE 5%-0.45% SALINE' "C1284#02"=250.0000 "C1292#02"='2' "C1313#02"='ML' "C2101#02"='PHM06940' "C2231#02"='BAG' "C2220#02"=1.000 "C2233#02"='ML' "C2234#02"=250.0000 "C1215"='QID' "C1216"=5 "C1217"=1 "C1219"='DAILY' "C1220"='ROUTINE' "C1264"='D' Author: Dale Sahlberg Ordersets can also have @ tcls which store “default” values that are not always desirable in an order session: for example, a priority of 'ROUTINE' - which is fine for 1MAIN but not when ICU needs ‘STAT’. 3 Hard coded fields on a screen: Hard coded fields with test names & service codes on a screen require major time to construct and are difficult to maintain. SELECT SERVICES. ? FERRITIN ? T3 ? MAGNESIUM ? GAMMA GT ? T4 ---------------------------------------------------------------------------LINE 08 POSITION 03 DELAY PEN-DETECTABLE INPUT FIELD GROUP NAME: %DO (ENTER %DO FOR STACK COMMAND FIELD) FIELD NAME: SERVICE MAXIMUM ITEMS SELECTABLE IN GROUP: 18 SPECIFY WHAT IS TO BE DONE WHEN THIS FIELD IS PROBED. IF THIS IS NOT A %DO FIELD, ENTER VALUE TO BE ASSIGNED TO THE GROUP NAME ABOVE. IF %DO, SPECIFY A SERIES OF ONE OR MORE STACK COMMANDS: "S2101#19"='LAB5002019',"S2105#19"='FERRITIN' Driver tcls: Driver tcls have all the orders defined in fields that map to the display screen: "%SBHEADR"='Common Blood Bank Orders' "%ORABDPT"='LAB' "%ORABSDP"='BLB' "%ORS1"='LAB5001001' "%ZOSV"='01 ANTIBODY CD' "%ORS1#02"='LAB5001012' "%ZOSV#02"='02 TYPE & SCREEN' "%ORS1#03"='LAB5001009' "%ZOSV#03"='03 PACKED RBC CROSS MATCH' "%ORS1#04"='LAB9501999' and many more fields … Driver tcls become a time consuming task, with significant work done just to insert or delete an order in the list – all the fields have to be re-sequenced. Wrongly numbered fields ("%ORS1#03"='LAB5001009',"%ZOSV#04"='03 PACKED RBC CROSS MATCH') can result in mixed descriptions & service codes – potentially affecting patient care. There can be hundreds of these tcls (3270 and GOLD versions) to maintain. Profiles: If a profile is used, is each test then a primary member? The profile sorts alphabetically so that can be a limitation for a list of common orders that are in “order of frequent use” (not alphabetical) – such as an EMR common order list. The ‘primary member’ method of storing service codes can result in a profile with hundreds of members. What if the dept/floor name becomes the primary member, such as LAB or 1MAIN, with the orders as components of that member? You are right back to the challenge of how to insert new orders or delete old tests under that member – a lot of work to resort all the fields. This is the same sequencing challenge that driver tcls present. Is there an easier method for displaying common orders? What if the best features of the alphabrowse, ordersets, profile and driver tcls are combined to create an entirely new display application? The new system would need to: A) insert or delete a member quickly B) automatically re-sequence the fields/members C) store all common orders in one location D) list orders alphabetically or in any other order E) still use existing OAS Author: Dale Sahlberg Think of how: 1) Much data entry time could be saved? 2) Many maintenance headaches will be prevented? 3) Aspirin will no longer be needed by the case? Can this idea be turned into reality? How can all of this be possible? By the creation of the PRH20 common order profile. (pronounced PRH two zero – not PRH two oh as in water H2O) NEW METHOD – PRH20 The PRH20 system is designed to be: 1) Easy to maintain – naming conventions are logical and easily tied to the service master departments 2) Flexible – display alphabetically or in any other order 3) Centrally located – uses a single profile instead of many tcls to store common order data 4) Dynamic – departments all share a single dynamic display screen that is “painted” by department codes 5) Cost effective – uses existing OAS and not an external XFR program costing $$$. Flow - with lab as an example: ! 01 ENTER ORDER Orders Security Tcl: “UOMASTER”= SECURLAB Paints the next screen with allowed departments Department selection screen: DEPTMAST User selects a department Subdepartment tcl: Subdepartment screen: LABSUBDP SUBDEPTS PRH20 - TOP20 Member: LABCHEMI User selects common orders PRH20 PROFILE STEP 1: DEFINE ALL THE PROFILE FIELDS Create 20 action fields, 20 service name fields, 20 service code fields and 1 primary member name field. Define in the data dictionary 20 action fields. PCH20HA1 Component: Action Code Component name: X Type: 1 Length: The action field is designed for internal sequence processing. Repeat the PCH20HA1 field creation process all the way to PCH20HA9, then PCH20HAA to PCH20HAK. Sequencing logic will analyze these fields to determine how to sort the subcomponents of a PRH20 primary member. The ‘action’ field will store the values of: I – Insert D – Delete 4 Author: Dale Sahlberg Define in the data dictionary 20 service name fields. PCH20HD1 Component: Service Name Component name: X Type: 30 Length: The service name field will store the order description, such as “PACKED RBC CROSS MATCH”. The service name field is designed to match the “%ZOSV” field. Repeat the PCH20HD1 field creation process all the way to PCH20HD9, then PCH20HDA to PCH20HDK. Define in the data dictionary 20 service code fields. PCH20HS1 Component: Service Code Component name: X Type: 16 Length: The service code field will store the order code, such as “LAB5001009”. The service code field is designed to match the “%ORS1” field. Repeat the PCH20HS1 field creation process all the way to PCH20HS9, then PCH20HSA to PCH20HSK. Define in the data dictionary 1 primary member field. PCH20HNA Component: Primary Member Component name: X Type: 16 Length: The primary member field stores the group name for the common orders. The field has 16 characters in which to designate the location using the common order list. Here are examples of common order locations: EMER-ROOM 5EAST 2WEST STEP 2: CREATE THE PROFILE DATA ENTRY SCREEN #PRH20 Add a new screen called #PRH20. Common Orders - PRH20 Member name: <________________> ------------------------------------------------------------------------Action Test Description Service Code <_> <______________________________> <________________> <_> <______________________________> <________________> down to last lines <_> <______________________________> <________________> <_> <______________________________> <________________> -------------------------------------------------------------------------Press ENTER to continue ... Define the fields on the data entry screen ... Common Orders - PRH20 Member name: <________________> PCH20HNA -----------------------------------------------------------------------------Action Test Description Service Code <_> <______________________________> <________________> PCH20HA1 PCH20HD1 PCH20HS1 down to last lines Code PCH20H_1 to PCH20H_9, then PCH20H_A to PCH20H_K ------------------------------------------------------------------------------Press ENTER to continue ... Add a conditional stack command to the screen... Conditional stack: WHERE "%USER" IS VALUED 5 Author: Dale Sahlberg THEN $T=PRH20CHK, $T=PRH20CH2 STEP 3: CREATE THE PROFILE PRH20 Add a profile called PRH20 and define the structure ... PROFILE RECORD NAME: PRH20 DESCRIPTION: Common Orders NAME KEY TYPE LENGTH DESCRIPTION 001 HNA P 002 HA1 N 003 HD1 N 004 HS1 N 005 down 006 Repeat the PCH20H_2 field entries all the way to PCH20H_K Below are the instructions for creating tcls that insert or delete orders in PRH20 primary members and resort orders automatically. SORTING STEP 4: CREATE THE SORTING CONTROL TCL Control tcl $T=PRH20CHK This tcl runs from the conditional stack of screen for sorting $S=#PRH20. It checks if any data line is empty for a PRH20 member. If empty, it runs a sort routine – else it bypasses sorting. Conditional stack: WHERE ANY OF "PCH20HA1" IS UNVALUED OR "PCH20HA2" IS UNVALUED OR "PCH20HA3" IS UNVALUED - on up to 20 lines THEN $T=PRH20SOR STEP 5: CREATE THE SORT DRIVER TCL Sorting tcls $T=PRH20SOR Sets up 20 sorting tcls for the items in a PRH20 member. driver Unconditional stack: $T=P20SOR1 $T=P20SOR2 up to 20 tcls STEP 6: CREATE THE ITEM SORT TCLs Sorting items $T=P20SOR1 Sorts items in a member by moving data UP one line to tcls next number if the line above is empty. Repeat for all other tcls - incrementing the logic. Conditional stack example: WHERE ALL OF "PCH20HD1" IS UNVALUED AND "PCH20HS1" IS UNVALUED AND "PCH20HD2" IS VALUED $T=P20SOR2 AND "PCH20HS2" IS VALUED 6 Author: Dale Sahlberg 7 20 tcls THEN "PCH20TD1"="PCH20HD2", "PCH20HS1"="PCH20HS2", $DM=PCH20HD2, $DM=PCH20HS2 STEP 7: CREATE THE ADD OR DELETE CONTROL TCL Add or delete $T=PRH20CH2 This tcl runs within the profile data entry process from the processing conditional stack of screen $S=#PRH20. It checks if any insert or delete operation is needed for a PRH20 member by examining the I/D fields – else it will bypass the addition or deletion tcls to save time. Conditional stack: WHERE ANY OF "PCH20HA1" IS VALUED OR "PCH20HA2" IS VALUED OR "PCH20HA3" IS VALUED - on up to 20 lines THEN $T=PRH20DEL, $T=PRH20ADD STEP 8: CREATE THE DELETE DRIVER TCL Delete items $T=PRH20DEL Sets up the 20 tcls that delete item information from PRH20 in a member members. Unconditional stack: $T=P20DEL1 $T=P20DEL2 up to 20 tcls STEP 9: CREATE THE DELETE ITEM TCLs Delete Deletes an order by clearing out the service code and item $T=P20DEL1 member description. Repeat for all other tcls - incrementing the logic. Conditional stack example: WHERE ALL OF "PCH20HA1" IS VALUED $T=P20DEL2 AND "PCH20HA1" EQ 'D' 20 tcls THEN $DM=PCH20HA1, $DM=PCH20HD1, $DM=PCH20HS1 STEP 10: CREATE THE ADD DRIVER TCL Add items to $T=PRH20ADD Sets up the 20 tcls that add items to members. a member Unconditional stack: $T=P20ADD1 $T=P20ADD2 up to 20 tcls STEP 11: CREATE THE ADD ITEM TCLs Add a Adds items to a member by moving DOWN all following $T=P20ADD1 Author: Dale Sahlberg 8 member $T=P20ADD2 20 tcls line numbers and opening position A (1) for new data. Repeat the logic for all other tcls dropping off one line move each time. Conditional stack: WHERE ALL OF "PCH20HA1" IS VALUED AND "PCH20HA1" EQ 'I' THEN "PCH20HSK"="PCH20HSJ", "PCH20HDK"="PCH20HDJ", "PCH20HS3"="PCH20HS2", "PCH20HD3"="PCH20HD2", "PCH20HS2"="PCH20HS1", "PCH20HD2"="PCH20HD1", $DM=PCH20HS1, $DM=PCH20HD1, $DM=PCH20HA1 Include a line 24 informational message in the conditional stack of screen $S=#PRH20 which informs the user if: ** Last position is already occupied - no room to expand** CHECK THE INSERT & DELETE & SORT FUCNTIONS IN PRH20 INSERT: 1) Add a primary member LAB-ALL with seven orders (names & service codes) 2) Store the data in PRH20 3) Return to the primary member and enter an I in the first action line 4) Press Enter 5) Return and check if all of line one has opened up and the seven orders have moved down on the list 6) Add another order to this opened position 7) Store the data in PRH20. DELETE: 8) Call up the primary member and enter an D in the first action line 9) Press Enter 10) Return and check if all of line one has been deleted. SORT: 11) Call up the primary member 12) Press Enter 13) If there are any open positions (not filled in) the system will resort all the orders. DISPLAY SCREEN & TRANSFER TCLS STEP 12: CREATE THE DISPLAY SCREEN & DATA TRANSFER TCLs Create the screen, fields and the PRH20 profile data transfer tcls. Field that holds PRH20 member name for order display screen Display data “U20SCREN” $T=P20SCREN Define the field: "U20SCREN", text, length of 16. This field is valued in the department’s driver tcl to hold the name of the PRH20 member to display on the screen. Example: "U20SCREN"='LAB-ALL' This tcl starts the processing to display items on screen. It first clears all Author: Dale Sahlberg 9 Access PRH20 profile member data $T=P20SCRNA Transfers member fields into display screen fields $T=P20SORT1 Item selection screen $S=P20SCREN “%KEYINNO” field processing $T=P20KEYIN Check for “%KEYINNO” fields 1-20 $T=P20KEY20 Check if any orders have been selected $T=P20CHECK Clean up the auda $T=P20CLEAN “PCH20” fields and then stacks $T=P20SCRNA. Unconditional stack: $D=PCH20??? $T=P20SCRNA This tcl contains the logic that reads the PRH20 profile based on the member name in “PCH20HNA”. An example of a member is: LAB-ALL The member code is set in "PCH20HNA" from the value in "U20SCREN" which comes from the department’s driver tcl for order categories. Unconditional stack: $PE=PCH20HNA $T=P20SORT1 DVA: "PCH20HNA"="U20SCREN" Moves PRH20 orderable items to order selection screen $S=P20SCREN. Unconditional stack: $D=PCH20??? $D=%KEYINNO $S=P20SCREN DVA: "%ORS1"="PCH20HS1" "%ZOSV"="PCH20HD1" "%ORS1#02"="PCH20HS2" "%ZOSV#02"="PCH20HD2" - up to 20 items Copy model screen $S=ZOGESS01 and set to 20 lines. This screen is the orderable item display screen that shows the 20 items a user can select for ordering. The display has two columns of 10 lines. Data from the profile gets moved into the display fields on this screen. Conditional stack: WHERE "%USER" IS VALUED THEN $T=P20KEYIN, $P=CHPPRENM, $T=P20CHECK Loads the tcls to check for any “%KEYINNO” fields used on the screens. Unconditional stack: $T=P20KEY20 This tcl starts the processing to check for data in “%KEYINNO” fields 1-20 on screen. The data is then moved into “S” order fields. Conditional stack example: WHERE ALL OF "%KEYINNO" IS VALUED AND "%KEYINNO" EQ 1 THEN "S2101"="%ORS1", $D=%KEYINNO ELSE up to 20 fields Check if any orders have been selected and redisplay screen if no orders have been chosen. If an order has been selected, then run a clean up tcl and proceed. Conditional stack: WHERE ANY OF "C2101" IS VALUED OR "C2101#02" IS VALUED OR "C2101#03" IS VALUED OR "C2101#19" IS VALUED OR "C2101#20" IS VALUED THEN $T=P20CLEAN ELSE $D=PCH20???, $MSG=100540, $S=P20SCREN Clean up the auda prior to processing selected orders. Unconditional stack: Author: Dale Sahlberg 10 $D=%ZGPG#02 $D=%ORAB??? $D=%ORD1??? $D=%ORS1??? $D=%ZOSV??? $D=PCH20??? $D=UP20M??? $D=U20SC??? $D=U-SUBDPT COMMON ORDERS PATHWAY TIE PRH20 INTO EXISTING PATHWAY: Examine your existing common order pathway and determine where to insert the $T=P20SCREN tcl. This tcl starts the processing to display common orders on a screen. The member code is set in "PCH20HNA" from the value in "U20SCREN" which comes from the department’s driver tcl for order categories. The example below shows the display process for lab: COMMON ORDERS ! Cardiology ! Laboratory ! Radiology ! Respiratory ! ICU ! 1MAIN ! 2WEST ! 3SOUTH "U20SCREN"=LAB-ALL PROFILE – PRH20 "PCH20HNA"="U20SCREN" Laboratory ? ANTIBODY ID ? CPK ? CREATININE ? BUN ? PACKED RBC ? PTT ? CBC ? ? ? ? ? ? ? TYPE AND SCREEN BLOOD CULTURE DIGOXIN LDH IGG COOMBS RHOGAM U/A The PRH20 “common order display” system is easy to maintain, flexible, centrally located and dynamic. Dale Sahlberg www.ecsahlberg.com/Help.html dsahl@aol.com