| 1 | PXRMXSU ; SLC/PJH - Reminder Reports DIC Prompts;01/06/2006
 | 
|---|
| 2 |  ;;2.0;CLINICAL REMINDERS;**4**;Feb 04, 2005;Build 21
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;Called by PXRMXD
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;Exits from SEL subroutine
 | 
|---|
| 7 | QUIT() I $D(DTOUT)!$D(DUOUT) Q 1
 | 
|---|
| 8 |  ;Only one entry allowed
 | 
|---|
| 9 |  I ONE="D",(CNT>0) Q 1
 | 
|---|
| 10 |  ;Mandatory entry
 | 
|---|
| 11 |  I Y=-1,(CHECK=3)!(CNT>0) Q 1
 | 
|---|
| 12 |  ;Categories may already contain reminders
 | 
|---|
| 13 |  I Y=-1,CHECK=2,$D(REMCAT) Q 1
 | 
|---|
| 14 |  ;Otherwise
 | 
|---|
| 15 |  Q 0
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  ;Repeated Prompt using DIC
 | 
|---|
| 18 |  ;-------------------------
 | 
|---|
| 19 | SEL(FILE,MODE,CNT,ARRAY,ONE,CHECK) ;
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  ; ONE   = only allows one entry
 | 
|---|
| 22 |  ; CHECK = number or null - validation of facility
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  N X,Y,ARRAYN
 | 
|---|
| 25 |  K DIROUT,DIRUT,DTOUT,DUOUT
 | 
|---|
| 26 |  W !
 | 
|---|
| 27 |  F  D  Q:$$QUIT
 | 
|---|
| 28 |  .S DIC=FILE,DIC(0)=MODE
 | 
|---|
| 29 |  .; Set up ^DIC("S") for duplicate check
 | 
|---|
| 30 |  .S DIC("S")="I '$D(ARRAYN(+Y))"
 | 
|---|
| 31 |  .I CHECK=1 D FACT^PXRMXAP
 | 
|---|
| 32 |  .I CHECK=2 S DIC("S")=DIC("S")_",'(+$P(^(0),U,6))"
 | 
|---|
| 33 |  .I CHECK=3 S DIC("S")=DIC("S")_",$$OK^PXRMXS1(+Y)"
 | 
|---|
| 34 |  .I CHECK=4 S DIC("S")=DIC("S")_",$P($G(^PXRMXP(810.5,+Y,30,0)),U,3)>0"
 | 
|---|
| 35 |  .I CHECK=5 S DIC("S")=DIC("S")_",$P($G(^OR(100.21,+Y,10,0)),U,3)>0"
 | 
|---|
| 36 |  .I CNT>0 S DIC("A")=LIT
 | 
|---|
| 37 |  .D ^DIC
 | 
|---|
| 38 |  .I X=(U_U) S DTOUT=1
 | 
|---|
| 39 |  .I $D(DTOUT)!$D(DUOUT) Q
 | 
|---|
| 40 |  .I +Y'=-1 D  Q
 | 
|---|
| 41 |  ..I $D(ARRAYN(+Y)) W !,"Error - Duplicate entry" Q
 | 
|---|
| 42 |  ..S CNT=CNT+1,ARRAY(CNT)=Y_U_Y(0,0)_U_$P(Y(0),U,3)
 | 
|---|
| 43 |  ..S ARRAYN(+Y)=""
 | 
|---|
| 44 |  .I CNT=0,'$$QUIT W !,LIT1
 | 
|---|
| 45 |  .K DIC
 | 
|---|
| 46 |  Q
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  ;Establish the LOCATION criteria
 | 
|---|
| 49 | LOC(ADEF,BDEF) ;
 | 
|---|
| 50 |  N X,Y,DIR
 | 
|---|
| 51 | LOC0 K DIROUT,DIRUT,DTOUT,DUOUT
 | 
|---|
| 52 |  S DIR(0)="S"_U_"HA:All Outpatient Locations;"
 | 
|---|
| 53 |  S DIR(0)=DIR(0)_"HAI:All Inpatient Locations;"
 | 
|---|
| 54 |  S DIR(0)=DIR(0)_"HS:Selected Hospital Locations;"
 | 
|---|
| 55 |  S DIR(0)=DIR(0)_"CA:All Clinic Stops(with encounters);"
 | 
|---|
| 56 |  S DIR(0)=DIR(0)_"CS:Selected Clinic Stops;"
 | 
|---|
| 57 |  S DIR(0)=DIR(0)_"GS:Selected Clinic Groups;"
 | 
