PXRMXSU ; SLC/PJH - Reminder Reports DIC Prompts;01/06/2006
;;2.0;CLINICAL REMINDERS;**4**;Feb 04, 2005;Build 21
;
;Called by PXRMXD
;
;Exits from SEL subroutine
QUIT() I $D(DTOUT)!$D(DUOUT) Q 1
;Only one entry allowed
I ONE="D",(CNT>0) Q 1
;Mandatory entry
I Y=-1,(CHECK=3)!(CNT>0) Q 1
;Categories may already contain reminders
I Y=-1,CHECK=2,$D(REMCAT) Q 1
;Otherwise
Q 0
;
;Repeated Prompt using DIC
;-------------------------
SEL(FILE,MODE,CNT,ARRAY,ONE,CHECK) ;
;
; ONE = only allows one entry
; CHECK = number or null - validation of facility
;
N X,Y,ARRAYN
K DIROUT,DIRUT,DTOUT,DUOUT
W !
F D Q:$$QUIT
.S DIC=FILE,DIC(0)=MODE
.; Set up ^DIC("S") for duplicate check
.S DIC("S")="I '$D(ARRAYN(+Y))"
.I CHECK=1 D FACT^PXRMXAP
.I CHECK=2 S DIC("S")=DIC("S")_",'(+$P(^(0),U,6))"
.I CHECK=3 S DIC("S")=DIC("S")_",$$OK^PXRMXS1(+Y)"
.I CHECK=4 S DIC("S")=DIC("S")_",$P($G(^PXRMXP(810.5,+Y,30,0)),U,3)>0"
.I CHECK=5 S DIC("S")=DIC("S")_",$P($G(^OR(100.21,+Y,10,0)),U,3)>0"
.I CNT>0 S DIC("A")=LIT
.D ^DIC
.I X=(U_U) S DTOUT=1
.I $D(DTOUT)!$D(DUOUT) Q
.I +Y'=-1 D Q
..I $D(ARRAYN(+Y)) W !,"Error - Duplicate entry" Q
..S CNT=CNT+1,ARRAY(CNT)=Y_U_Y(0,0)_U_$P(Y(0),U,3)
..S ARRAYN(+Y)=""
.I CNT=0,'$$QUIT W !,LIT1
.K DIC
Q
;
;Establish the LOCATION criteria
LOC(ADEF,BDEF) ;
N X,Y,DIR
LOC0 K DIROUT,DIRUT,DTOUT,DUOUT
S DIR(0)="S"_U_"HA:All Outpatient Locations;"
S DIR(0)=DIR(0)_"HAI:All Inpatient Locations;"
S DIR(0)=DIR(0)_"HS:Selected Hospital Locations;"
S DIR(0)=DIR(0)_"CA:All Clinic Stops(with encounters);"
S DIR(0)=DIR(0)_"CS:Selected Clinic Stops;"
S DIR(0)=DIR(0)_"GS:Selected Clinic Groups;"
S DIR("A")=ADEF
S DIR("B")=BDEF
S DIR("?")="Select from the codes displayed. For detailed help type ??"
S DIR("??")=U_"D HELP^PXRMXHLP(8)"
D ^DIR K DIR
I $D(DIROUT) S DTOUT=1
I $D(DTOUT)!($D(DUOUT)) Q
S PXRMLCSC=Y_U_Y(0)
;If locations are to be selected individually get the list.
I Y="HS" D HLOC Q:$D(DTOUT) G:$D(DUOUT) LOC0
I Y="CS" D CSTOP Q:$D(DTOUT) G:$D(DUOUT) LOC0
I Y="GS" D CGRP(.PXRMCGRP) Q:$D(DTOUT) G:$D(DUOUT) LOC0
Q
;
;Build a list of hospital locations
HLOC N IEN,SC,X,Y,CHECK
K DTOUT,DUOUT
S NHL=0
S DIC("A")="LOCATION: "
W !
F D Q:$D(DTOUT) Q:$D(DUOUT) Q:(Y=-1)&(NHL>0)
.S DIC="^SC("
.S DIC(0)="AEQMZ"
.I NHL>0 S DIC("A")="Select another LOCATION: "
.D ^DIC
.I X=(U_U) S DTOUT=1
.I $D(DTOUT)!($D(DUOUT)) Q
.I +Y'=-1 D
..S IEN=$P(Y,U,1)
..;Check Facility code
..N FACILITY S FACILITY=$$FACL^PXRMXAP(IEN)
..I FACILITY="" W !,"Location has no facility code" Q
..I '$D(PXRMFACN(FACILITY)) D Q
...W !,"Location has a different facility code" Q
..;Check for duplicates
..I (NHL>0),$$DUP(IEN,.PXRMLCHL,2) W !,"Error - Duplicate entry" Q
..S NHL=NHL+1
..;Get the stop code.
..S X=$P(^SC(IEN,0),U,7)
..S SC="Unknown" I +X>0 S SC=$P(^DIC(40.7,X,0),U,2) ; DBIA #557
..I $L(SC)=0 S SC="Unknown"
..;Save the external form of the name, then IEN, and the stop code.
..S PXRMLCHL(NHL)=$P(Y(0,0),U,1)_U_IEN_U_SC
..;Check for mixed inpatient and outpatient locations
..I (NHL>1),$D(CHECK)=0 D
...Q:'$$LOCN^PXRMXAP(.PXRMLCHL)
...W !,"Inpatient and Outpatient locations have been selected"
...S CHECK="DONE"
.K DIC
.I (NHL=0)&(+Y=-1) W !,"You must select a hospital location!"
;
I $D(DUOUT)!($D(DTOUT)) Q
;Sort the hospital location list into alphabetical order.
S NHL=$$SORT(NHL,"PXRMLCHL",2)
;Build array by IEN
S IC=""
F S IC=$O(PXRMLCHL(IC)) Q:IC'>0 D
.S PXRMLOCN($P(PXRMLCHL(IC),U,2))=IC
Q
;---
FACILITY(SEL) ;Select facility (COPIED EX- PXRR)
N IC,STATION,X,Y,DIC
K DIRUT,DTOUT,DUOUT
S NFAC=0
S DIC("B")=+$P($$SITE^VASITE,U,3)
S DIC("A")="Select FACILITY: "
W !
F D Q:$D(DTOUT) Q:$D(DUOUT) Q:(Y=-1)&(NFAC>0)
.S DIC=4
.S DIC(0)="AEMQZ"
.I NFAC>0 S DIC("A")="Select another FACILITY: "
.D ^DIC
.I X=(U_U) S DTOUT=1
.I '$D(DTOUT),('$D(DUOUT)),+Y'=-1 D
..;Check for duplicates
..I (NFAC>0),$$DUP($P(Y,U,1),.PXRMFAC,1) W !,"Error - Duplicate entry" Q
..S NFAC=NFAC+1,PXRMFAC(NFAC)=Y_U_Y(0,0)
.K DIC
;
I $D(DTOUT)!$D(DUOUT) Q
;;Save the facility names and station.
F IC=1:1:NFAC D
.S X=$P(PXRMFAC(IC),U,1)
.S STATION=$P($G(^DIC(4,X,99)),U,1)
.S PXRMFACN(X)=$P(PXRMFAC(IC),U,2)_U_STATION
;Sort the facility list into alphabetical order.
S NFAC=$$SORT(NFAC,"PXRMFAC",2)
Q
; ---
CGRP(TEMP) ; Clinic Group Selection
N LIT,LIT1,DIC
S DIC("A")="Select CLINIC GROUP: ",NOTM=0
S LIT="Select another CLINIC GROUP: "
S LIT1="You must select a clinic group!"
D SEL(409.67,"AEQMZ",.NOTM,.TEMP,"","")
;Build array by IEN
S NCGRP=0 N IC S IC=""
F S IC=$O(PXRMCGRP(IC)) Q:IC="" D
.S PXRMCGRN($P(PXRMCGRP(IC),U,1))=IC,NCGRP=IC
Q
; ---
LIST(TEMP) ; Patient List
N LIT,LIT1,DIC,NLIST
S DIC("A")="Select REMINDER PATIENT LIST: ",NLIST=0
S DIC("?")="Select a patient list to run the reminder report against."
S LIT="Select another PATIENT LIST: ",LIT1="You must select a list!"
D SEL(810.5,"AEQMZ",.NLIST,.TEMP,"",4)
Q
;
; ---
PCMM(TEMP) ; PCMM teams
N LIT,LIT1,DIC
S DIC("A")="Select PCMM TEAM: ",NOTM=0
S LIT="Select another PCMM TEAM: ",LIT1="You must select a team!"
D SEL(404.51,"AEQMZ",.NOTM,.TEMP,"",1)
Q
; ---
OERR(TEAM) ; OE/RR teams
N LIT,LIT1,DIC
S DIC("A")="Select TEAM: ",NOTM=0
S LIT="Select another TEAM: ",LIT1="You must select a team!"
D SEL(100.21,"AEQMZ",.NOTM,.TEAM,"",5)
Q
; ---
RCAT(REMCAT,REM) ;Reminder Category/Reminder selection
N CAT,DIC,LIT,LIT1,SEQ
S NCAT=0 K REMCAT,REM
;Reminder Category
RCATS I PXRMREP="S" D Q:$D(DUOUT)!$D(DTOUT)
.K REMCAT S NCAT=0
.S DIC("A")="Select a REMINDER CATEGORY: "
.S LIT="Select another REMINDER CATEGORY: ",LIT1=""
.D SEL(811.7,"AEQMZ",.NCAT,.REMCAT,PXRMREP,3)
;Individual Reminders
D REM(.REM) Q:$D(DTOUT)
I $D(DUOUT),PXRMREP="S" G RCATS
Q
; ---
REM(REM) ;Reminders selection
N LIT,LIT1,DIC
K REM S NREM=0
S DIC("A")="Select individual REMINDER: "
S LIT="Select another REMINDER: ",LIT1="You must select a reminder!"
D SEL(811.9,"AEQMZ",.NREM,.REM,PXRMREP,2)
Q
; ---
PAT(VAR) ; Patient select
N LIT,LIT1,DIC
S DIC("A")="Select PATIENT: ",NPAT=0
S LIT="Select another PATIENT: ",LIT1="You must select a patient!"
D SEL(2,"AEQMZ",.NPAT,.VAR,"","")
;Sort the patient list into ascending order.
S NPAT=$$SORT(NPAT,"VAR")
Q
; ---
PROV(PRV) ;Build a list of selected providers.
N LIT,LIT1,DIC
S DIC("A")="Select PROVIDER: ",NPRV=0
S LIT="Select another PROVIDER: ",LIT1="You must select a provider!"
D SEL(200,"AEQMZ",.NPRV,.PRV,"","")
I $D(DTOUT)!($D(DUOUT)) Q
;Sort the provider list into ascending order.
S NPRV=$$SORT(NPRV,"PRV")
Q
; ---
CSTOP ;Get a list of clinic stop codes.
N LIT,LIT1,DIC,X,Y
K DIROUT,DIRUT,DTOUT,DUOUT
S DIC("A")="Select CLINIC STOP: "
S LIT="Select another CLINIC STOP: "
S LIT1="You must select a clinic stop!"
S NCS=0
W !
F D Q:$D(DTOUT) Q:$D(DUOUT) Q:(Y=-1)&(NCS>0)
.S DIC=40.7,DIC(0)="AEMQZ"
.I NCS>0 S DIC("A")=LIT
.D ^DIC
.I X=(U_U) S DTOUT=1
.I '$D(DTOUT),('$D(DUOUT)) D
..I +Y'=-1 D Q
...S NCS=NCS+1
...;Save the external form of the name, the IEN, and the stop code.
...S PXRMCS(NCS)=$P(Y(0,0),U,1)_U_$P(Y,U,1)_U_$P(Y(0),U,2)
..W:NCS=0 !,LIT1
;Sort the clinic stop list into alphabetical order.
S NCS=$$SORT(NCS,"PXRMCS",2)
;Build array by IEN
S IC=""
F S IC=$O(PXRMCS(IC)) Q:IC="" D
.S PXRMCSN($P(PXRMCS(IC),U,2))=IC
Q
; ---
SORT(N,ARRAY,KEY) ;Sort an ARRAY with N elements
;return the number of unique elements. KEY is the piece of ARRAY on
;which to base the sort. The default is the first piece.
;
K ^TMP($J,"SORT")
I (N'>0)!(N=1) Q N
N IC,IND
I '$D(KEY) S KEY=1
F IC=1:1:N S ^TMP($J,"SORT",$P(@ARRAY@(IC),U,KEY))=@ARRAY@(IC)
S IND=""
F IC=1:1 S IND=$O(^TMP($J,"SORT",IND)) Q:IND="" D
.S @ARRAY@(IC)=^TMP($J,"SORT",IND)
K ^TMP($J,"SORT")
Q IC-1
;
;Check for duplicate entries
DUP(VALUE,ARRAY,PIECE) ;
N IC,DUP
S IC=0,DUP=0
F S IC=$O(ARRAY(IC)) Q:IC="" D Q:DUP
.I $P(ARRAY(IC),U,PIECE)=VALUE S DUP=1
Q DUP
PXRMXSU ; SLC/PJH - Reminder Reports DIC Prompts;01/06/2006
+1 ;;2.0;CLINICAL REMINDERS;**4**;Feb 04, 2005;Build 21
+2 ;
+3 ;Called by PXRMXD
+4 ;
+5 ;Exits from SEL subroutine
QUIT() IF $DATA(DTOUT)!$DATA(DUOUT)
QUIT 1
+1 ;Only one entry allowed
+2 IF ONE="D"
IF (CNT>0)
QUIT 1
+3 ;Mandatory entry
+4 IF Y=-1
IF (CHECK=3)!(CNT>0)
QUIT 1
+5 ;Categories may already contain reminders
+6 IF Y=-1
IF CHECK=2
IF $DATA(REMCAT)
QUIT 1
+7 ;Otherwise
+8 QUIT 0
+9 ;
+10 ;Repeated Prompt using DIC
+11 ;-------------------------
SEL(FILE,MODE,CNT,ARRAY,ONE,CHECK) ;
+1 ;
+2 ; ONE = only allows one entry
+3 ; CHECK = number or null - validation of facility
+4 ;
+5 NEW X,Y,ARRAYN
+6 KILL DIROUT,DIRUT,DTOUT,DUOUT
+7 WRITE !
+8 FOR
Begin DoDot:1
+9 SET DIC=FILE
SET DIC(0)=MODE
+10 ; Set up ^DIC("S") for duplicate check
+11 SET DIC("S")="I '$D(ARRAYN(+Y))"
+12 IF CHECK=1
DO FACT^PXRMXAP
+13 IF CHECK=2
SET DIC("S")=DIC("S")_",'(+$P(^(0),U,6))"
+14 IF CHECK=3
SET DIC("S")=DIC("S")_",$$OK^PXRMXS1(+Y)"
+15 IF CHECK=4
SET DIC("S")=DIC("S")_",$P($G(^PXRMXP(810.5,+Y,30,0)),U,3)>0"
+16 IF CHECK=5
SET DIC("S")=DIC("S")_",$P($G(^OR(100.21,+Y,10,0)),U,3)>0"
+17 IF CNT>0
SET DIC("A")=LIT
+18 DO ^DIC
+19 IF X=(U_U)
SET DTOUT=1
+20 IF $DATA(DTOUT)!$DATA(DUOUT)
QUIT
+21 IF +Y'=-1
Begin DoDot:2
+22 IF $DATA(ARRAYN(+Y))
WRITE !,"Error - Duplicate entry"
QUIT
+23 SET CNT=CNT+1
SET ARRAY(CNT)=Y_U_Y(0,0)_U_$PIECE(Y(0),U,3)
+24 SET ARRAYN(+Y)=""
End DoDot:2
QUIT
+25 IF CNT=0
IF '$$QUIT
WRITE !,LIT1
+26 KILL DIC
End DoDot:1
IF $$QUIT
QUIT
+27 QUIT
+28 ;
+29 ;Establish the LOCATION criteria
LOC(ADEF,BDEF) ;
+1 NEW X,Y,DIR
LOC0 KILL DIROUT,DIRUT,DTOUT,DUOUT
+1 SET DIR(0)="S"_U_"HA:All Outpatient Locations;"
+2 SET DIR(0)=DIR(0)_"HAI:All Inpatient Locations;"
+3 SET DIR(0)=DIR(0)_"HS:Selected Hospital Locations;"
+4 SET DIR(0)=DIR(0)_"CA:All Clinic Stops(with encounters);"
+5 SET DIR(0)=DIR(0)_"CS:Selected Clinic Stops;"
+6 SET DIR(0)=DIR(0)_"GS:Selected Clinic Groups;"
+7 SET DIR("A")=ADEF
+8 SET DIR("B")=BDEF
+9 SET DIR("?")="Select from the codes displayed. For detailed help type ??"
+10 SET DIR("??")=U_"D HELP^PXRMXHLP(8)"
+11 DO ^DIR
KILL DIR
+12 IF $DATA(DIROUT)
SET DTOUT=1
+13 IF $DATA(DTOUT)!($DATA(DUOUT))
QUIT
+14 SET PXRMLCSC=Y_U_Y(0)
+15 ;If locations are to be selected individually get the list.
+16 IF Y="HS"
DO HLOC
IF $DATA(DTOUT)
QUIT
IF $DATA(DUOUT)
GOTO LOC0
+17 IF Y="CS"
DO CSTOP
IF $DATA(DTOUT)
QUIT
IF $DATA(DUOUT)
GOTO LOC0
+18 IF Y="GS"
DO CGRP(.PXRMCGRP)
IF $DATA(DTOUT)
QUIT
IF $DATA(DUOUT)
GOTO LOC0
+19 QUIT
+20 ;
+21 ;Build a list of hospital locations
HLOC NEW IEN,SC,X,Y,CHECK
+1 KILL DTOUT,DUOUT
+2 SET NHL=0
+3 SET DIC("A")="LOCATION: "
+4 WRITE !
+5 FOR
Begin DoDot:1
+6 SET DIC="^SC("
+7 SET DIC(0)="AEQMZ"
+8 IF NHL>0
SET DIC("A")="Select another LOCATION: "
+9 DO ^DIC
+10 IF X=(U_U)
SET DTOUT=1
+11 IF $DATA(DTOUT)!($DATA(DUOUT))
QUIT
+12 IF +Y'=-1
Begin DoDot:2
+13 SET IEN=$PIECE(Y,U,1)
+14 ;Check Facility code
+15 NEW FACILITY
SET FACILITY=$$FACL^PXRMXAP(IEN)
+16 IF FACILITY=""
WRITE !,"Location has no facility code"
QUIT
+17 IF '$DATA(PXRMFACN(FACILITY))
Begin DoDot:3
+18 WRITE !,"Location has a different facility code"
QUIT
End DoDot:3
QUIT
+19 ;Check for duplicates
+20 IF (NHL>0)
IF $$DUP(IEN,.PXRMLCHL,2)
WRITE !,"Error - Duplicate entry"
QUIT
+21 SET NHL=NHL+1
+22 ;Get the stop code.
+23 SET X=$PIECE(^SC(IEN,0),U,7)
+24 ; DBIA #557
SET SC="Unknown"
IF +X>0
SET SC=$PIECE(^DIC(40.7,X,0),U,2)
+25 IF $LENGTH(SC)=0
SET SC="Unknown"
+26 ;Save the external form of the name, then IEN, and the stop code.
+27 SET PXRMLCHL(NHL)=$PIECE(Y(0,0),U,1)_U_IEN_U_SC
+28 ;Check for mixed inpatient and outpatient locations
+29 IF (NHL>1)
IF $DATA(CHECK)=0
Begin DoDot:3
+30 IF '$$LOCN^PXRMXAP(.PXRMLCHL)
QUIT
+31 WRITE !,"Inpatient and Outpatient locations have been selected"
+32 SET CHECK="DONE"
End DoDot:3
End DoDot:2
+33 KILL DIC
+34 IF (NHL=0)&(+Y=-1)
WRITE !,"You must select a hospital location!"
End DoDot:1
IF $DATA(DTOUT)
QUIT
IF $DATA(DUOUT)
QUIT
IF (Y=-1)&(NHL>0)
QUIT
+35 ;
+36 IF $DATA(DUOUT)!($DATA(DTOUT))
QUIT
+37 ;Sort the hospital location list into alphabetical order.
+38 SET NHL=$$SORT(NHL,"PXRMLCHL",2)
+39 ;Build array by IEN
+40 SET IC=""
+41 FOR
SET IC=$ORDER(PXRMLCHL(IC))
IF IC'>0
QUIT
Begin DoDot:1
+42 SET PXRMLOCN($PIECE(PXRMLCHL(IC),U,2))=IC
End DoDot:1
+43 QUIT
+44 ;---
FACILITY(SEL) ;Select facility (COPIED EX- PXRR)
+1 NEW IC,STATION,X,Y,DIC
+2 KILL DIRUT,DTOUT,DUOUT
+3 SET NFAC=0
+4 SET DIC("B")=+$PIECE($$SITE^VASITE,U,3)
+5 SET DIC("A")="Select FACILITY: "
+6 WRITE !
+7 FOR
Begin DoDot:1
+8 SET DIC=4
+9 SET DIC(0)="AEMQZ"
+10 IF NFAC>0
SET DIC("A")="Select another FACILITY: "
+11 DO ^DIC
+12 IF X=(U_U)
SET DTOUT=1
+13 IF '$DATA(DTOUT)
IF ('$DATA(DUOUT))
IF +Y'=-1
Begin DoDot:2
+14 ;Check for duplicates
+15 IF (NFAC>0)
IF $$DUP($PIECE(Y,U,1),.PXRMFAC,1)
WRITE !,"Error - Duplicate entry"
QUIT
+16 SET NFAC=NFAC+1
SET PXRMFAC(NFAC)=Y_U_Y(0,0)
End DoDot:2
+17 KILL DIC
End DoDot:1
IF $DATA(DTOUT)
QUIT
IF $DATA(DUOUT)
QUIT
IF (Y=-1)&(NFAC>0)
QUIT
+18 ;
+19 IF $DATA(DTOUT)!$DATA(DUOUT)
QUIT
+20 ;;Save the facility names and station.
+21 FOR IC=1:1:NFAC
Begin DoDot:1
+22 SET X=$PIECE(PXRMFAC(IC),U,1)
+23 SET STATION=$PIECE($GET(^DIC(4,X,99)),U,1)
+24 SET PXRMFACN(X)=$PIECE(PXRMFAC(IC),U,2)_U_STATION
End DoDot:1
+25 ;Sort the facility list into alphabetical order.
+26 SET NFAC=$$SORT(NFAC,"PXRMFAC",2)
+27 QUIT
+28 ; ---
CGRP(TEMP) ; Clinic Group Selection
+1 NEW LIT,LIT1,DIC
+2 SET DIC("A")="Select CLINIC GROUP: "
SET NOTM=0
+3 SET LIT="Select another CLINIC GROUP: "
+4 SET LIT1="You must select a clinic group!"
+5 DO SEL(409.67,"AEQMZ",.NOTM,.TEMP,"","")
+6 ;Build array by IEN
+7 SET NCGRP=0
NEW IC
SET IC=""
+8 FOR
SET IC=$ORDER(PXRMCGRP(IC))
IF IC=""
QUIT
Begin DoDot:1
+9 SET PXRMCGRN($PIECE(PXRMCGRP(IC),U,1))=IC
SET NCGRP=IC
End DoDot:1
+10 QUIT
+11 ; ---
LIST(TEMP) ; Patient List
+1 NEW LIT,LIT1,DIC,NLIST
+2 SET DIC("A")="Select REMINDER PATIENT LIST: "
SET NLIST=0
+3 SET DIC("?")="Select a patient list to run the reminder report against."
+4 SET LIT="Select another PATIENT LIST: "
SET LIT1="You must select a list!"
+5 DO SEL(810.5,"AEQMZ",.NLIST,.TEMP,"",4)
+6 QUIT
+7 ;
+8 ; ---
PCMM(TEMP) ; PCMM teams
+1 NEW LIT,LIT1,DIC
+2 SET DIC("A")="Select PCMM TEAM: "
SET NOTM=0
+3 SET LIT="Select another PCMM TEAM: "
SET LIT1="You must select a team!"
+4 DO SEL(404.51,"AEQMZ",.NOTM,.TEMP,"",1)
+5 QUIT
+6 ; ---
OERR(TEAM) ; OE/RR teams
+1 NEW LIT,LIT1,DIC
+2 SET DIC("A")="Select TEAM: "
SET NOTM=0
+3 SET LIT="Select another TEAM: "
SET LIT1="You must select a team!"
+4 DO SEL(100.21,"AEQMZ",.NOTM,.TEAM,"",5)
+5 QUIT
+6 ; ---
RCAT(REMCAT,REM) ;Reminder Category/Reminder selection
+1 NEW CAT,DIC,LIT,LIT1,SEQ
+2 SET NCAT=0
KILL REMCAT,REM
+3 ;Reminder Category
RCATS IF PXRMREP="S"
Begin DoDot:1
+1 KILL REMCAT
SET NCAT=0
+2 SET DIC("A")="Select a REMINDER CATEGORY: "
+3 SET LIT="Select another REMINDER CATEGORY: "
SET LIT1=""
+4 DO SEL(811.7,"AEQMZ",.NCAT,.REMCAT,PXRMREP,3)
End DoDot:1
IF $DATA(DUOUT)!$DATA(DTOUT)
QUIT
+5 ;Individual Reminders
+6 DO REM(.REM)
IF $DATA(DTOUT)
QUIT
+7 IF $DATA(DUOUT)
IF PXRMREP="S"
GOTO RCATS
+8 QUIT
+9 ; ---
REM(REM) ;Reminders selection
+1 NEW LIT,LIT1,DIC
+2 KILL REM
SET NREM=0
+3 SET DIC("A")="Select individual REMINDER: "
+4 SET LIT="Select another REMINDER: "
SET LIT1="You must select a reminder!"
+5 DO SEL(811.9,"AEQMZ",.NREM,.REM,PXRMREP,2)
+6 QUIT
+7 ; ---
PAT(VAR) ; Patient select
+1 NEW LIT,LIT1,DIC
+2 SET DIC("A")="Select PATIENT: "
SET NPAT=0
+3 SET LIT="Select another PATIENT: "
SET LIT1="You must select a patient!"
+4 DO SEL(2,"AEQMZ",.NPAT,.VAR,"","")
+5 ;Sort the patient list into ascending order.
+6 SET NPAT=$$SORT(NPAT,"VAR")
+7 QUIT
+8 ; ---
PROV(PRV) ;Build a list of selected providers.
+1 NEW LIT,LIT1,DIC
+2 SET DIC("A")="Select PROVIDER: "
SET NPRV=0
+3 SET LIT="Select another PROVIDER: "
SET LIT1="You must select a provider!"
+4 DO SEL(200,"AEQMZ",.NPRV,.PRV,"","")
+5 IF $DATA(DTOUT)!($DATA(DUOUT))
QUIT
+6 ;Sort the provider list into ascending order.
+7 SET NPRV=$$SORT(NPRV,"PRV")
+8 QUIT
+9 ; ---
CSTOP ;Get a list of clinic stop codes.
+1 NEW LIT,LIT1,DIC,X,Y
+2 KILL DIROUT,DIRUT,DTOUT,DUOUT
+3 SET DIC("A")="Select CLINIC STOP: "
+4 SET LIT="Select another CLINIC STOP: "
+5 SET LIT1="You must select a clinic stop!"
+6 SET NCS=0
+7 WRITE !
+8 FOR
Begin DoDot:1
+9 SET DIC=40.7
SET DIC(0)="AEMQZ"
+10 IF NCS>0
SET DIC("A")=LIT
+11 DO ^DIC
+12 IF X=(U_U)
SET DTOUT=1
+13 IF '$DATA(DTOUT)
IF ('$DATA(DUOUT))
Begin DoDot:2
+14 IF +Y'=-1
Begin DoDot:3
+15 SET NCS=NCS+1
+16 ;Save the external form of the name, the IEN, and the stop code.
+17 SET PXRMCS(NCS)=$PIECE(Y(0,0),U,1)_U_$PIECE(Y,U,1)_U_$PIECE(Y(0),U,2)
End DoDot:3
QUIT
+18 IF NCS=0
WRITE !,LIT1
End DoDot:2
End DoDot:1
IF $DATA(DTOUT)
QUIT
IF $DATA(DUOUT)
QUIT
IF (Y=-1)&(NCS>0)
QUIT
+19 ;Sort the clinic stop list into alphabetical order.
+20 SET NCS=$$SORT(NCS,"PXRMCS",2)
+21 ;Build array by IEN
+22 SET IC=""
+23 FOR
SET IC=$ORDER(PXRMCS(IC))
IF IC=""
QUIT
Begin DoDot:1
+24 SET PXRMCSN($PIECE(PXRMCS(IC),U,2))=IC
End DoDot:1
+25 QUIT
+26 ; ---
SORT(N,ARRAY,KEY) ;Sort an ARRAY with N elements
+1 ;return the number of unique elements. KEY is the piece of ARRAY on
+2 ;which to base the sort. The default is the first piece.
+3 ;
+4 KILL ^TMP($JOB,"SORT")
+5 IF (N'>0)!(N=1)
QUIT N
+6 NEW IC,IND
+7 IF '$DATA(KEY)
SET KEY=1
+8 FOR IC=1:1:N
SET ^TMP($JOB,"SORT",$PIECE(@ARRAY@(IC),U,KEY))=@ARRAY@(IC)
+9 SET IND=""
+10 FOR IC=1:1
SET IND=$ORDER(^TMP($JOB,"SORT",IND))
IF IND=""
QUIT
Begin DoDot:1
+11 SET @ARRAY@(IC)=^TMP($JOB,"SORT",IND)
End DoDot:1
+12 KILL ^TMP($JOB,"SORT")
+13 QUIT IC-1
+14 ;
+15 ;Check for duplicate entries
DUP(VALUE,ARRAY,PIECE) ;
+1 NEW IC,DUP
+2 SET IC=0
SET DUP=0
+3 FOR
SET IC=$ORDER(ARRAY(IC))
IF IC=""
QUIT
Begin DoDot:1
+4 IF $PIECE(ARRAY(IC),U,PIECE)=VALUE
SET DUP=1
End DoDot:1
IF DUP
QUIT
+5 QUIT DUP