ORUTL ;SLC/DCM,RWF - ORDER UTILITIES ;11/02/2017 17:00
;;3.0;ORDER ENTRY/RESULTS REPORTING;**95,280,218,350,422,377**;Dec 17, 1997;Build 582
ISCLORD(ORY,ORIFN) ;;RPC to test if an order is a clinic order
S ORIFN=+ORIFN
S ORY=0
I 'ORIFN Q
N ORZ0 S ORZ0=$G(^OR(100,ORIFN,0))
N ORTO S ORTO=$P(ORZ0,U,11)
I ORTO=$$CLINMDDG S ORY=1
I ORTO=$$CLINIVDG S ORY=1
Q
CLINMDDG() ;RETURN THE IEN OF THE CLINIC MEDICATIONS DISPLAY GROUP
Q $O(^ORD(100.98,"B","CLINIC MEDICATIONS",0))
CLINIVDG() ;RETURN THE IEN OF THE CLINIC INFUSIONS DISPLAY GROUP
Q $O(^ORD(100.98,"B","CLINIC INFUSIONS",0))
LOC ;;GET PT. LOCATION
S C(1)=$S($D(ORL(2))#2:$S(ORL(2)[";":$S($D(@("^"_$P(ORL(2),";",2)_+ORL(2)_",0)")):$P(^(0),"^"),1:""),1:""),1:"")
I 'OR4,ORVP[";DPT(",$D(ORL(2)),ORL(2) Q
G:$L(C(1)) LOC1 S (CT,C)=0,O=1 I ORVP[";DPT(",$O(^DPT(+ORVP,"DE",0))>0 W !!,"Currently enrolled in the following clinics: ",!
I S I=0 F L=0:0 S I=$O(^DPT(+ORVP,"DE",I)) Q:I'>0 I $D(^(I,0)) S Y=^(0) I $P(Y,"^",2)'="I",'$P(Y,"^",3) I $D(^SC(+Y,0)) S X=^(0) D
. I $D(^SC(+Y,"I")) S ORIA=+^("I"),ORRA=$P(^("I"),"^",2) I $S('ORIA:0,ORIA>DT:0,ORRA'>DT&(ORRA):0,1:1) Q
. S CT=CT+1 W:(CT#2) !?17 W:'(CT#2) ?47 W $P(X,"^") S C=C+1,C(1)=$P(X,"^") S:C'=1 C=-1
W !
LOC1 S C=1 W !,"Patient Location: " W:C=1&($L(C(1))) C(1),"//" R X:DTIME G QUIT:'$T,QUIT:C'=1&(X=""),LOC:$L(X)>20!(X'?.ANP),QUIT:X[U
S DIC("S")="I ""FI""'[$P(^(0),""^"",3),'$P($G(^(""OOS"")),""^"")",DIC=44,DIC(0)=$S(C=1&($L(C(1)))&(X=""):"EMQOZX",1:"EMQZ")
S:X="" X=C(1) D ^DIC G LOC:X["?" S:Y>0 ORL=+Y_";SC(",ORL(0)=$S($L($P(Y(0),"^",2)):$P(Y(0),"^",2),1:$E($P(Y(0),"^"),1,4))
K ORIA,ORRA I $D(^SC(+Y,"I")) S ORIA=+^("I"),ORRA=$P(^("I"),U,2)
I $S('$D(ORIA):0,'ORIA:0,ORIA>DT:0,ORRA'>DT&(ORRA):0,1:1) W $C(7)," This location has been inactivated." K ORL G LOC
I Y<0 W " You must select a standard location." G LOC
K DIC,C,ORIA,ORRA Q
QUIT S OREND=1 K DIC,C Q
READ ;;Hold screen
I $D(IOST) Q:$E(IOST)'="C"
W ! I $D(IOSL),$Y<(IOSL-4) G READ
W !?5,"Press return to continue " R X:$S($D(DTIME):DTIME,1:300)
Q
CHKNAM(X,Y) ;Input transform to not allow certain characters
;X is the text to be checked, Y are the characters not allowed as sent in by the input transform of the field
N I,J I '$D(Y) S Y=";^" ;if no special characters sent in, set list to all
F I=1:1:$L(Y) I X[($E(Y,I)) S J=1
Q +$G(J)
CHKMNE(X) ;Input transform to not allow use of standard Lmgr Mnemonics
N Y
S Y=$$UP^XLFSTR(X) ;check to make sure mnemonic isn't set to lower case of restricted entries. List Manager is case insensitive
I Y="ADPL"!(Y="DN")!(Y="Q")!(Y="FS")!(Y="GO")!(Y="?")!(Y="??")!(Y="LS")!(Y="+")!(Y="-")!(Y="PL")!(Y="PS")!(Y="RD")!(Y="SL")!(Y="<")!(Y=">")!(Y="UP")!(Y="PI")!(Y="CWAD")!(Y="TD")!(Y="EX") Q 1
Q 0
PAD(ORX,ORL) ; Pads string to specified length
N ORY
S ORY="",$P(ORY," ",(ORL-$L(ORX))+1)=""
Q ORY
MAIL(XMTEXT,XMSUB,XMY,SUBSCR) ;SEND AN EMAIL
;PARAMETERS: XMTEXT => STRING CONTAINING NAME OF ARRAY CONTAINING MESSAGE TEXT (REQUIRED)
; XMSUB => STRING CONTAINING THE SUBJECT OF THE MESSAGE (REQUIRED)
; XMY => REFERENCE TO AN ARRAY CONTAINING THE RECIPIENTS (OPTIONAL)
; SUBSCR => STRING CONTAINING THE SUBSCIPT WITHIN ^XTMP WHERE RECIPIENTS ARE STORED (OPTIONAL)
;RETURN: $$MAIL => STRING CONTAINING XMMG (ERROR STRING)^XMERR (NUMBER OF ERRORS)
N XMMG,XMDUZ,XMZ,XMERR,DIFROM,ORMSG
Q:'$D(XMTEXT)!($G(XMSUB)="")
I $D(XMY)=0 D
.I $G(SUBSCR)'="",($Q(^XTMP(SUBSCR,0))[SUBSCR) D Q
..K ^XTMP(SUBSCR,0)
..M XMY=^XTMP(SUBSCR)
..K ^XTMP(SUBSCR)
.I $D(ZTQUEUED)>0 D
..S XMY(DUZ)=""
.E D
..S ORMSG(1)=" "
..S ORMSG(2)="Select the recipient(s) of the report below."
..D MAILOUT(.ORMSG)
S XMDUZ="POSTMASTER" ;FORCE SENDER TO BE POSTMASTER
D ^XMD ;ICR #10070
K ORMSG
I $D(XMMG)>0 D
.S ORMSG(1)=" "
.S ORMSG(2)="Unable to email the report:"
.S ORMSG(3)=XMMG
.D MAILOUT(.ORMSG)
Q $G(XMMG)_U_$G(XMERR)
MAILOUT(MESSAGE) ;OUTPUT THE ORMSG ARRAY FROM MAIL LINE TAG
;IF KIDS IS NOT EXECUTING, OUTPUT THE MESSAGE TO THE SCREEN
I $G(XPDNM)="" D
.N LINE S LINE=0 F S LINE=$O(MESSAGE(LINE)) Q:+$G(LINE)=0 W MESSAGE(LINE),!
E D MES^XPDUTL(.MESSAGE)
Q
WRAP(ORLINE,OROUTPUT,ORDINDEN,ORTRIM,OROI,ORCNT,ORIOM,ORZERO) ;WRAP THE TEXT SO
; THAT IT IS NO MORE THAN X CHARACTERS WIDE
;PARAMETERS: ORLINE =>SINGLE LINE OF TEXT TO WRAP
; OROUTPUT=>NAME OF ARRAY THAT WILL STORE THE WRAPPED TEXT IN THE FORMAT:
; OROUTPUT=NUMBER OF LINES OF TEXT RETURNED
; OROUTPUT(N)=LINE N OF TEXT
; ORDINDEN=>FOR RETURNED TEXT, DETERMINE WHETHER TO INDENT LINES 2 THROUGH LAST (1) OR NOT (0)
; DEFAULT: 1
; ORTRIM =>FOR RETURNED TEXT, STRIP TRAILING SPACES ON EACH LINE (1) OR NOT (0)
; DEFAULT: 1
; OROI =>FOR RETURNED TEXT, THE COLUMN NUMBER TO INDENT LINES 2 THROUGH LAST TO
; DEFAULT: CALCULATE COLUMN TO INDENT TO
; ORCNT =>'$D(ORCNT) - RETURN NUMBER OF LINES IN RETURN ARRAY (OROUTPUT=N)
; $D(ORCNT)=1 - RETURN NUMBER OF LINES IN ORCNT
; ORIOM =>HOW WIDE EACH LINE SHOULD BE
; +ORIOM=0 - USES EITHER VALUE IN IOM OR 80
; ORZERO =>FOR RETURNED TEXT, RETURN TEXT IN A ZERO SUBSCRIPT DESCENDENT FROM THE LINE
; NUMBER SUBSCRIPT (1) OR NOT (0)
; DEFAULT: 0
N ORRETURN,ORTEMP,ORINDENT,ORLCNT
S ORDINDEN=+$G(ORDINDEN,1),ORTRIM=+$G(ORTRIM,1),OROI=+$G(OROI),ORZERO=+$G(ORZERO)
I $D(ORCNT) S ORLCNT=ORCNT
I $G(@OROUTPUT)>0 S ORLCNT=@OROUTPUT
S ORIOM=+$S($G(ORIOM)>0:ORIOM,$G(IOM)>0:IOM,1:80)
I ORDINDEN,'OROI D
.N ORCHR
.I ORLINE[":",($L($P(ORLINE,":"))<ORIOM) S ORINDENT=$$REPEAT^XLFSTR(" ",$L($P(ORLINE,":"))+2)
.I ORLINE'[":",($E(ORLINE,1)=" ") D
..F ORCHR=1:1:$L(ORLINE) Q:$E(ORLINE,ORCHR)'=" "
..S ORINDENT=$$REPEAT^XLFSTR(" ",ORCHR-1)
.I ORLINE'[":",($E(ORLINE,1)'=" ") D
..N START,END
..F ORCHR=1:1:$L(ORLINE) Q:+$G(END) D
...I '+$G(START),($E(ORLINE,ORCHR)=" "),($E(ORLINE,ORCHR+1)=" ") S START=1
...I +$G(START),($E(ORLINE,ORCHR)'=" ") S END=1
..S:+$G(START)>0 ORINDENT=$$REPEAT^XLFSTR(" ",ORCHR-2)
I ORDINDEN,OROI>0 S ORINDENT=$$REPEAT^XLFSTR(" ",OROI)
S ORTEMP=1,ORTEMP(ORTEMP)=ORLINE
F Q:$L(ORTEMP(ORTEMP))<(ORIOM+1) D
.N ORTEMP1,ORCHR
.F ORCHR=ORIOM:-1:1 Q:$E(ORTEMP(ORTEMP),ORCHR)=" "
.S:ORCHR=1 ORCHR=ORIOM
.I ORDINDEN,ORCHR=$L($G(ORINDENT)) S ORCHR=ORIOM
.S ORTEMP1=ORTEMP(ORTEMP)
.S ORTEMP(ORTEMP)=$E(ORTEMP1,1,ORCHR)
.S:ORTRIM ORTEMP(ORTEMP)=$$TRIM^XLFSTR(ORTEMP(ORTEMP),"R")
.S ORTEMP=ORTEMP+1
.S ORTEMP(ORTEMP)=$G(ORINDENT)_$E(ORTEMP1,ORCHR+1,*)
S ORTEMP=0 F S ORTEMP=$O(ORTEMP(ORTEMP)) Q:+ORTEMP=0 D
.S ORLCNT=1+$G(ORLCNT)
.I ORZERO S @OROUTPUT@(ORLCNT,0)=ORTEMP(ORTEMP)
.I 'ORZERO S @OROUTPUT@(ORLCNT)=ORTEMP(ORTEMP)
I '$D(ORCNT) S @OROUTPUT=ORLCNT
E S ORCNT=ORLCNT
Q
DEVICE(ZTRTN,ZTDESC,%ZIS,ZTSAVE) ;PROMPT THE USER FOR THE OUTPUT DEVICE
;PARAMETERS: ZTRTN => LINE TAG THAT STARTS PRINTING THE REPORT
; ZTDESC => TASKMAN TASK DESCRIPTION
; %ZIS => FLAGS TO PASS TO ^%ZIS
; ZTSAVE => VARIABLES TO SAVE FOR TASKMAN
N POP,CBUFFER
S %ZIS("B")="",CBUFFER=0
D ^%ZIS
Q:+$G(POP)
I $D(IO("Q")) D Q
.N ZTSK,ORTEXT
.S ORTEXT=$P(ZTDESC,"OR ",2)
.S ZTSAVE("CBUFFER")=""
.D ^%ZTLOAD,HOME^%ZIS
.K IO("Q")
.I +$G(ZTSK)>0 W !,"Successfully queued the "_ORTEXT_" report.",!,"Task Number: "_ZTSK,! H 2
I '$D(IO("Q")) D
.U IO
.I $E(IOST,1,2)="C-" W @IOF S CBUFFER=3
.D @ZTRTN,^%ZISC
Q
;PARAMETERS: TITLE => THE TITLE OF THE REPORT
; PAGE => (REFERENCE) PAGE NUMBER
; HEADER => (REFERENCE) COLUMN NAMES, FORMATTED AS:
; COLUMN(LINE_NUMBER)=TEXT
; NOTE: LINE_NUMBER STARTS AT ONE
; NEWRPT => (OPTIONAL) ALLOWS PRINTING OF MULTIPLE REPORTS
; ONE AFTER THE OTHER
; UNDEFINED: NOT PRINTING MULTIPLE REPORTS
; 0 (DEFAULT): THIS IS NOT THE START OF A
; NEW REPORT
; 1: THIS IS THE START OF A NEW REPORT
;RETURNS: 0 => USER WANTS TO CONTINUE PRINTING
; 1 => USER DOES NOT WANT TO CONTINUE PRINTING
Q:$$STOPTASK 1
N X,END
S PAGE=1+$G(PAGE)
I PAGE>1!(+$G(NEWRPT)) D Q:$G(END) 1
.I $E(IOST,1,2)="C-" W !,"Press RETURN to continue or '^' to exit: " R X:DTIME S END='$T!(X=U) Q:$G(END)
.I $Y>0,$Y<=IOSL W @IOF
.I $Y>IOSL S $Y=0
I PAGE=1,($E(IOST,1,2)="C-"),('+$G(NEWRPT)) W @IOF
N NOW,INDEX
S NOW=$$UP^XLFSTR($$HTE^XLFDT($H)),NOW=$P(NOW,"@",1)_" "_$P($P(NOW,"@",2),":",1,2)
W $$LJ^XLFSTR($E(TITLE,1,46),47," ")_NOW_" PAGE "_PAGE,!
S INDEX=0 F S INDEX=$O(HEADER(INDEX)) Q:'INDEX W HEADER(INDEX),!
W $$REPEAT^XLFSTR("-",(IOM-1)),!
Q 0
STOPTASK() ;DETERMINE IF TASKMAN HAS ASKED PROCESS TO STOP
;RETURNS: 0 => TASKMAN HAS NOT ASKED TASK TO STOP
; 1 => TASKMAN HAS ASKED TASK TO STOP
I $D(ZTQUEUED),($$S^%ZTLOAD) D Q:$G(ZTSTOP)=1 1
.S ZTSTOP=$$S^%ZTLOAD("Received stop request"),ZTSTOP=1
Q 0
FMERROR(ERROR) ;OUTPUT FILEMAN ERROR
;PARAMETERS: ERROR => (REFERENCE) ARRAY CONTAINING THE FILEMAN ERROR
N OUT
W !!,"Unable to generate the report due to the following FileMan error:",!
W "FILEMAN ERROR #"_ERROR("DIERR",1)_":",!
N IDX S IDX="" F S IDX=$O(ERROR("DIERR",1,"TEXT",IDX)) Q:'IDX D WRAP(ERROR("DIERR",1,"TEXT",IDX),"OUT")
S IDX=0 F S IDX=$O(OUT(IDX)) Q:+$G(IDX)=0 W OUT(IDX),!
Q
DIVPRMPT(DIV) ;PROMPT THE USER FOR WHICH ACTIVE DIVISION(S)
;PARAMETERS: DIV => REFERENCE TO ARRAY WHICH WILL CONTAIN THE SELECTED DIVISION(S) WHEN THIS FINISHES
; FORMAT: DIV(FILE #4 IEN)=INSTITUTION NAME
; IF THE USER SELECTS ALL DIVISIONS, THEN ONLY THE FOLLOWING IS RETURNED:
; DIV("ALL")="all divisions"
;RETURNS: -1 USER ENTERED CARET AT PROMPT IF SITE IS MULTIDIVISIONAL
; 0 INSTITUTION FILE POINTER IS MISSING FOR ALL SELECTED DIVISIONS
; 1 SUCCESSFUL SELECTION OF DIVISION(S)
N SELDIV,BADDIV,TIUDI,IDX,DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT,COUNT,DELIMIT
F D Q:+$G(SELDIV)=1!(+$G(SELDIV)=-1)
.D SELDIV^TIULA
.S IDX=0 F S IDX=$O(TIUDI(IDX)) Q:+$G(IDX)=0 D
..S DIV(TIUDI(IDX))=$P($$SITE^VASITE(,IDX),U,2),COUNT=1+$G(COUNT)
.I SELDIV=1,('$D(DIV)) S DIV("ALL")="all divisions"
.I $D(BADDIV) D
..N TEXT,OUTPUT
..S DELIMIT=", "
..F IDX=1:1:$L(BADDIV,",") D
...S:IDX=$L(BADDIV,",") DELIMIT=" and "
...S TEXT=$S($G(TEXT)'="":TEXT_DELIMIT,1:"")_$P(BADDIV,",",IDX)
..S BADDIV="I'm sorry, but "_TEXT_" "_$S($L(BADDIV,",")=1:"is not a valid division.",$L(BADDIV,",")>1:"are not valid divisions.",1:"you selected an invalid division.")
..D WRAP^ORUTL(BADDIV,"OUTPUT")
..W !!
..F IDX=1:1:OUTPUT W OUTPUT(IDX),!
..I $D(DIV) D
...S DIR(0)="Y"_U,DIR("A")="Do you want to continue with the valid division"_$S(COUNT>1:"s",1:"")_" already selected"
...S DIR("B")="YES"
...D ^DIR
...Q:$D(DIRUT)
...S:Y SELDIV=1
Q SELDIV
HASDIV(Y,DIV,RET) ;DETERMINE IF THE SPECIFIED USER BELONGS TO A SET OF DIVISIONS RETURNED BY DIVPRMPT^ORUTL
;PARAMETERS: Y => IEN IN THE NEW PERSON FILE (#200)
; DIV => REFERENCE TO ARRAY CONTAINING SELECTED DIVISIONS
; FORMAT: DIV(FILE_#4_IEN)=INSTITUTION NAME
; DIV("FOUND",FILE_#4_IEN)=INSTITUTION NAME <-- FOR DISCOVERED DIVISIONS
; RET => 1 TO RETURN DISCOVERED DIVISIONS IN DIV ARRAY, WHEN "ALL DIVISIONS" ARE SELECTED
; 0 TO NOT RETURN DISCOVERED DIVISIONS (DEFAULT)
;RETURNS: NAME OF Y'S DIVISION
; EMPTY STRING IF Y'S DIVISION IS NOT A SELECTED DIVISION
N DIVISION S DIVISION=""
S RET=+$G(RET)
I $D(DIV) D
.N DIVISIONS,IDX,HASDIV
.;IA #2533
.S HASDIV=$$DIV4^XUSER(.DIVISIONS,Y)
.I HASDIV=0 D
..N IEN
..S IEN=$P($$SITE^VASITE(),U)
..S:+IEN=0 IEN=DUZ(2)
..S DIVISIONS(IEN)=1
.I $G(DIV("ALL"))="all divisions" D Q
..N IEN
..S IEN=0 F S IEN=$O(DIVISIONS(IEN)) Q:'+IEN D
...I DIVISIONS(IEN) D
....S DIVISION=$$GET1^DIQ(4,IEN_",",.01)
....S:RET DIV("FOUND",IEN)=DIVISION
..I DIVISION="" D
...S IEN=$O(DIVISIONS(0)),DIVISION=$$GET1^DIQ(4,IEN_",",.01)
...S:RET DIV("FOUND",IEN)=DIVISION
.S IDX=0 F S IDX=$O(DIVISIONS(IDX)) Q:+$G(IDX)=0 D
..I $D(DIV(IDX)) D
...I DIVISION'="",(DIVISIONS(IDX)=1) S DIVISION=DIV(IDX)
...I DIVISION="" S DIVISION=DIV(IDX)
Q DIVISION
LHASDIV(LOC,DIV,RET) ;DETERMINE IF THE SPECIFIED LOCATION BELONGS TO A SET OF DIVISIONS RETURNED BY DIVPRMPT^ORUTL
;PARAMETERS: LOC => VARIABLE POINTER TO HOSPITAL LOCATION FILE (#44)
; DIV => REFERENCE TO ARRAY CONTAINING SELECTED DIVISIONS
; FORMAT: DIV(FILE_#4_IEN)=INSTITUTION NAME
; DIV("FOUND",FILE_#4_IEN)=INSTITUTION NAME <-- FOR DISCOVERED DIVISIONS
; RET => 1 TO RETURN DISCOVERED DIVISIONS IN DIV ARRAY, WHEN "ALL DIVISIONS" ARE SELECTED
; 0 TO NOT RETURN DISCOVERED DIVISIONS (DEFAULT)
;RETURNS: NAME OF LOC'S DIVISION
; EMPTY STRING IF LOC'S DIVISION IS NOT A SELECTED DIVISION
N DIVISION,LOCDIV
S DIVISION="",LOCDIV=0,LOC=$G(LOC),RET=+$G(RET)
I $D(DIV) D
.I LOC>0 D
..N GLOREF,HLIEN
..S GLOREF=U_$$UP^XLFSTR($P(LOC,";",2))_+LOC_",0)"
..I GLOREF'?1"^SC("1.N1",0)" Q
..;IA #10040
..S LOCDIV=$P($G(@GLOREF),U,15)
..I +LOCDIV D
...N ORFND
...;IA #2817
...S ORFND=0,HLIEN=0 F S HLIEN=$O(^DG(40.8,"AD",HLIEN)) Q:HLIEN="" D
....I $D(^DG(40.8,"AD",HLIEN,LOCDIV)) D
.....S ORFND=1
.....I '$D(DIV("ALL")),$D(DIV(HLIEN)) S DIVISION=DIV(HLIEN)
.....I $D(DIV("ALL")) D
......S DIVISION=$$GET1^DIQ(4,HLIEN_",",.01)
......S:RET DIV("FOUND",HLIEN)=DIVISION
...I DIVISION="",'ORFND S LOCDIV=0
.I 'LOC!('LOCDIV) D
..N IEN
..S IEN=+$P($$SITE^VASITE(),U)
..S:'IEN IEN=+DUZ(2)
..Q:'IEN
..I $G(DIV("ALL"))="all divisions" D
...S DIVISION=$$GET1^DIQ(4,IEN_",",.01)
...S:RET DIV("FOUND",IEN)=DIVISION
..I '$D(DIV("ALL")),($D(DIV(IEN))) S DIVISION=DIV(IEN)
Q DIVISION
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HORUTL 14362 printed Oct 16, 2024@18:35:11 Page 2
ORUTL ;SLC/DCM,RWF - ORDER UTILITIES ;11/02/2017 17:00
+1 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**95,280,218,350,422,377**;Dec 17, 1997;Build 582
ISCLORD(ORY,ORIFN) ;;RPC to test if an order is a clinic order
+1 SET ORIFN=+ORIFN
+2 SET ORY=0
+3 IF 'ORIFN
QUIT
+4 NEW ORZ0
SET ORZ0=$GET(^OR(100,ORIFN,0))
+5 NEW ORTO
SET ORTO=$PIECE(ORZ0,U,11)
+6 IF ORTO=$$CLINMDDG
SET ORY=1
+7 IF ORTO=$$CLINIVDG
SET ORY=1
+8 QUIT
CLINMDDG() ;RETURN THE IEN OF THE CLINIC MEDICATIONS DISPLAY GROUP
+1 QUIT $ORDER(^ORD(100.98,"B","CLINIC MEDICATIONS",0))
CLINIVDG() ;RETURN THE IEN OF THE CLINIC INFUSIONS DISPLAY GROUP
+1 QUIT $ORDER(^ORD(100.98,"B","CLINIC INFUSIONS",0))
LOC ;;GET PT. LOCATION
+1 SET C(1)=$SELECT($DATA(ORL(2))#2:$SELECT(ORL(2)[";":$SELECT($DATA(@("^"_$PIECE(ORL(2),";",2)_+ORL(2)_",0)")):$PIECE(^(0),"^"),1:""),1:""),1:"")
+2 IF 'OR4
IF ORVP[";DPT("
IF $DATA(ORL(2))
IF ORL(2)
QUIT
+3 if $LENGTH(C(1))
GOTO LOC1
SET (CT,C)=0
SET O=1
IF ORVP[";DPT("
IF $ORDER(^DPT(+ORVP,"DE",0))>0
WRITE !!,"Currently enrolled in the following clinics: ",!
+4 IF $TEST
SET I=0
FOR L=0:0
SET I=$ORDER(^DPT(+ORVP,"DE",I))
if I'>0
QUIT
IF $DATA(^(I,0))
SET Y=^(0)
IF $PIECE(Y,"^",2)'="I"
IF '$PIECE(Y,"^",3)
IF $DATA(^SC(+Y,0))
SET X=^(0)
Begin DoDot:1
+5 IF $DATA(^SC(+Y,"I"))
SET ORIA=+^("I")
SET ORRA=$PIECE(^("I"),"^",2)
IF $SELECT('ORIA:0,ORIA>DT:0,ORRA'>DT&(ORRA):0,1:1)
QUIT
+6 SET CT=CT+1
if (CT#2)
WRITE !?17
if '(CT#2)
WRITE ?47
WRITE $PIECE(X,"^")
SET C=C+1
SET C(1)=$PIECE(X,"^")
if C'=1
SET C=-1
End DoDot:1
+7 WRITE !
LOC1 SET C=1
WRITE !,"Patient Location: "
if C=1&($LENGTH(C(1)))
WRITE C(1),"//"
READ X:DTIME
if '$TEST
GOTO QUIT
if C'=1&(X="")
GOTO QUIT
if $LENGTH(X)>20!(X'?.ANP)
GOTO LOC
if X[U
GOTO QUIT
+1 SET DIC("S")="I ""FI""'[$P(^(0),""^"",3),'$P($G(^(""OOS"")),""^"")"
SET DIC=44
SET DIC(0)=$SELECT(C=1&($LENGTH(C(1)))&(X=""):"EMQOZX",1:"EMQZ")
+2 if X=""
SET X=C(1)
DO ^DIC
if X["?"
GOTO LOC
if Y>0
SET ORL=+Y_";SC("
SET ORL(0)=$SELECT($LENGTH($PIECE(Y(0),"^",2)):$PIECE(Y(0),"^",2),1:$EXTRACT($PIECE(Y(0),"^"),1,4))
+3 KILL ORIA,ORRA
IF $DATA(^SC(+Y,"I"))
SET ORIA=+^("I")
SET ORRA=$PIECE(^("I"),U,2)
+4 IF $SELECT('$DATA(ORIA):0,'ORIA:0,ORIA>DT:0,ORRA'>DT&(ORRA):0,1:1)
WRITE $CHAR(7)," This location has been inactivated."
KILL ORL
GOTO LOC
+5 IF Y<0
WRITE " You must select a standard location."
GOTO LOC
+6 KILL DIC,C,ORIA,ORRA
QUIT
QUIT SET OREND=1
KILL DIC,C
QUIT
READ ;;Hold screen
+1 IF $DATA(IOST)
if $EXTRACT(IOST)'="C"
QUIT
+2 WRITE !
IF $DATA(IOSL)
IF $Y<(IOSL-4)
GOTO READ
+3 WRITE !?5,"Press return to continue "
READ X:$SELECT($DATA(DTIME):DTIME,1:300)
+4 QUIT
CHKNAM(X,Y) ;Input transform to not allow certain characters
+1 ;X is the text to be checked, Y are the characters not allowed as sent in by the input transform of the field
+2 ;if no special characters sent in, set list to all
NEW I,J
IF '$DATA(Y)
SET Y=";^"
+3 FOR I=1:1:$LENGTH(Y)
IF X[($EXTRACT(Y,I))
SET J=1
+4 QUIT +$GET(J)
CHKMNE(X) ;Input transform to not allow use of standard Lmgr Mnemonics
+1 NEW Y
+2 ;check to make sure mnemonic isn't set to lower case of restricted entries. List Manager is case insensitive
SET Y=$$UP^XLFSTR(X)
+3 IF Y="ADPL"!(Y="DN")!(Y="Q")!(Y="FS")!(Y="GO")!(Y="?")!(Y="??")!(Y="LS")!(Y="+")!(Y="-")!(Y="PL")!(Y="PS")!(Y="RD")!(Y="SL")!(Y="<")!(Y=">")!(Y="UP")!(Y="PI")!(Y="CWAD")!(Y="TD")!(Y="EX")
QUIT 1
+4 QUIT 0
PAD(ORX,ORL) ; Pads string to specified length
+1 NEW ORY
+2 SET ORY=""
SET $PIECE(ORY," ",(ORL-$LENGTH(ORX))+1)=""
+3 QUIT ORY
MAIL(XMTEXT,XMSUB,XMY,SUBSCR) ;SEND AN EMAIL
+1 ;PARAMETERS: XMTEXT => STRING CONTAINING NAME OF ARRAY CONTAINING MESSAGE TEXT (REQUIRED)
+2 ; XMSUB => STRING CONTAINING THE SUBJECT OF THE MESSAGE (REQUIRED)
+3 ; XMY => REFERENCE TO AN ARRAY CONTAINING THE RECIPIENTS (OPTIONAL)
+4 ; SUBSCR => STRING CONTAINING THE SUBSCIPT WITHIN ^XTMP WHERE RECIPIENTS ARE STORED (OPTIONAL)
+5 ;RETURN: $$MAIL => STRING CONTAINING XMMG (ERROR STRING)^XMERR (NUMBER OF ERRORS)
+6 NEW XMMG,XMDUZ,XMZ,XMERR,DIFROM,ORMSG
+7 if '$DATA(XMTEXT)!($GET(XMSUB)="")
QUIT
+8 IF $DATA(XMY)=0
Begin DoDot:1
+9 IF $GET(SUBSCR)'=""
IF ($QUERY(^XTMP(SUBSCR,0))[SUBSCR)
Begin DoDot:2
+10 KILL ^XTMP(SUBSCR,0)
+11 MERGE XMY=^XTMP(SUBSCR)
+12 KILL ^XTMP(SUBSCR)
End DoDot:2
QUIT
+13 IF $DATA(ZTQUEUED)>0
Begin DoDot:2
+14 SET XMY(DUZ)=""
End DoDot:2
+15 IF '$TEST
Begin DoDot:2
+16 SET ORMSG(1)=" "
+17 SET ORMSG(2)="Select the recipient(s) of the report below."
+18 DO MAILOUT(.ORMSG)
End DoDot:2
End DoDot:1
+19 ;FORCE SENDER TO BE POSTMASTER
SET XMDUZ="POSTMASTER"
+20 ;ICR #10070
DO ^XMD
+21 KILL ORMSG
+22 IF $DATA(XMMG)>0
Begin DoDot:1
+23 SET ORMSG(1)=" "
+24 SET ORMSG(2)="Unable to email the report:"
+25 SET ORMSG(3)=XMMG
+26 DO MAILOUT(.ORMSG)
End DoDot:1
+27 QUIT $GET(XMMG)_U_$GET(XMERR)
MAILOUT(MESSAGE) ;OUTPUT THE ORMSG ARRAY FROM MAIL LINE TAG
+1 ;IF KIDS IS NOT EXECUTING, OUTPUT THE MESSAGE TO THE SCREEN
+2 IF $GET(XPDNM)=""
Begin DoDot:1
+3 NEW LINE
SET LINE=0
FOR
SET LINE=$ORDER(MESSAGE(LINE))
if +$GET(LINE)=0
QUIT
WRITE MESSAGE(LINE),!
End DoDot:1
+4 IF '$TEST
DO MES^XPDUTL(.MESSAGE)
+5 QUIT
WRAP(ORLINE,OROUTPUT,ORDINDEN,ORTRIM,OROI,ORCNT,ORIOM,ORZERO) ;WRAP THE TEXT SO
+1 ; THAT IT IS NO MORE THAN X CHARACTERS WIDE
+2 ;PARAMETERS: ORLINE =>SINGLE LINE OF TEXT TO WRAP
+3 ; OROUTPUT=>NAME OF ARRAY THAT WILL STORE THE WRAPPED TEXT IN THE FORMAT:
+4 ; OROUTPUT=NUMBER OF LINES OF TEXT RETURNED
+5 ; OROUTPUT(N)=LINE N OF TEXT
+6 ; ORDINDEN=>FOR RETURNED TEXT, DETERMINE WHETHER TO INDENT LINES 2 THROUGH LAST (1) OR NOT (0)
+7 ; DEFAULT: 1
+8 ; ORTRIM =>FOR RETURNED TEXT, STRIP TRAILING SPACES ON EACH LINE (1) OR NOT (0)
+9 ; DEFAULT: 1
+10 ; OROI =>FOR RETURNED TEXT, THE COLUMN NUMBER TO INDENT LINES 2 THROUGH LAST TO
+11 ; DEFAULT: CALCULATE COLUMN TO INDENT TO
+12 ; ORCNT =>'$D(ORCNT) - RETURN NUMBER OF LINES IN RETURN ARRAY (OROUTPUT=N)
+13 ; $D(ORCNT)=1 - RETURN NUMBER OF LINES IN ORCNT
+14 ; ORIOM =>HOW WIDE EACH LINE SHOULD BE
+15 ; +ORIOM=0 - USES EITHER VALUE IN IOM OR 80
+16 ; ORZERO =>FOR RETURNED TEXT, RETURN TEXT IN A ZERO SUBSCRIPT DESCENDENT FROM THE LINE
+17 ; NUMBER SUBSCRIPT (1) OR NOT (0)
+18 ; DEFAULT: 0
+19 NEW ORRETURN,ORTEMP,ORINDENT,ORLCNT
+20 SET ORDINDEN=+$GET(ORDINDEN,1)
SET ORTRIM=+$GET(ORTRIM,1)
SET OROI=+$GET(OROI)
SET ORZERO=+$GET(ORZERO)
+21 IF $DATA(ORCNT)
SET ORLCNT=ORCNT
+22 IF $GET(@OROUTPUT)>0
SET ORLCNT=@OROUTPUT
+23 SET ORIOM=+$SELECT($GET(ORIOM)>0:ORIOM,$GET(IOM)>0:IOM,1:80)
+24 IF ORDINDEN
IF 'OROI
Begin DoDot:1
+25 NEW ORCHR
+26 IF ORLINE[":"
IF ($LENGTH($PIECE(ORLINE,":"))<ORIOM)
SET ORINDENT=$$REPEAT^XLFSTR(" ",$LENGTH($PIECE(ORLINE,":"))+2)
+27 IF ORLINE'[":"
IF ($EXTRACT(ORLINE,1)=" ")
Begin DoDot:2
+28 FOR ORCHR=1:1:$LENGTH(ORLINE)
if $EXTRACT(ORLINE,ORCHR)'=" "
QUIT
+29 SET ORINDENT=$$REPEAT^XLFSTR(" ",ORCHR-1)
End DoDot:2
+30 IF ORLINE'[":"
IF ($EXTRACT(ORLINE,1)'=" ")
Begin DoDot:2
+31 NEW START,END
+32 FOR ORCHR=1:1:$LENGTH(ORLINE)
if +$GET(END)
QUIT
Begin DoDot:3
+33 IF '+$GET(START)
IF ($EXTRACT(ORLINE,ORCHR)=" ")
IF ($EXTRACT(ORLINE,ORCHR+1)=" ")
SET START=1
+34 IF +$GET(START)
IF ($EXTRACT(ORLINE,ORCHR)'=" ")
SET END=1
End DoDot:3
+35 if +$GET(START)>0
SET ORINDENT=$$REPEAT^XLFSTR(" ",ORCHR-2)
End DoDot:2
End DoDot:1
+36 IF ORDINDEN
IF OROI>0
SET ORINDENT=$$REPEAT^XLFSTR(" ",OROI)
+37 SET ORTEMP=1
SET ORTEMP(ORTEMP)=ORLINE
+38 FOR
if $LENGTH(ORTEMP(ORTEMP))<(ORIOM+1)
QUIT
Begin DoDot:1
+39 NEW ORTEMP1,ORCHR
+40 FOR ORCHR=ORIOM:-1:1
if $EXTRACT(ORTEMP(ORTEMP),ORCHR)=" "
QUIT
+41 if ORCHR=1
SET ORCHR=ORIOM
+42 IF ORDINDEN
IF ORCHR=$LENGTH($GET(ORINDENT))
SET ORCHR=ORIOM
+43 SET ORTEMP1=ORTEMP(ORTEMP)
+44 SET ORTEMP(ORTEMP)=$EXTRACT(ORTEMP1,1,ORCHR)
+45 if ORTRIM
SET ORTEMP(ORTEMP)=$$TRIM^XLFSTR(ORTEMP(ORTEMP),"R")
+46 SET ORTEMP=ORTEMP+1
+47 SET ORTEMP(ORTEMP)=$GET(ORINDENT)_$EXTRACT(ORTEMP1,ORCHR+1,*)
End DoDot:1
+48 SET ORTEMP=0
FOR
SET ORTEMP=$ORDER(ORTEMP(ORTEMP))
if +ORTEMP=0
QUIT
Begin DoDot:1
+49 SET ORLCNT=1+$GET(ORLCNT)
+50 IF ORZERO
SET @OROUTPUT@(ORLCNT,0)=ORTEMP(ORTEMP)
+51 IF 'ORZERO
SET @OROUTPUT@(ORLCNT)=ORTEMP(ORTEMP)
End DoDot:1
+52 IF '$DATA(ORCNT)
SET @OROUTPUT=ORLCNT
+53 IF '$TEST
SET ORCNT=ORLCNT
+54 QUIT
DEVICE(ZTRTN,ZTDESC,%ZIS,ZTSAVE) ;PROMPT THE USER FOR THE OUTPUT DEVICE
+1 ;PARAMETERS: ZTRTN => LINE TAG THAT STARTS PRINTING THE REPORT
+2 ; ZTDESC => TASKMAN TASK DESCRIPTION
+3 ; %ZIS => FLAGS TO PASS TO ^%ZIS
+4 ; ZTSAVE => VARIABLES TO SAVE FOR TASKMAN
+5 NEW POP,CBUFFER
+6 SET %ZIS("B")=""
SET CBUFFER=0
+7 DO ^%ZIS
+8 if +$GET(POP)
QUIT
+9 IF $DATA(IO("Q"))
Begin DoDot:1
+10 NEW ZTSK,ORTEXT
+11 SET ORTEXT=$PIECE(ZTDESC,"OR ",2)
+12 SET ZTSAVE("CBUFFER")=""
+13 DO ^%ZTLOAD
DO HOME^%ZIS
+14 KILL IO("Q")
+15 IF +$GET(ZTSK)>0
WRITE !,"Successfully queued the "_ORTEXT_" report.",!,"Task Number: "_ZTSK,!
HANG 2
End DoDot:1
QUIT
+16 IF '$DATA(IO("Q"))
Begin DoDot:1
+17 USE IO
+18 IF $EXTRACT(IOST,1,2)="C-"
WRITE @IOF
SET CBUFFER=3
+19 DO @ZTRTN
DO ^%ZISC
End DoDot:1
+20 QUIT
+1 ;PARAMETERS: TITLE => THE TITLE OF THE REPORT
+2 ; PAGE => (REFERENCE) PAGE NUMBER
+3 ; HEADER => (REFERENCE) COLUMN NAMES, FORMATTED AS:
+4 ; COLUMN(LINE_NUMBER)=TEXT
+5 ; NOTE: LINE_NUMBER STARTS AT ONE
+6 ; NEWRPT => (OPTIONAL) ALLOWS PRINTING OF MULTIPLE REPORTS
+7 ; ONE AFTER THE OTHER
+8 ; UNDEFINED: NOT PRINTING MULTIPLE REPORTS
+9 ; 0 (DEFAULT): THIS IS NOT THE START OF A
+10 ; NEW REPORT
+11 ; 1: THIS IS THE START OF A NEW REPORT
+12 ;RETURNS: 0 => USER WANTS TO CONTINUE PRINTING
+13 ; 1 => USER DOES NOT WANT TO CONTINUE PRINTING
+14 if $$STOPTASK
QUIT 1
+15 NEW X,END
+16 SET PAGE=1+$GET(PAGE)
+17 IF PAGE>1!(+$GET(NEWRPT))
Begin DoDot:1
+18 IF $EXTRACT(IOST,1,2)="C-"
WRITE !,"Press RETURN to continue or '^' to exit: "
READ X:DTIME
SET END='$TEST!(X=U)
if $GET(END)
QUIT
+19 IF $Y>0
IF $Y<=IOSL
WRITE @IOF
+20 IF $Y>IOSL
SET $Y=0
End DoDot:1
if $GET(END)
QUIT 1
+21 IF PAGE=1
IF ($EXTRACT(IOST,1,2)="C-")
IF ('+$GET(NEWRPT))
WRITE @IOF
+22 NEW NOW,INDEX
+23 SET NOW=$$UP^XLFSTR($$HTE^XLFDT($HOROLOG))
SET NOW=$PIECE(NOW,"@",1)_" "_$PIECE($PIECE(NOW,"@",2),":",1,2)
+24 WRITE $$LJ^XLFSTR($EXTRACT(TITLE,1,46),47," ")_NOW_" PAGE "_PAGE,!
+25 SET INDEX=0
FOR
SET INDEX=$ORDER(HEADER(INDEX))
if 'INDEX
QUIT
WRITE HEADER(INDEX),!
+26 WRITE $$REPEAT^XLFSTR("-",(IOM-1)),!
+27 QUIT 0
STOPTASK() ;DETERMINE IF TASKMAN HAS ASKED PROCESS TO STOP
+1 ;RETURNS: 0 => TASKMAN HAS NOT ASKED TASK TO STOP
+2 ; 1 => TASKMAN HAS ASKED TASK TO STOP
+3 IF $DATA(ZTQUEUED)
IF ($$S^%ZTLOAD)
Begin DoDot:1
+4 SET ZTSTOP=$$S^%ZTLOAD("Received stop request")
SET ZTSTOP=1
End DoDot:1
if $GET(ZTSTOP)=1
QUIT 1
+5 QUIT 0
FMERROR(ERROR) ;OUTPUT FILEMAN ERROR
+1 ;PARAMETERS: ERROR => (REFERENCE) ARRAY CONTAINING THE FILEMAN ERROR
+2 NEW OUT
+3 WRITE !!,"Unable to generate the report due to the following FileMan error:",!
+4 WRITE "FILEMAN ERROR #"_ERROR("DIERR",1)_":",!
+5 NEW IDX
SET IDX=""
FOR
SET IDX=$ORDER(ERROR("DIERR",1,"TEXT",IDX))
if 'IDX
QUIT
DO WRAP(ERROR("DIERR",1,"TEXT",IDX),"OUT")
+6 SET IDX=0
FOR
SET IDX=$ORDER(OUT(IDX))
if +$GET(IDX)=0
QUIT
WRITE OUT(IDX),!
+7 QUIT
DIVPRMPT(DIV) ;PROMPT THE USER FOR WHICH ACTIVE DIVISION(S)
+1 ;PARAMETERS: DIV => REFERENCE TO ARRAY WHICH WILL CONTAIN THE SELECTED DIVISION(S) WHEN THIS FINISHES
+2 ; FORMAT: DIV(FILE #4 IEN)=INSTITUTION NAME
+3 ; IF THE USER SELECTS ALL DIVISIONS, THEN ONLY THE FOLLOWING IS RETURNED:
+4 ; DIV("ALL")="all divisions"
+5 ;RETURNS: -1 USER ENTERED CARET AT PROMPT IF SITE IS MULTIDIVISIONAL
+6 ; 0 INSTITUTION FILE POINTER IS MISSING FOR ALL SELECTED DIVISIONS
+7 ; 1 SUCCESSFUL SELECTION OF DIVISION(S)
+8 NEW SELDIV,BADDIV,TIUDI,IDX,DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT,COUNT,DELIMIT
+9 FOR
Begin DoDot:1
+10 DO SELDIV^TIULA
+11 SET IDX=0
FOR
SET IDX=$ORDER(TIUDI(IDX))
if +$GET(IDX)=0
QUIT
Begin DoDot:2
+12 SET DIV(TIUDI(IDX))=$PIECE($$SITE^VASITE(,IDX),U,2)
SET COUNT=1+$GET(COUNT)
End DoDot:2
+13 IF SELDIV=1
IF ('$DATA(DIV))
SET DIV("ALL")="all divisions"
+14 IF $DATA(BADDIV)
Begin DoDot:2
+15 NEW TEXT,OUTPUT
+16 SET DELIMIT=", "
+17 FOR IDX=1:1:$LENGTH(BADDIV,",")
Begin DoDot:3
+18 if IDX=$LENGTH(BADDIV,",")
SET DELIMIT=" and "
+19 SET TEXT=$SELECT($GET(TEXT)'="":TEXT_DELIMIT,1:"")_$PIECE(BADDIV,",",IDX)
End DoDot:3
+20 SET BADDIV="I'm sorry, but "_TEXT_" "_$SELECT($LENGTH(BADDIV,",")=1:"is not a valid division.",$LENGTH(BADDIV,",")>1:"are not valid divisions.",1:"you selected an invalid division.")
+21 DO WRAP^ORUTL(BADDIV,"OUTPUT")
+22 WRITE !!
+23 FOR IDX=1:1:OUTPUT
WRITE OUTPUT(IDX),!
+24 IF $DATA(DIV)
Begin DoDot:3
+25 SET DIR(0)="Y"_U
SET DIR("A")="Do you want to continue with the valid division"_$SELECT(COUNT>1:"s",1:"")_" already selected"
+26 SET DIR("B")="YES"
+27 DO ^DIR
+28 if $DATA(DIRUT)
QUIT
+29 if Y
SET SELDIV=1
End DoDot:3
End DoDot:2
End DoDot:1
if +$GET(SELDIV)=1!(+$GET(SELDIV)=-1)
QUIT
+30 QUIT SELDIV
HASDIV(Y,DIV,RET) ;DETERMINE IF THE SPECIFIED USER BELONGS TO A SET OF DIVISIONS RETURNED BY DIVPRMPT^ORUTL
+1 ;PARAMETERS: Y => IEN IN THE NEW PERSON FILE (#200)
+2 ; DIV => REFERENCE TO ARRAY CONTAINING SELECTED DIVISIONS
+3 ; FORMAT: DIV(FILE_#4_IEN)=INSTITUTION NAME
+4 ; DIV("FOUND",FILE_#4_IEN)=INSTITUTION NAME <-- FOR DISCOVERED DIVISIONS
+5 ; RET => 1 TO RETURN DISCOVERED DIVISIONS IN DIV ARRAY, WHEN "ALL DIVISIONS" ARE SELECTED
+6 ; 0 TO NOT RETURN DISCOVERED DIVISIONS (DEFAULT)
+7 ;RETURNS: NAME OF Y'S DIVISION
+8 ; EMPTY STRING IF Y'S DIVISION IS NOT A SELECTED DIVISION
+9 NEW DIVISION
SET DIVISION=""
+10 SET RET=+$GET(RET)
+11 IF $DATA(DIV)
Begin DoDot:1
+12 NEW DIVISIONS,IDX,HASDIV
+13 ;IA #2533
+14 SET HASDIV=$$DIV4^XUSER(.DIVISIONS,Y)
+15 IF HASDIV=0
Begin DoDot:2
+16 NEW IEN
+17 SET IEN=$PIECE($$SITE^VASITE(),U)
+18 if +IEN=0
SET IEN=DUZ(2)
+19 SET DIVISIONS(IEN)=1
End DoDot:2
+20 IF $GET(DIV("ALL"))="all divisions"
Begin DoDot:2
+21 NEW IEN
+22 SET IEN=0
FOR
SET IEN=$ORDER(DIVISIONS(IEN))
if '+IEN
QUIT
Begin DoDot:3
+23 IF DIVISIONS(IEN)
Begin DoDot:4
+24 SET DIVISION=$$GET1^DIQ(4,IEN_",",.01)
+25 if RET
SET DIV("FOUND",IEN)=DIVISION
End DoDot:4
End DoDot:3
+26 IF DIVISION=""
Begin DoDot:3
+27 SET IEN=$ORDER(DIVISIONS(0))
SET DIVISION=$$GET1^DIQ(4,IEN_",",.01)
+28 if RET
SET DIV("FOUND",IEN)=DIVISION
End DoDot:3
End DoDot:2
QUIT
+29 SET IDX=0
FOR
SET IDX=$ORDER(DIVISIONS(IDX))
if +$GET(IDX)=0
QUIT
Begin DoDot:2
+30 IF $DATA(DIV(IDX))
Begin DoDot:3
+31 IF DIVISION'=""
IF (DIVISIONS(IDX)=1)
SET DIVISION=DIV(IDX)
+32 IF DIVISION=""
SET DIVISION=DIV(IDX)
End DoDot:3
End DoDot:2
End DoDot:1
+33 QUIT DIVISION
LHASDIV(LOC,DIV,RET) ;DETERMINE IF THE SPECIFIED LOCATION BELONGS TO A SET OF DIVISIONS RETURNED BY DIVPRMPT^ORUTL
+1 ;PARAMETERS: LOC => VARIABLE POINTER TO HOSPITAL LOCATION FILE (#44)
+2 ; DIV => REFERENCE TO ARRAY CONTAINING SELECTED DIVISIONS
+3 ; FORMAT: DIV(FILE_#4_IEN)=INSTITUTION NAME
+4 ; DIV("FOUND",FILE_#4_IEN)=INSTITUTION NAME <-- FOR DISCOVERED DIVISIONS
+5 ; RET => 1 TO RETURN DISCOVERED DIVISIONS IN DIV ARRAY, WHEN "ALL DIVISIONS" ARE SELECTED
+6 ; 0 TO NOT RETURN DISCOVERED DIVISIONS (DEFAULT)
+7 ;RETURNS: NAME OF LOC'S DIVISION
+8 ; EMPTY STRING IF LOC'S DIVISION IS NOT A SELECTED DIVISION
+9 NEW DIVISION,LOCDIV
+10 SET DIVISION=""
SET LOCDIV=0
SET LOC=$GET(LOC)
SET RET=+$GET(RET)
+11 IF $DATA(DIV)
Begin DoDot:1
+12 IF LOC>0
Begin DoDot:2
+13 NEW GLOREF,HLIEN
+14 SET GLOREF=U_$$UP^XLFSTR($PIECE(LOC,";",2))_+LOC_",0)"
+15 IF GLOREF'?1"^SC("1.N1",0)"
QUIT
+16 ;IA #10040
+17 SET LOCDIV=$PIECE($GET(@GLOREF),U,15)
+18 IF +LOCDIV
Begin DoDot:3
+19 NEW ORFND
+20 ;IA #2817
+21 SET ORFND=0
SET HLIEN=0
FOR
SET HLIEN=$ORDER(^DG(40.8,"AD",HLIEN))
if HLIEN=""
QUIT
Begin DoDot:4
+22 IF $DATA(^DG(40.8,"AD",HLIEN,LOCDIV))
Begin DoDot:5
+23 SET ORFND=1
+24 IF '$DATA(DIV("ALL"))
IF $DATA(DIV(HLIEN))
SET DIVISION=DIV(HLIEN)
+25 IF $DATA(DIV("ALL"))
Begin DoDot:6
+26 SET DIVISION=$$GET1^DIQ(4,HLIEN_",",.01)
+27 if RET
SET DIV("FOUND",HLIEN)=DIVISION
End DoDot:6
End DoDot:5
End DoDot:4
+28 IF DIVISION=""
IF 'ORFND
SET LOCDIV=0
End DoDot:3
End DoDot:2
+29 IF 'LOC!('LOCDIV)
Begin DoDot:2
+30 NEW IEN
+31 SET IEN=+$PIECE($$SITE^VASITE(),U)
+32 if 'IEN
SET IEN=+DUZ(2)
+33 if 'IEN
QUIT
+34 IF $GET(DIV("ALL"))="all divisions"
Begin DoDot:3
+35 SET DIVISION=$$GET1^DIQ(4,IEN_",",.01)
+36 if RET
SET DIV("FOUND",IEN)=DIVISION
End DoDot:3
+37 IF '$DATA(DIV("ALL"))
IF ($DATA(DIV(IEN)))
SET DIVISION=DIV(IEN)
End DoDot:2
End DoDot:1
+38 QUIT DIVISION