|---|
| 58 |  S DIR("A")=ADEF
 | 
|---|
| 59 |  S DIR("B")=BDEF
 | 
|---|
| 60 |  S DIR("?")="Select from the codes displayed. For detailed help type ??"
 | 
|---|
| 61 |  S DIR("??")=U_"D HELP^PXRMXHLP(8)"
 | 
|---|
| 62 |  D ^DIR K DIR
 | 
|---|
| 63 |  I $D(DIROUT) S DTOUT=1
 | 
|---|
| 64 |  I $D(DTOUT)!($D(DUOUT)) Q
 | 
|---|
| 65 |  S PXRMLCSC=Y_U_Y(0)
 | 
|---|
| 66 |  ;If locations are to be selected individually get the list.
 | 
|---|
| 67 |  I Y="HS" D HLOC Q:$D(DTOUT)  G:$D(DUOUT) LOC0
 | 
|---|
| 68 |  I Y="CS" D CSTOP Q:$D(DTOUT)  G:$D(DUOUT) LOC0
 | 
|---|
| 69 |  I Y="GS" D CGRP(.PXRMCGRP) Q:$D(DTOUT)  G:$D(DUOUT) LOC0
 | 
|---|
| 70 |  Q
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  ;Build a list of hospital locations
 | 
|---|
| 73 | HLOC N IEN,SC,X,Y,CHECK
 | 
|---|
| 74 |  K DTOUT,DUOUT
 | 
|---|
| 75 |  S NHL=0
 | 
|---|
| 76 |  S DIC("A")="LOCATION: "
 | 
|---|
| 77 |  W !
 | 
|---|
| 78 |  F  D  Q:$D(DTOUT)  Q:$D(DUOUT)  Q:(Y=-1)&(NHL>0)
 | 
|---|
| 79 |  .S DIC="^SC("
 | 
|---|
| 80 |  .S DIC(0)="AEQMZ"
 | 
|---|
| 81 |  .I NHL>0 S DIC("A")="Select another LOCATION: "
 | 
|---|
| 82 |  .D ^DIC
 | 
|---|
| 83 |  .I X=(U_U) S DTOUT=1
 | 
|---|
| 84 |  .I $D(DTOUT)!($D(DUOUT)) Q
 | 
|---|
| 85 |  .I +Y'=-1 D
 | 
|---|
| 86 |  ..S IEN=$P(Y,U,1)
 | 
|---|
| 87 |  ..;Check Facility code
 | 
|---|
| 88 |  ..N FACILITY S FACILITY=$$FACL^PXRMXAP(IEN)
 | 
|---|
| 89 |  ..I FACILITY="" W !,"Location has no facility code" Q
 | 
|---|
| 90 |  ..I '$D(PXRMFACN(FACILITY)) D  Q
 | 
|---|
| 91 |  ...W !,"Location has a different facility code" Q
 | 
|---|
| 92 |  ..;Check for duplicates
 | 
|---|
| 93 |  ..I (NHL>0),$$DUP(IEN,.PXRMLCHL,2) W !,"Error - Duplicate entry" Q
 | 
|---|
| 94 |  ..S NHL=NHL+1
 | 
|---|
| 95 |  ..;Get the stop code.
 | 
|---|
| 96 |  ..S X=$P(^SC(IEN,0),U,7)
 | 
|---|
| 97 |  ..S SC="Unknown" I +X>0 S SC=$P(^DIC(40.7,X,0),U,2) ; DBIA #557
 | 
|---|
| 98 |  ..I $L(SC)=0 S SC="Unknown"
 | 
|---|
| 99 |  ..;Save the external form of the name, then IEN, and the stop code.
 | 
|---|
| 100 |  ..S PXRMLCHL(NHL)=$P(Y(0,0),U,1)_U_IEN_U_SC
 | 
|---|
| 101 |  ..;Check for mixed inpatient and outpatient locations
 | 
|---|
| 102 |  ..I (NHL>1),$D(CHECK)=0 D
 | 
|---|
| 103 |  ...Q:'$$LOCN^PXRMXAP(.PXRMLCHL)
 | 
|---|
| 104 |  ...W !,"Inpatient and Outpatient locations have been selected"
 | 
|---|
| 105 |  ...S CHECK="DONE"
 | 
|---|
| 106 |  .K DIC
 | 
|---|
| 107 |  .I (NHL=0)&(+Y=-1) W !,"You must select a hospital location!"
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 |  I $D(DUOUT)!($D(DTOUT)) Q
 | 
