Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: PXRMXSU

PXRMXSU.m

Go to the documentation of this file.
PXRMXSU ;SLC/PJH - Reminder Reports DIC Prompts ;01/04/2020
 ;;2.0;CLINICAL REMINDERS;**4,42**;Feb 04, 2005;Build 245
 ;
 ;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
 ;
 ;---
CATCHECK(NCAT,REMCAT) ;Check the selected categories for problems.
 N CATIEN,CATOK,DEFIEN,IND,JND,TEST
 S CATOK=1
 F IND=1:1:NCAT D
 . S CATIEN=$P(REMCAT(IND),U,1)
 . S JND=0
 . F  S JND=+$O(^PXRMD(811.7,CATIEN,2,JND)) Q:JND=0  D
 .. S TEST=^PXRMD(811.7,CATIEN,2,JND,0)
 .. S REMIEN=$P(TEST,U,1)
 .. I '$D(^PXD(811.9,REMIEN)) D
 ... W !!,"Reminder Category: "_$P(^PXRMD(811.7,CATIEN,0),U,1)_" contains a pointer to a reminder that does"
 ... W !,"not exist on the system, the reminder pointer is ",REMIEN,"."
 ... S CATOK=0
 .;Check sub-categories.
 . S JND=0
 . F  S JND=+$O(^PXRMD(811.7,CATIEN,10,JND)) Q:JND=0  D
 .. S SUBCAT(1)=$P(^PXRMD(811.7,CATIEN,10,JND,0),U,1)
 .. S CATOK=$$CATCHECK(1,.SUBCAT)
 Q CATOK
 ;---
 ;
 ;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)
 I '$$CATCHECK(NCAT,.REMCAT) G RCATS
 ;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