| 1 | ORXTABS4 ; SLC/PKS - Edit calls, tab parameters preferences. [9/28/00 3:05pm] | 
|---|
| 2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**9,47,84**;Dec 17, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | ; NOTES: The routines herein are called by those of the same tag | 
|---|
| 5 | ;        name in ORXTABS2.  Most variables are NEW'd and assigned | 
|---|
| 6 | ;        by one or more routines in the preceding call chains. | 
|---|
| 7 | ;        Refer to comments and notes there for additional infor- | 
|---|
| 8 | ;        mation. | 
|---|
| 9 | ; | 
|---|
| 10 | ;   Each tag in this routine must return one of the following: | 
|---|
| 11 | ; | 
|---|
| 12 | ;      1 - A new value entered or selected by the user, | 
|---|
| 13 | ;      2 - A null string, | 
|---|
| 14 | ;      3 - The string "*Invalid*" - to repeat due to invalid entry, | 
|---|
| 15 | ;      4 - The "^" character, indicating user's cancel action. | 
|---|
| 16 | ; | 
|---|
| 17 | Q | 
|---|
| 18 | ; | 
|---|
| 19 | STATUS(TYPE) ; Status, for various tabs. | 
|---|
| 20 | ; | 
|---|
| 21 | ; Internal variables used: | 
|---|
| 22 | ; | 
|---|
| 23 | ;    ORXAUTH  = Holds current value of AUTHOR value for some TYPEs. | 
|---|
| 24 | ;    ORXFLAG  = Used in set/reset of ORDSTS^ORCHANG2 values. | 
|---|
| 25 | ;    ORXP1    = Prompt piece holder. | 
|---|
| 26 | ;    ORXP2    = Prompt piece holder. | 
|---|
| 27 | ;    ORXSCNT  = Loop counter. | 
|---|
| 28 | ;    ORXSETC  = Set of codes for assignment to DIR(0) variable. | 
|---|
| 29 | ;    ORXSTAGS = Orders STATUS tags, in routine ORXCHANG2 or herein. | 
|---|
| 30 | ;    TYPE     = Type of STATUS being processed; must be one of: | 
|---|
| 31 | ; | 
|---|
| 32 | ;                 - ORDERS | 
|---|
| 33 | ;                 - CONSULTS | 
|---|
| 34 | ;                 - NOTES | 
|---|
| 35 | ;                 - D/C SUMMARIES | 
|---|
| 36 | ;                 - PROBLEMS | 
|---|
| 37 | ; | 
|---|
| 38 | N ORXAUTH,ORXFLAG,ORXP1,ORXP2,ORXSCNT,ORXSETC,ORXSTAGS | 
|---|
| 39 | ; | 
|---|
| 40 | ; Process DIR call through IF statements below, based on TYPE. | 
|---|
| 41 | ; | 
|---|
| 42 | ; Orders and Consults: | 
|---|
| 43 | ; | 
|---|
| 44 | ;    NOTE: Displayed choices are numerically sequential as coded. | 
|---|
| 45 | ;          Actual storage number values come from routine data tags. | 
|---|
| 46 | ;          Thus, the default entry must be converted before | 
|---|
| 47 | ;          display, reset before updates - as is done below. | 
|---|
| 48 | ; | 
|---|
| 49 | I ((TYPE="ORDERS")!(TYPE="CONSULTS")) D | 
|---|
| 50 | .K ORXSTAGS                                 ; Clean up each time. | 
|---|
| 51 | .S ORXSCNT=0                                ; Initialize counter. | 
|---|
| 52 | .S ORXFLAG=1                                ; Start true each time. | 
|---|
| 53 | .; | 
|---|
| 54 | .; Establish loop for tag entries: | 
|---|
| 55 | .F  D  Q:(ORXSTAGS(ORXSCNT)="")!(ORXSTAGS(ORXSCNT)["ZZZ") | 
|---|
| 56 | ..S ORXSCNT=ORXSCNT+1                       ; Increment counter. | 
|---|
| 57 | ..; | 
|---|
| 58 | ..; Assign retrieved values to ORXSTAGS array: | 
|---|
| 59 | ..S ORXSTAGS="ORDSTS+"_ORXSCNT_"^ORCHANG2"  ; ORDERS data tag. | 
|---|
| 60 | ..; | 
|---|
| 61 | ..; For CONSULTS set a different data tag: | 
|---|
| 62 | ..I TYPE="CONSULTS" S ORXSTAGS="CORDSTS+"_ORXSCNT | 
|---|
| 63 | ..; | 
|---|
| 64 | ..S ORXSTAGS(ORXSCNT)=ORXSCNT_";"_$P($T(@ORXSTAGS),";;",2) | 
|---|
| 65 | ..I (ORXSTAGS(ORXSCNT)="")!(ORXSTAGS(ORXSCNT)["ZZZ") Q | 
|---|
| 66 | ..; | 
|---|
| 67 | ..; Reset ORXNOW (current value) number when found: | 
|---|
| 68 | ..I ORXFLAG D | 
|---|
| 69 | ...I $P(ORXSTAGS(ORXSCNT),";",2)=ORXNOW S ORXNOW=$P(ORXSTAGS(ORXSCNT),";",1) S ORXFLAG=0                         ; Do only once each time. | 
|---|
| 70 | ..; | 
|---|
| 71 | ..; Continue building prompt strings from retrieved values: | 
|---|
| 72 | ..S ORXP1=$P(ORXSTAGS(ORXSCNT),";",1)       ; First prompt piece. | 
|---|
| 73 | ..S ORXP1=$$LJ^XLFSTR(ORXP1,9)              ; Format for 9 chars. | 
|---|
| 74 | ..S ORXP2=$P(ORXSTAGS(ORXSCNT),";",3)       ; Second prompt piece. | 
|---|
| 75 | ..S ORXP2=$$LJ^XLFSTR(ORXP2,24)             ; Format for 24 chars. | 
|---|
| 76 | ..; | 
|---|
| 77 | ..; Assign DIR("A") display array: | 
|---|
| 78 | ..S DIR("A",ORXSCNT)=ORXP1_ORXP2            ; Complete prompt string. | 
|---|
| 79 | .; | 
|---|
| 80 | .; Check for bad/missing tag data: | 
|---|
| 81 | .I ORXSCNT<2 W !!,"ERROR: Bad data tag entry(ies)." S ORXNOW="^" Q | 
|---|
| 82 | .; | 
|---|
| 83 | .; Assign remaining DIR variables: | 
|---|
| 84 | .S DIR("T")=120 ; Two minute maximum timeout for response. | 
|---|
| 85 | .S DIR("A")="   Enter # for type of "_ORXPDIS_" to display:  " | 
|---|
| 86 | .S DIR("?")="   Entry must be between 1 and "_(ORXSCNT-1) | 
|---|
| 87 | .S DIR(0)="NA^1:"_(ORXSCNT-1)               ; Numerical, required. | 
|---|
| 88 | .; | 
|---|
| 89 | .; Call tag to get/assign input: | 
|---|
| 90 | .D INPUT^ORXTABS2 | 
|---|
| 91 | .; | 
|---|
| 92 | .; Check for user abort: | 
|---|
| 93 | .I ORXNOW="^" Q | 
|---|
| 94 | .; | 
|---|
| 95 | .; Reset user entry to actual number from data tag in use: | 
|---|
| 96 | .S:ORXNOW'="" ORXNOW=$P(ORXSTAGS(ORXNOW),";",2) | 
|---|
| 97 | ; | 
|---|
| 98 | ; Notes and D/C Summaries: | 
|---|
| 99 | I ((TYPE="NOTES")!(TYPE="D/C SUMMARIES")) D | 
|---|
| 100 | .; | 
|---|
| 101 | .; Assign values retrieved to ORXSTAGS array: | 
|---|
| 102 | .S ORXP1="1"                                ; First piece. | 
|---|
| 103 | .S ORXP1=$$LJ^XLFSTR(ORXP1,9)               ; Format for 9 chars. | 
|---|
| 104 | .S ORXP2="All Signed"                       ; Second piece. | 
|---|
| 105 | .S ORXP2=$$LJ^XLFSTR(ORXP2,24)              ; Format for 24 chars. | 
|---|
| 106 | .S DIR("A",1)=ORXP1_ORXP2                   ; First prompt string. | 
|---|
| 107 | .S ORXP1="2"                                ; First piece. | 
|---|
| 108 | .S ORXP1=$$LJ^XLFSTR(ORXP1,9)               ; Format for 9 chars. | 
|---|
| 109 | .S ORXP2="My Unsigned"                      ; Second piece. | 
|---|
| 110 | .S ORXP2=$$LJ^XLFSTR(ORXP2,24)              ; Format for 24 chars. | 
|---|
| 111 | .S DIR("A",2)=ORXP1_ORXP2                   ; Second prompt string. | 
|---|
| 112 | .S ORXP1="3"                                ; First piece. | 
|---|
| 113 | .S ORXP1=$$LJ^XLFSTR(ORXP1,9)               ; Format for 9 chars. | 
|---|
| 114 | .S ORXP2="My Un-cosigned"                   ; Second piece. | 
|---|
| 115 | .S ORXP2=$$LJ^XLFSTR(ORXP2,24)              ; Format for 24 chars. | 
|---|
| 116 | .S DIR("A",3)=ORXP1_ORXP2                   ; Third prompt string. | 
|---|
| 117 | .S ORXP1="4"                                ; First piece. | 
|---|
| 118 | .S ORXP1=$$LJ^XLFSTR(ORXP1,9)               ; Format for 9 chars. | 
|---|
| 119 | .S ORXP2="Signed/Author"                    ; Second piece. | 
|---|
| 120 | .S ORXP2=$$LJ^XLFSTR(ORXP2,24)              ; Format for 24 chars. | 
|---|
| 121 | .S DIR("A",4)=ORXP1_ORXP2                   ; Fourth prompt string. | 
|---|
| 122 | .S ORXP1="5"                                ; First piece. | 
|---|
| 123 | .S ORXP1=$$LJ^XLFSTR(ORXP1,9)               ; Format for 9 chars. | 
|---|
| 124 | .S ORXP2="Signed/Dates"                     ; Second piece. | 
|---|
| 125 | .S ORXP2=$$LJ^XLFSTR(ORXP2,24)              ; Format for 24 chars. | 
|---|
| 126 | .S DIR("A",5)=ORXP1_ORXP2                   ; Fifth prompt string. | 
|---|
| 127 | .; | 
|---|
| 128 | .; Assign remaining DIR variables: | 
|---|
| 129 | .S DIR("T")=120 ; Two minute maximum timeout for response. | 
|---|
| 130 | .S DIR("A")="   Enter # for type of "_ORXPDIS_" to display:  " | 
|---|
| 131 | .S DIR("?")="   Entry must be between 1 and 5" | 
|---|
| 132 | .S DIR(0)="NA^1:5"                          ; Numerical, required. | 
|---|
| 133 | .; | 
|---|
| 134 | .; Call tag to get/assign input: | 
|---|
| 135 | .D INPUT^ORXTABS2 | 
|---|
| 136 | .; | 
|---|
| 137 | .; Check for user abort: | 
|---|
| 138 | .I ORXNOW="^" Q | 
|---|
| 139 | .; | 
|---|
| 140 | .; Use ORXAUTH twice to Check for valid entry: | 
|---|
| 141 | .I ORXNOW'="" D | 
|---|
| 142 | ..I (ORXCNT+1)<1 W !!,"ERROR: Improper TABS entry." S ORXNOW="^" Q | 
|---|
| 143 | ..S ORXAUTH=$P($G(ORXSETS),";",ORXCNT+1) | 
|---|
| 144 | ..I ORXAUTH'="AUTHOR" W !!,"ERROR: Improper TABS entry." S ORXNOW="^" Q | 
|---|
| 145 | ..S ORXAUTH=$P($G(ORXCUR),";",$P($G(ORXPCS),";",ORXCNT+1)) | 
|---|
| 146 | ..I ((ORXAUTH="")&(ORXNOW=4)) S $P(ORXCUR,";",$P($G(ORXPCS),";",ORXCNT+1))=+DUZ Q                                ; STATUS 4 = DUZ AUTHOR. | 
|---|
| 147 | ..I ORXAUTH="" Q                            ; Stop if already null. | 
|---|
| 148 | ..; | 
|---|
| 149 | ..; For all other entries, set matching AUTHOR value to null: | 
|---|
| 150 | ..S $P(ORXCUR,";",$P($G(ORXPCS),";",ORXCNT+1))="" | 
|---|
| 151 | .; | 
|---|
| 152 | .; Check for deletion entry: | 
|---|
| 153 | .I ORXNOW="@" S ORXNOW="" | 
|---|
| 154 | ; | 
|---|
| 155 | ; Problems: | 
|---|
| 156 | I TYPE="PROBLEMS" D | 
|---|
| 157 | .K ORXSTAGS                                 ; Clean up each time. | 
|---|
| 158 | .S ORXSETC=""                               ; Clear each time. | 
|---|
| 159 | .S ORXSCNT=0                                ; Initialize counter. | 
|---|
| 160 | .; | 
|---|
| 161 | .; Establish loop for tag entries: | 
|---|
| 162 | .F  D  Q:(ORXSTAGS(ORXSCNT)="")!(ORXSTAGS(ORXSCNT)["ZZZ") | 
|---|
| 163 | ..S ORXSCNT=ORXSCNT+1                       ; Increment counter. | 
|---|
| 164 | ..; | 
|---|
| 165 | ..; Assign retrieved values to ORXSTAGS array: | 
|---|
| 166 | ..S ORXSTAGS="PLSTS+"_ORXSCNT_"^ORCHANG2"   ; Data tags. | 
|---|
| 167 | ..S ORXSTAGS(ORXSCNT)=$P($T(@ORXSTAGS),";;",2) | 
|---|
| 168 | ..I (ORXSTAGS(ORXSCNT)="")!(ORXSTAGS(ORXSCNT)["ZZZ") Q | 
|---|
| 169 | ..S ORXP1=$P(ORXSTAGS(ORXSCNT),";",1)       ; First prompt piece. | 
|---|
| 170 | ..S:ORXSCNT=1 ORXSETC=ORXP1_":"             ; DIR codes string. | 
|---|
| 171 | ..S:ORXSCNT>1 ORXSETC=ORXSETC_";"_ORXP1_":" ;         " | 
|---|
| 172 | ..S ORXP1=$$LJ^XLFSTR(ORXP1,9)              ; Format for 9 chars. | 
|---|
| 173 | ..S ORXP2=$P(ORXSTAGS(ORXSCNT),";",2)       ; Second prompt piece. | 
|---|
| 174 | ..S ORXSETC=ORXSETC_ORXP2                   ; DIR codes string. | 
|---|
| 175 | ..S ORXP2=$$LJ^XLFSTR(ORXP2,24)             ; Format for 24 chars. | 
|---|
| 176 | ..; | 
|---|
| 177 | ..; Assign DIR("A") display array: | 
|---|
| 178 | ..S DIR("A",ORXSCNT)=ORXP1_ORXP2            ; Complete prompt string. | 
|---|
| 179 | .; | 
|---|
| 180 | .; Check for bad/missing data: | 
|---|
| 181 | .I ORXSCNT<2 W !!,"ERROR: Bad PLSTS tag data." S ORXNOW="^" Q | 
|---|
| 182 | .; | 
|---|
| 183 | .; Assign remaining DIR variables: | 
|---|
| 184 | .S DIR("T")=120 ; Two minute maximum timeout for response. | 
|---|
| 185 | .S DIR("A")="   Enter types of "_ORXPDIS_" to display:  " | 
|---|
| 186 | .S DIR(0)="SAO^"_ORXSETC                    ; Optional, Set of Codes. | 
|---|
| 187 | .; | 
|---|
| 188 | .; Call tag to get/assign input: | 
|---|
| 189 | .D INPUT^ORXTABS2 | 
|---|
| 190 | .; | 
|---|
| 191 | .; Check for user abort: | 
|---|
| 192 | .I ORXNOW="^" Q | 
|---|
| 193 | .; | 
|---|
| 194 | .; Check for deletion entry: | 
|---|
| 195 | .I ORXNOW="@" S ORXNOW="" | 
|---|
| 196 | ; | 
|---|
| 197 | Q | 
|---|
| 198 | ; | 
|---|
| 199 | ; | 
|---|
| 200 | ; NOTES ON ENTRIES FOR "CORDSTS" TAG: | 
|---|
| 201 | ;    CORDSTS entries below match previous LM CONSULTS ORDERS | 
|---|
| 202 | ;    "STATUS" settings allowed.  They are also listed in the | 
|---|
| 203 | ;    ORQ1 routine.  The listings consist of 2 pieces: | 
|---|
| 204 | ; | 
|---|
| 205 | ;         ValueToBeStoredInParam;ListingDescription | 
|---|
| 206 | ; | 
|---|
| 207 | CORDSTS ; Consults ORDERS "STATUS" settings. | 
|---|
| 208 | ;;1;Discontinued | 
|---|
| 209 | ;;2;Complete | 
|---|
| 210 | ;;5;Pending | 
|---|
| 211 | ;;6;Active | 
|---|
| 212 | ;;8;Scheduled | 
|---|
| 213 | ;;9;Partial Results | 
|---|
| 214 | ;;13;Cancelled | 
|---|
| 215 | ;;;All Statuses | 
|---|
| 216 | ;;;ZZZZ | 
|---|
| 217 | ; | 
|---|
| 218 | Q | 
|---|
| 219 | ; | 
|---|