|---|
| 110 |  ;Sort the hospital location list into alphabetical order.
 | 
|---|
| 111 |  S NHL=$$SORT(NHL,"PXRMLCHL",2)
 | 
|---|
| 112 |  ;Build array by IEN
 | 
|---|
| 113 |  S IC=""
 | 
|---|
| 114 |  F  S IC=$O(PXRMLCHL(IC)) Q:IC'>0  D
 | 
|---|
| 115 |  .S PXRMLOCN($P(PXRMLCHL(IC),U,2))=IC
 | 
|---|
| 116 |  Q
 | 
|---|
| 117 |  ;---
 | 
|---|
| 118 | FACILITY(SEL) ;Select facility (COPIED EX- PXRR)
 | 
|---|
| 119 |  N IC,STATION,X,Y,DIC
 | 
|---|
| 120 |  K DIRUT,DTOUT,DUOUT
 | 
|---|
| 121 |  S NFAC=0
 | 
|---|
| 122 |  S DIC("B")=+$P($$SITE^VASITE,U,3)
 | 
|---|
| 123 |  S DIC("A")="Select FACILITY: "
 | 
|---|
| 124 |  W !
 | 
|---|
| 125 |  F  D  Q:$D(DTOUT)  Q:$D(DUOUT)  Q:(Y=-1)&(NFAC>0)
 | 
|---|
| 126 |  .S DIC=4
 | 
|---|
| 127 |  .S DIC(0)="AEMQZ"
 | 
|---|
| 128 |  .I NFAC>0 S DIC("A")="Select another FACILITY: "
 | 
|---|
| 129 |  .D ^DIC
 | 
|---|
| 130 |  .I X=(U_U) S DTOUT=1
 | 
|---|
| 131 |  .I '$D(DTOUT),('$D(DUOUT)),+Y'=-1 D
 | 
|---|
| 132 |  ..;Check for duplicates
 | 
|---|
| 133 |  ..I (NFAC>0),$$DUP($P(Y,U,1),.PXRMFAC,1) W !,"Error - Duplicate entry" Q
 | 
|---|
| 134 |  ..S NFAC=NFAC+1,PXRMFAC(NFAC)=Y_U_Y(0,0)
 | 
|---|
| 135 |  .K DIC
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 |  I $D(DTOUT)!$D(DUOUT) Q
 | 
|---|
| 138 |  ;;Save the facility names and station.
 | 
|---|
| 139 |  F IC=1:1:NFAC D
 | 
|---|
| 140 |  .S X=$P(PXRMFAC(IC),U,1)
 | 
|---|
| 141 |  .S STATION=$P($G(^DIC(4,X,99)),U,1)
 | 
|---|
| 142 |  .S PXRMFACN(X)=$P(PXRMFAC(IC),U,2)_U_STATION
 | 
|---|
| 143 |  ;Sort the facility list into alphabetical order.
 | 
|---|
| 144 |  S NFAC=$$SORT(NFAC,"PXRMFAC",2)
 | 
|---|
| 145 |  Q
 | 
|---|
| 146 |  ; ---
 | 
|---|
| 147 | CGRP(TEMP) ; Clinic Group Selection
 | 
|---|
| 148 |  N LIT,LIT1,DIC
 | 
|---|
| 149 |  S DIC("A")="Select CLINIC GROUP: ",NOTM=0
 | 
|---|
| 150 |  S LIT="Select another CLINIC GROUP: "
 | 
|---|
| 151 |  S LIT1="You must select a clinic group!"
 | 
|---|
| 152 |  D SEL(409.67,"AEQMZ",.NOTM,.TEMP,"","")
 | 
|---|
| 153 |  ;Build array by IEN
 | 
|---|
| 154 |  S NCGRP=0 N IC S IC=""
 | 
|---|
| 155 |  F  S IC=$O(PXRMCGRP(IC)) Q:IC=""  D
 | 
|---|
| 156 |  .S PXRMCGRN($P(PXRMCGRP(IC),U,1))=IC,NCGRP=IC
 | 
|---|
| 157 |  Q
 | 
|---|
| 158 |  ; ---
 | 
|---|
| 159 | LIST(TEMP) ; Patient List
 | 
|---|
| 160 |  N LIT,LIT1,DIC,NLIST
 | 
|---|
| 161 |  S DIC("A")="Select REMINDER PATIENT LIST: ",NLIST=0
 | 
|---|
| 162 |  S DIC("?")="Select a patient list to run the reminder report against."
 | 
