| 1 | SCRPW303 ; BPFO/JRC - Performance Monitor Report Utils; 30 Jul 2003 ; 4/2/04 7:21am | 
|---|
| 2 | ;;5.3;SCHEDULING;**292,313,438**; AUG 13, 1993 | 
|---|
| 3 | ; | 
|---|
| 4 | DSS(SCRNARR) ;Set Stop Codes into screen array (prompt is one/many/all) | 
|---|
| 5 | ;Input  : SCRNARR - Screen array full global reference | 
|---|
| 6 | ;Output : 1 = OK     0 = User abort/timeout | 
|---|
| 7 | ;         @SCRNARR@("DSS") = User pick all stop codes ? | 
|---|
| 8 | ;           1 = Yes (all)     0 = No | 
|---|
| 9 | ;         @SCRNARR@("DSS-NTNL") = Only stop codes in national cohort ? | 
|---|
| 10 | ;           1 = Yes           0 = No | 
|---|
| 11 | ;         @SCRNARR@("DSS",PtrStopCode) = Stop Code Name | 
|---|
| 12 | ;         @SCRNARR@("DSS-EXCLUDE",PtrStopCod) = SC Name | 
|---|
| 13 | ;Note   : @SCRNARR@("DSS") is initialized (KILLed) on input | 
|---|
| 14 | ;       : @SCRNARR@("DSS",PtrStopCode) is only set when the user | 
|---|
| 15 | ;         picked individual stop codes (i.e. didn't pick all) OR | 
|---|
| 16 | ;         when user selected stop codes by range (i.e. 100,102-300) | 
|---|
| 17 | ;       : @SCRNARR@("DSS-EXCLUDE") is only set if the user picked ALL | 
|---|
| 18 | ;         stop codes and choose to only use stop codes & credit pairs | 
|---|
| 19 | ;         from the national cohort | 
|---|
| 20 | ;       : @SCRNARR@("DSS-EXCLUDE") is set when | 
|---|
| 21 | ;         @SCRNARR@("DSS-NTNL") equals 1 | 
|---|
| 22 | ; | 
|---|
| 23 | ;Declare variables | 
|---|
| 24 | N VAUTSTR,VAUTVB,VAUTNI,DSS,SCANARR,DIC,DIR,Y,X,CODE,ARRY,DIRUT,FLG | 
|---|
| 25 | K @SCRNARR@("DSS") | 
|---|
| 26 | ;Prompt user wether to use range for stop code selection or not | 
|---|
| 27 | S DIR(0)="Y",DIR("B")="No",FLG=0 | 
|---|
| 28 | S DIR("A")="Would you like to select the Stop Codes by range " | 
|---|
| 29 | D ^DIR | 
|---|
| 30 | I $D(DIRUT)!$D(DTOUT) Q FLG | 
|---|
| 31 | I Y D RANGE(SCRNARR) Q FLG | 
|---|
| 32 | ;Get stop code selection using VAUTOMA | 
|---|
| 33 | I '$D(@SCRNARR@("DSS")) | 
|---|
| 34 | S DIC="^DIC(40.7," | 
|---|
| 35 | S VAUTSTR="Stop Code" | 
|---|
| 36 | S VAUTVB="SCANARR" | 
|---|
| 37 | S VAUTNI=2 | 
|---|
| 38 | D FIRST^VAUTOMA | 
|---|
| 39 | I Y<0 Q 0 | 
|---|
| 40 | ;Does selection of ALL mean all stop codes in national cohort | 
|---|
| 41 | I $G(SCANARR)=1 D | 
|---|
| 42 | .N DIR,X,Y,DIRUT,DIROUT,DTOUT,DUOUT | 
|---|
| 43 | .S DIR(0)="Y" | 
|---|
| 44 | .S DIR("B")="YES" | 
|---|
| 45 | .S DIR("A",1)="By ALL do you mean stop codes from the" | 
|---|
| 46 | .S DIR("A")="Performance Monitor national cohort " | 
|---|
| 47 | .D ^DIR | 
|---|
| 48 | .I $D(DIRUT) K SCANARR Q | 
|---|
| 49 | .I Y D NTNLESC(SCRNARR) | 
|---|
| 50 | .Q | 
|---|
| 51 | I '$D(SCANARR) Q 0 | 
|---|
| 52 | I $D(@SCRNARR@("DSS")) Q 1 | 
|---|
| 53 | S @SCRNARR@("DSS-NTNL")=0 | 
|---|
| 54 | M @SCRNARR@("DSS")=SCANARR | 
|---|
| 55 | Q 1 | 
|---|
| 56 | ; | 
|---|
| 57 | SORT(SORTARR) ; Set sort order into sort array | 
|---|
| 58 | ;Input  : SORTARR - Sort array full global reference | 
|---|
| 59 | ;Output : 1 = OK     0 = User abort/timeout | 
|---|
| 60 | ;         @SORTARR = Sort1Code^Sort2Code | 
|---|
| 61 | ;           Codes: 1 = Division   2 = Clinic | 
|---|
| 62 | ;                  3 = Provider   4 = Stop Code | 
|---|
| 63 | ;                  5 = Date       6 = Patient | 
|---|
| 64 | ;         @SORTARR@("TEXT") = Sort1Text^Sort2Text | 
|---|
| 65 | ;Note   : @SORTARR is initialized (KILLed) on input | 
|---|
| 66 | ; | 
|---|
| 67 | ;Declare variables | 
|---|
| 68 | N DIR,X,Y,DIRUT,DIROUT,DTOUT,DUOUT | 
|---|
| 69 | K @SORTARR | 
|---|
| 70 | ;Get sort level 1 | 
|---|
| 71 | S DIR(0)="SC^1:DIVISION;2:CLINIC;3:PROVIDER;4:STOP CODE;5:DATE;6:PATIENT" | 
|---|
| 72 | S DIR("A")="Select primary sorting criteria" | 
|---|
| 73 | D ^DIR | 
|---|
| 74 | I $D(DIRUT) Q 0 | 
|---|
| 75 | S @SORTARR=Y | 
|---|
| 76 | S @SORTARR@("TEXT")=$$SRT2TXT(Y) | 
|---|
| 77 | ;Get sort level 2 | 
|---|
| 78 | K DIR,X,Y | 
|---|
| 79 | S DIR(0)="SC^1:DIVISION;2:CLINIC;3:PROVIDER;4:STOP CODE;5:DATE;6:PATIENT" | 
|---|
| 80 | S DIR("A")="Within "_@SORTARR@("TEXT")_" sort by" | 
|---|
| 81 | S DIR("S")="I Y'="_@SORTARR | 
|---|
| 82 | D ^DIR | 
|---|
| 83 | I $D(DIRUT) K @SORTARR Q 0 | 
|---|
| 84 | S @SORTARR=@SORTARR_"^"_Y | 
|---|
| 85 | S @SORTARR@("TEXT")=@SORTARR@("TEXT")_"^"_$$SRT2TXT(Y) | 
|---|
| 86 | Q 1 | 
|---|
| 87 | SRT2TXT(CODE)   ;Convert sort code to sort text | 
|---|
| 88 | ;Input  : CODE - Sort code | 
|---|
| 89 | ;Output : Text for sort code | 
|---|
| 90 | ; | 
|---|
| 91 | I CODE=1 Q "division" | 
|---|
| 92 | I CODE=2 Q "clinic" | 
|---|
| 93 | I CODE=3 Q "provider" | 
|---|
| 94 | I CODE=4 Q "stop code" | 
|---|
| 95 | I CODE=5 Q "date" | 
|---|
| 96 | I CODE=6 Q "patient" | 
|---|
| 97 | Q "" | 
|---|
| 98 | ; | 
|---|
| 99 | ROLLUP(SCRNARR,SORTARR) ;Set screen and sort arrays for national rollup | 
|---|
| 100 | ;Input  : SCRNARR - Screening array | 
|---|
| 101 | ;         SORTARR - Sort array full global reference | 
|---|
| 102 | ;Output : None | 
|---|
| 103 | ;         Nodes in @SCRNARR are set to denote the following: | 
|---|
| 104 | ;           Time limit of 10 | 
|---|
| 105 | ;           Include all divisions | 
|---|
| 106 | ;           Use excluded stop codes from national cohort array | 
|---|
| 107 | ;           Count encounters with scanned progress notes | 
|---|
| 108 | ;         Nodes in @SORTARR are set to denote the following: | 
|---|
| 109 | ;           Primary sort is division | 
|---|
| 110 | ;           Secondary sort is date | 
|---|
| 111 | ;Note   : @SCRNARR and @SORTARR are initialized (KILLed) on input | 
|---|
| 112 | ; | 
|---|
| 113 | K @SCRNARR,@SORTARR | 
|---|
| 114 | S @SCRNARR@("TLMT")=10 | 
|---|
| 115 | S @SCRNARR@("DIVISION")=1 | 
|---|
| 116 | S @SCRNARR@("PROVIDERS")=1 | 
|---|
| 117 | D NTNLESC(SCRNARR) | 
|---|
| 118 | S @SCRNARR@("SCANNED")=1 | 
|---|
| 119 | S @SORTARR="1^5" | 
|---|
| 120 | S @SORTARR@("TEXT")="division^date" | 
|---|
| 121 | Q | 
|---|
| 122 | ; | 
|---|
| 123 | NTNLSC(SCRNARR) ;Set inclusion array of stop codes for national reporting | 
|---|
| 124 | ;Input  : SCRNARR - Screening array | 
|---|
| 125 | ;Output : National list of acceptable stop code & credit pairs | 
|---|
| 126 | ;         @SCRNARR@("DSS") = 0 | 
|---|
| 127 | ;         @SCRNARR@("DSS-NTNL") = 1 | 
|---|
| 128 | ;         @SCRNARR@("DSS",PtrStopCode) = Stop Code Name | 
|---|
| 129 | ;         @SCRNARR@("DSS-PAIR",PtrStopCode,PtrStopCode) = SC Name ^ SC Name | 
|---|
| 130 | ; | 
|---|
| 131 | N OFF,TEXT,J,CODE,PTR1,TMP,PTR2 | 
|---|
| 132 | S @SCRNARR@("DSS")=0 | 
|---|
| 133 | S @SCRNARR@("DSS-NTNL")=1 | 
|---|
| 134 | F OFF=1:1 S TEXT=$P($T(STOP+OFF),";;",2) Q:TEXT="END"  D | 
|---|
| 135 | .F J=1:1:$L(TEXT,"^") S CODE=$P(TEXT,"^",J) D | 
|---|
| 136 | ..S TMP=$L(CODE) Q:((TMP'=3)&(TMP'=6)) | 
|---|
| 137 | ..I TMP=3 D  Q | 
|---|
| 138 | ...;Individual stop code | 
|---|
| 139 | ...S PTR1=$$SC2PTR(CODE) Q:'PTR1 | 
|---|
| 140 | ...S @SCRNARR@("DSS",+PTR1)=$P(PTR1,"^",2) | 
|---|
| 141 | ..;Credit pair | 
|---|
| 142 | ..S PTR1=$$SC2PTR($E(CODE,1,3)) Q:'PTR1 | 
|---|
| 143 | ..S PTR2=$$SC2PTR($E(CODE,4,6)) Q:'PTR2 | 
|---|
| 144 | ..S @SCRNARR@("DSS-PAIR",+PTR1,+PTR2)=$P(PTR1,"^",2)_"^"_$P(PTR2,"^",2) | 
|---|
| 145 | Q | 
|---|
| 146 | NTNLESC(SCRNARR) ;Set exclusion array of stop codes for national reporting | 
|---|
| 147 | ;Input  : SCRNARR - Screening array | 
|---|
| 148 | ;Output : National list of stop codes to be excluded | 
|---|
| 149 | ;         @SCRNARR@("DSS") = 0 | 
|---|
| 150 | ;         @SCRNARR@("DSS-NTNL") = 1 | 
|---|
| 151 | ;         @SCRNARR@("DSS-EXCLUDE",PtrStopCode) = Stop Code Name | 
|---|
| 152 | ; | 
|---|
| 153 | N OFF,TEXT,J,CODE,PTR1,TMP,PTR2 | 
|---|
| 154 | S @SCRNARR@("DSS")=0 | 
|---|
| 155 | S @SCRNARR@("DSS-NTNL")=1 | 
|---|
| 156 | F OFF=1:1 S TEXT=$P($T(EXCSTOP+OFF),";;",2) Q:TEXT="END"  D | 
|---|
| 157 | .F J=1:1:$L(TEXT,"^") S CODE=$P(TEXT,"^",J) D | 
|---|
| 158 | ..S TMP=$L(CODE) Q:((TMP'=3)&(TMP'=6)) | 
|---|
| 159 | ..I TMP=3 D  Q | 
|---|
| 160 | ...;Individual stop code for exclusion | 
|---|
| 161 | ...S PTR1=$$SC2PTR(CODE) Q:'PTR1 | 
|---|
| 162 | ...S @SCRNARR@("DSS-EXCLUDE",+PTR1)=$P(PTR1,"^",2) | 
|---|
| 163 | Q | 
|---|
| 164 | RANGE(SCRNARR) ;Screen array by range | 
|---|
| 165 | N DIR,DIRUT,DTOUT,Y,SUB,NODE,CODE,PTR1,J | 
|---|
| 166 | S @SCRNARR@("DSS")=0 | 
|---|
| 167 | S @SCRNARR@("DSS",1)="" | 
|---|
| 168 | S @SCRNARR@("DSS-NTNL")=0 | 
|---|
| 169 | S DIR("A")="Select individual Stop Code or a range of Codes " | 
|---|
| 170 | S DIR("?")="This response must be a list or range, e.g., 100,302 or 200-450,800 " | 
|---|
| 171 | S DIR(0)="L" | 
|---|
| 172 | D ^DIR | 
|---|
| 173 | I $D(DIRUT)!$D(DTOUT) Q | 
|---|
| 174 | I Y D | 
|---|
| 175 | .S FLG=1 | 
|---|
| 176 | .S SUB="" F  S SUB=$O(Y(SUB)) Q:SUB=""  D | 
|---|
| 177 | ..S NODE=(Y(SUB)) | 
|---|
| 178 | ..F J=1:1:$L(NODE,",") S CODE=$P(NODE,",",J) I CODE D | 
|---|
| 179 | ...S PTR1=$$SC2PTR(CODE) Q:'PTR1 | 
|---|
| 180 | ...S @SCRNARR@("DSS",+PTR1)=$P(PTR1,"^",2) | 
|---|
| 181 | Q | 
|---|
| 182 | SC2PTR(CODE)    ;Get pointer to stop code | 
|---|
| 183 | ;Input  : CODE - Stop code | 
|---|
| 184 | ;Output : Pointer #40.7 ^ Name (#.01) | 
|---|
| 185 | ; | 
|---|
| 186 | N NODE,PTR | 
|---|
| 187 | S PTR=+$O(^DIC(40.7,"C",CODE,0)) I 'PTR Q "0^INVALID STOP CODE" | 
|---|
| 188 | S NODE=$G(^DIC(40.7,PTR,0)) | 
|---|
| 189 | Q PTR_"^"_$P(NODE,"^",1) | 
|---|
| 190 | ; | 
|---|
| 191 | STOP ;List of acceptable stop codes and credit pairs | 
|---|
| 192 | ;;END | 
|---|
| 193 | ; | 
|---|
| 194 | EXCSTOP ;Exclusion list of stop codes | 
|---|
| 195 | ;;104^105^106^107^108^109^115^116^117^120^126^127^128^144^145 | 
|---|
| 196 | ;;146^149^150^151^152^153^154^155^165^166^167^168^169^174^190 | 
|---|
| 197 | ;;202^205^206^207^208^212^213^214^290^291^292^293^294^295^296 | 
|---|
| 198 | ;;321^327^328^329^333^334^370^417^421^422^423^429^430^431^435 | 
|---|
| 199 | ;;450^451^452^453^454^455^456^458^459^460^461^462^463^464^465 | 
|---|
| 200 | ;;466^467^468^469^470^471^472^473^474^475^476^477^478^479^481 | 
|---|
| 201 | ;;482^483^484^485^505^506^510^513^516^519^521^522^523^525^535 | 
|---|
| 202 | ;;538^545^547^550^553^554^557^558^559^560^561^563^564^565^566 | 
|---|
| 203 | ;;573^574^575^577^578^590^602^603^604^606^607^608^610^650^651 | 
|---|
| 204 | ;;652^653^654^655^656^657^660^670^680^681^682^690^691^701^702 | 
|---|
| 205 | ;;703^704^705^706^707^708^709^710^711^725^730^731^900^999 | 
|---|
| 206 | ;;END | 
|---|
| 207 | ; | 
|---|