|---|
| 163 |  S LIT="Select another PATIENT LIST: ",LIT1="You must select a list!"
 | 
|---|
| 164 |  D SEL(810.5,"AEQMZ",.NLIST,.TEMP,"",4)
 | 
|---|
| 165 |  Q
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 |  ; ---
 | 
|---|
| 168 | PCMM(TEMP) ; PCMM teams
 | 
|---|
| 169 |  N LIT,LIT1,DIC
 | 
|---|
| 170 |  S DIC("A")="Select PCMM TEAM: ",NOTM=0
 | 
|---|
| 171 |  S LIT="Select another PCMM TEAM: ",LIT1="You must select a team!"
 | 
|---|
| 172 |  D SEL(404.51,"AEQMZ",.NOTM,.TEMP,"",1)
 | 
|---|
| 173 |  Q
 | 
|---|
| 174 |  ; ---
 | 
|---|
| 175 | OERR(TEAM) ; OE/RR teams
 | 
|---|
| 176 |  N LIT,LIT1,DIC
 | 
|---|
| 177 |  S DIC("A")="Select TEAM: ",NOTM=0
 | 
|---|
| 178 |  S LIT="Select another TEAM: ",LIT1="You must select a team!"
 | 
|---|
| 179 |  D SEL(100.21,"AEQMZ",.NOTM,.TEAM,"",5)
 | 
|---|
| 180 |  Q
 | 
|---|
| 181 |  ; ---
 | 
|---|
| 182 | RCAT(REMCAT,REM) ;Reminder Category/Reminder selection
 | 
|---|
| 183 |  N CAT,DIC,LIT,LIT1,SEQ
 | 
|---|
| 184 |  S NCAT=0 K REMCAT,REM
 | 
|---|
| 185 |  ;Reminder Category
 | 
|---|
| 186 | RCATS I PXRMREP="S" D  Q:$D(DUOUT)!$D(DTOUT)
 | 
|---|
| 187 |  .K REMCAT S NCAT=0
 | 
|---|
| 188 |  .S DIC("A")="Select a REMINDER CATEGORY: "
 | 
|---|
| 189 |  .S LIT="Select another REMINDER CATEGORY: ",LIT1=""
 | 
|---|
| 190 |  .D SEL(811.7,"AEQMZ",.NCAT,.REMCAT,PXRMREP,3)
 | 
|---|
| 191 |  ;Individual Reminders
 | 
|---|
| 192 |  D REM(.REM) Q:$D(DTOUT)
 | 
|---|
| 193 |  I $D(DUOUT),PXRMREP="S" G RCATS
 | 
|---|
| 194 |  Q
 | 
|---|
| 195 |  ; ---
 | 
|---|
| 196 | REM(REM) ;Reminders selection
 | 
|---|
| 197 |  N LIT,LIT1,DIC
 | 
|---|
| 198 |  K REM S NREM=0
 | 
|---|
| 199 |  S DIC("A")="Select individual REMINDER: "
 | 
|---|
| 200 |  S LIT="Select another REMINDER: ",LIT1="You must select a reminder!"
 | 
|---|
| 201 |  D SEL(811.9,"AEQMZ",.NREM,.REM,PXRMREP,2)
 | 
|---|
| 202 |  Q
 | 
|---|
| 203 |  ; ---
 | 
|---|
| 204 | PAT(VAR) ; Patient select
 | 
|---|
| 205 |  N LIT,LIT1,DIC
 | 
|---|
| 206 |  S DIC("A")="Select PATIENT: ",NPAT=0
 | 
|---|
| 207 |  S LIT="Select another PATIENT: ",LIT1="You must select a patient!"
 | 
|---|
| 208 |  D SEL(2,"AEQMZ",.NPAT,.VAR,"","")
 | 
|---|
| 209 |  ;Sort the patient list into ascending order.
 | 
|---|
| 210 |  S NPAT=$$SORT(NPAT,"VAR")
 | 
|---|
| 211 |  Q
 | 
|---|
| 212 |  ; ---
 | 
|---|
| 213 | PROV(PRV) ;Build a list of selected providers.
 | 
|---|
| 214 |  N LIT,LIT1,DIC
 | 
|---|
| 215 |  S DIC("A")="Select PROVIDER: ",NPRV=0
 | 
|---|
| 216 |  S LIT="Select another PROVIDER: ",LIT1="You must select a provider!"
 | 
|---|
| 217 |  D SEL(200,"AEQMZ",.NPRV,.PRV,"","")
 | 
|---|
| 218 |  I $D(DTOUT)!($D(DUOUT)) Q
 | 
|---|
| 219 |  ;Sort the provider list into ascending order.
 | 
|---|
| 220 |  S NPRV=$$SORT(NPRV,"PRV")
 | 
|---|
| 221 |  Q
 | 
|---|
| 222 |  ; ---
 | 
|---|
| 223 | CSTOP ;Get a list of clinic stop codes.
 | 
|---|
| 224 |  N LIT,LIT1,DIC,X,Y
 | 
|---|
| 225 |  K DIROUT,DIRUT,DTOUT,DUOUT
 | 
|---|
| 226 |  S DIC("A")="Select CLINIC STOP: "
 | 
|---|
| 227 |  S LIT="Select another CLINIC STOP: "
 | 
|---|
| 228 |  S LIT1="You must select a clinic stop!"
 | 
|---|
| 229 |  S NCS=0
 | 
|---|
| 230 |  W !
 | 
|---|
| 231 |  F  D  Q:$D(DTOUT)  Q:$D(DUOUT)  Q:(Y=-1)&(NCS>0)
 | 
|---|
| 232 |  .S DIC=40.7,DIC(0)="AEMQZ"
 | 
|---|
| 233 |  .I NCS>0 S DIC("A")=LIT
 | 
|---|
| 234 |  .D ^DIC
 | 
|---|
| 235 |  .I X=(U_U) S DTOUT=1
 | 
|---|
| 236 |  .I '$D(DTOUT),('$D(DUOUT)) D
 | 
|---|
| 237 |  ..I +Y'=-1 D  Q
 | 
|---|
| 238 |  ...S NCS=NCS+1
 | 
|---|
| 239 |  ...;Save the external form of the name, the IEN, and the stop code.
 | 
|---|
| 240 |  ...S PXRMCS(NCS)=$P(Y(0,0),U,1)_U_$P(Y,U,1)_U_$P(Y(0),U,2)
 | 
|---|
| 241 |  ..W:NCS=0 !,LIT1
 | 
|---|
| 242 |  ;Sort the clinic stop list into alphabetical order.
 | 
|---|
| 243 |  S NCS=$$SORT(NCS,"PXRMCS",2)
 | 
|---|
| 244 |  ;Build array by IEN
 | 
|---|
| 245 |  S IC=""
 | 
|---|
| 246 |  F  S IC=$O(PXRMCS(IC)) Q:IC=""  D
 | 
|---|
| 247 |  .S PXRMCSN($P(PXRMCS(IC),U,2))=IC
 | 
|---|
| 248 |  Q
 | 
|---|
| 249 |  ; ---
 | 
|---|
| 250 | SORT(N,ARRAY,KEY)       ;Sort an ARRAY with N elements 
 | 
|---|
| 251 |  ;return the number of unique elements.  KEY is the piece of ARRAY on
 | 
|---|
| 252 |  ;which to base the sort.  The default is the first piece.
 | 
|---|
| 253 |  ;
 | 
|---|
| 254 |  K ^TMP($J,"SORT")
 | 
|---|
| 255 |  I (N'>0)!(N=1) Q N
 | 
|---|
| 256 |  N IC,IND
 | 
|---|
| 257 |  I '$D(KEY) S KEY=1
 | 
|---|
| 258 |  F IC=1:1:N S ^TMP($J,"SORT",$P(@ARRAY@(IC),U,KEY))=@ARRAY@(IC)
 | 
|---|
| 259 |  S IND=""
 | 
|---|
| 260 |  F IC=1:1 S IND=$O(^TMP($J,"SORT",IND)) Q:IND=""  D
 | 
|---|
| 261 |  .S @ARRAY@(IC)=^TMP($J,"SORT",IND)
 | 
|---|
| 262 |  K ^TMP($J,"SORT")
 | 
|---|
| 263 |  Q IC-1
 | 
|---|
| 264 |  ;
 | 
|---|
| 265 |  ;Check for duplicate entries
 | 
|---|
| 266 | DUP(VALUE,ARRAY,PIECE) ;
 | 
|---|
| 267 |  N IC,DUP
 | 
|---|
| 268 |  S IC=0,DUP=0
 | 
|---|
| 269 |  F  S IC=$O(ARRAY(IC)) Q:IC=""  D  Q:DUP
 | 
|---|
| 270 |  .I $P(ARRAY(IC),U,PIECE)=VALUE S DUP=1
 | 
|---|
| 271 |  Q DUP
 | 
|---|