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

ORUTL.m

Go to the documentation of this file.
  1. 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
  1. ISCLORD(ORY,ORIFN) ;;RPC to test if an order is a clinic order
  1. S ORIFN=+ORIFN
  1. S ORY=0
  1. I 'ORIFN Q
  1. N ORZ0 S ORZ0=$G(^OR(100,ORIFN,0))
  1. N ORTO S ORTO=$P(ORZ0,U,11)
  1. I ORTO=$$CLINMDDG S ORY=1
  1. I ORTO=$$CLINIVDG S ORY=1
  1. Q
  1. CLINMDDG() ;RETURN THE IEN OF THE CLINIC MEDICATIONS DISPLAY GROUP
  1. Q $O(^ORD(100.98,"B","CLINIC MEDICATIONS",0))
  1. CLINIVDG() ;RETURN THE IEN OF THE CLINIC INFUSIONS DISPLAY GROUP
  1. Q $O(^ORD(100.98,"B","CLINIC INFUSIONS",0))
  1. LOC ;;GET PT. LOCATION
  1. 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:"")
  1. I 'OR4,ORVP[";DPT(",$D(ORL(2)),ORL(2) Q
  1. 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: ",!
  1. 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
  1. . 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
  1. . 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
  1. W !
  1. 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
  1. 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")
  1. 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))
  1. K ORIA,ORRA I $D(^SC(+Y,"I")) S ORIA=+^("I"),ORRA=$P(^("I"),U,2)
  1. 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
  1. I Y<0 W " You must select a standard location." G LOC
  1. K DIC,C,ORIA,ORRA Q
  1. QUIT S OREND=1 K DIC,C Q
  1. READ ;;Hold screen
  1. I $D(IOST) Q:$E(IOST)'="C"
  1. W ! I $D(IOSL),$Y<(IOSL-4) G READ
  1. W !?5,"Press return to continue " R X:$S($D(DTIME):DTIME,1:300)
  1. Q
  1. 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
  1. N I,J I '$D(Y) S Y=";^" ;if no special characters sent in, set list to all
  1. F I=1:1:$L(Y) I X[($E(Y,I)) S J=1
  1. Q +$G(J)
  1. CHKMNE(X) ;Input transform to not allow use of standard Lmgr Mnemonics
  1. N Y
  1. S Y=$$UP^XLFSTR(X) ;check to make sure mnemonic isn't set to lower case of restricted entries. List Manager is case insensitive
  1. 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
  1. Q 0
  1. PAD(ORX,ORL) ; Pads string to specified length
  1. N ORY
  1. S ORY="",$P(ORY," ",(ORL-$L(ORX))+1)=""
  1. Q ORY
  1. MAIL(XMTEXT,XMSUB,XMY,SUBSCR) ;SEND AN EMAIL
  1. ;PARAMETERS: XMTEXT => STRING CONTAINING NAME OF ARRAY CONTAINING MESSAGE TEXT (REQUIRED)
  1. ; XMSUB => STRING CONTAINING THE SUBJECT OF THE MESSAGE (REQUIRED)
  1. ; XMY => REFERENCE TO AN ARRAY CONTAINING THE RECIPIENTS (OPTIONAL)
  1. ; SUBSCR => STRING CONTAINING THE SUBSCIPT WITHIN ^XTMP WHERE RECIPIENTS ARE STORED (OPTIONAL)
  1. ;RETURN: $$MAIL => STRING CONTAINING XMMG (ERROR STRING)^XMERR (NUMBER OF ERRORS)
  1. N XMMG,XMDUZ,XMZ,XMERR,DIFROM,ORMSG
  1. Q:'$D(XMTEXT)!($G(XMSUB)="")
  1. I $D(XMY)=0 D
  1. .I $G(SUBSCR)'="",($Q(^XTMP(SUBSCR,0))[SUBSCR) D Q
  1. ..K ^XTMP(SUBSCR,0)
  1. ..M XMY=^XTMP(SUBSCR)
  1. ..K ^XTMP(SUBSCR)
  1. .I $D(ZTQUEUED)>0 D
  1. ..S XMY(DUZ)=""
  1. .E D
  1. ..S ORMSG(1)=" "
  1. ..S ORMSG(2)="Select the recipient(s) of the report below."
  1. ..D MAILOUT(.ORMSG)
  1. S XMDUZ="POSTMASTER" ;FORCE SENDER TO BE POSTMASTER
  1. D ^XMD ;ICR #10070
  1. K ORMSG
  1. I $D(XMMG)>0 D
  1. .S ORMSG(1)=" "
  1. .S ORMSG(2)="Unable to email the report:"
  1. .S ORMSG(3)=XMMG
  1. .D MAILOUT(.ORMSG)
  1. Q $G(XMMG)_U_$G(XMERR)
  1. MAILOUT(MESSAGE) ;OUTPUT THE ORMSG ARRAY FROM MAIL LINE TAG
  1. ;IF KIDS IS NOT EXECUTING, OUTPUT THE MESSAGE TO THE SCREEN
  1. I $G(XPDNM)="" D
  1. .N LINE S LINE=0 F S LINE=$O(MESSAGE(LINE)) Q:+$G(LINE)=0 W MESSAGE(LINE),!
  1. E D MES^XPDUTL(.MESSAGE)
  1. Q
  1. WRAP(ORLINE,OROUTPUT,ORDINDEN,ORTRIM,OROI,ORCNT,ORIOM,ORZERO) ;WRAP THE TEXT SO
  1. ; THAT IT IS NO MORE THAN X CHARACTERS WIDE
  1. ;PARAMETERS: ORLINE =>SINGLE LINE OF TEXT TO WRAP
  1. ; OROUTPUT=>NAME OF ARRAY THAT WILL STORE THE WRAPPED TEXT IN THE FORMAT:
  1. ; OROUTPUT=NUMBER OF LINES OF TEXT RETURNED
  1. ; OROUTPUT(N)=LINE N OF TEXT
  1. ; ORDINDEN=>FOR RETURNED TEXT, DETERMINE WHETHER TO INDENT LINES 2 THROUGH LAST (1) OR NOT (0)
  1. ; DEFAULT: 1
  1. ; ORTRIM =>FOR RETURNED TEXT, STRIP TRAILING SPACES ON EACH LINE (1) OR NOT (0)
  1. ; DEFAULT: 1
  1. ; OROI =>FOR RETURNED TEXT, THE COLUMN NUMBER TO INDENT LINES 2 THROUGH LAST TO
  1. ; DEFAULT: CALCULATE COLUMN TO INDENT TO
  1. ; ORCNT =>'$D(ORCNT) - RETURN NUMBER OF LINES IN RETURN ARRAY (OROUTPUT=N)
  1. ; $D(ORCNT)=1 - RETURN NUMBER OF LINES IN ORCNT
  1. ; ORIOM =>HOW WIDE EACH LINE SHOULD BE
  1. ; +ORIOM=0 - USES EITHER VALUE IN IOM OR 80
  1. ; ORZERO =>FOR RETURNED TEXT, RETURN TEXT IN A ZERO SUBSCRIPT DESCENDENT FROM THE LINE
  1. ; NUMBER SUBSCRIPT (1) OR NOT (0)
  1. ; DEFAULT: 0
  1. N ORRETURN,ORTEMP,ORINDENT,ORLCNT
  1. S ORDINDEN=+$G(ORDINDEN,1),ORTRIM=+$G(ORTRIM,1),OROI=+$G(OROI),ORZERO=+$G(ORZERO)
  1. I $D(ORCNT) S ORLCNT=ORCNT
  1. I $G(@OROUTPUT)>0 S ORLCNT=@OROUTPUT
  1. S ORIOM=+$S($G(ORIOM)>0:ORIOM,$G(IOM)>0:IOM,1:80)
  1. I ORDINDEN,'OROI D
  1. .N ORCHR
  1. .I ORLINE[":",($L($P(ORLINE,":"))<ORIOM) S ORINDENT=$$REPEAT^XLFSTR(" ",$L($P(ORLINE,":"))+2)
  1. .I ORLINE'[":",($E(ORLINE,1)=" ") D
  1. ..F ORCHR=1:1:$L(ORLINE) Q:$E(ORLINE,ORCHR)'=" "
  1. ..S ORINDENT=$$REPEAT^XLFSTR(" ",ORCHR-1)
  1. .I ORLINE'[":",($E(ORLINE,1)'=" ") D
  1. ..N START,END
  1. ..F ORCHR=1:1:$L(ORLINE) Q:+$G(END) D
  1. ...I '+$G(START),($E(ORLINE,ORCHR)=" "),($E(ORLINE,ORCHR+1)=" ") S START=1
  1. ...I +$G(START),($E(ORLINE,ORCHR)'=" ") S END=1
  1. ..S:+$G(START)>0 ORINDENT=$$REPEAT^XLFSTR(" ",ORCHR-2)
  1. I ORDINDEN,OROI>0 S ORINDENT=$$REPEAT^XLFSTR(" ",OROI)
  1. S ORTEMP=1,ORTEMP(ORTEMP)=ORLINE
  1. F Q:$L(ORTEMP(ORTEMP))<(ORIOM+1) D
  1. .N ORTEMP1,ORCHR
  1. .F ORCHR=ORIOM:-1:1 Q:$E(ORTEMP(ORTEMP),ORCHR)=" "
  1. .S:ORCHR=1 ORCHR=ORIOM
  1. .I ORDINDEN,ORCHR=$L($G(ORINDENT)) S ORCHR=ORIOM
  1. .S ORTEMP1=ORTEMP(ORTEMP)
  1. .S ORTEMP(ORTEMP)=$E(ORTEMP1,1,ORCHR)
  1. .S:ORTRIM ORTEMP(ORTEMP)=$$TRIM^XLFSTR(ORTEMP(ORTEMP),"R")
  1. .S ORTEMP=ORTEMP+1
  1. .S ORTEMP(ORTEMP)=$G(ORINDENT)_$E(ORTEMP1,ORCHR+1,*)
  1. S ORTEMP=0 F S ORTEMP=$O(ORTEMP(ORTEMP)) Q:+ORTEMP=0 D
  1. .S ORLCNT=1+$G(ORLCNT)
  1. .I ORZERO S @OROUTPUT@(ORLCNT,0)=ORTEMP(ORTEMP)
  1. .I 'ORZERO S @OROUTPUT@(ORLCNT)=ORTEMP(ORTEMP)
  1. I '$D(ORCNT) S @OROUTPUT=ORLCNT
  1. E S ORCNT=ORLCNT
  1. Q
  1. DEVICE(ZTRTN,ZTDESC,%ZIS,ZTSAVE) ;PROMPT THE USER FOR THE OUTPUT DEVICE
  1. ;PARAMETERS: ZTRTN => LINE TAG THAT STARTS PRINTING THE REPORT
  1. ; ZTDESC => TASKMAN TASK DESCRIPTION
  1. ; %ZIS => FLAGS TO PASS TO ^%ZIS
  1. ; ZTSAVE => VARIABLES TO SAVE FOR TASKMAN
  1. N POP,CBUFFER
  1. S %ZIS("B")="",CBUFFER=0
  1. D ^%ZIS
  1. Q:+$G(POP)
  1. I $D(IO("Q")) D Q
  1. .N ZTSK,ORTEXT
  1. .S ORTEXT=$P(ZTDESC,"OR ",2)
  1. .S ZTSAVE("CBUFFER")=""
  1. .D ^%ZTLOAD,HOME^%ZIS
  1. .K IO("Q")
  1. .I +$G(ZTSK)>0 W !,"Successfully queued the "_ORTEXT_" report.",!,"Task Number: "_ZTSK,! H 2
  1. I '$D(IO("Q")) D
  1. .U IO
  1. .I $E(IOST,1,2)="C-" W @IOF S CBUFFER=3
  1. .D @ZTRTN,^%ZISC
  1. Q
  1. ;PARAMETERS: TITLE => THE TITLE OF THE REPORT
  1. ; PAGE => (REFERENCE) PAGE NUMBER
  1. ; HEADER => (REFERENCE) COLUMN NAMES, FORMATTED AS:
  1. ; COLUMN(LINE_NUMBER)=TEXT
  1. ; NOTE: LINE_NUMBER STARTS AT ONE
  1. ; NEWRPT => (OPTIONAL) ALLOWS PRINTING OF MULTIPLE REPORTS
  1. ; ONE AFTER THE OTHER
  1. ; UNDEFINED: NOT PRINTING MULTIPLE REPORTS
  1. ; 0 (DEFAULT): THIS IS NOT THE START OF A
  1. ; NEW REPORT
  1. ; 1: THIS IS THE START OF A NEW REPORT
  1. ;RETURNS: 0 => USER WANTS TO CONTINUE PRINTING
  1. ; 1 => USER DOES NOT WANT TO CONTINUE PRINTING
  1. Q:$$STOPTASK 1
  1. N X,END
  1. S PAGE=1+$G(PAGE)
  1. I PAGE>1!(+$G(NEWRPT)) D Q:$G(END) 1
  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)
  1. .I $Y>0,$Y<=IOSL W @IOF
  1. .I $Y>IOSL S $Y=0
  1. I PAGE=1,($E(IOST,1,2)="C-"),('+$G(NEWRPT)) W @IOF
  1. N NOW,INDEX
  1. S NOW=$$UP^XLFSTR($$HTE^XLFDT($H)),NOW=$P(NOW,"@",1)_" "_$P($P(NOW,"@",2),":",1,2)
  1. W $$LJ^XLFSTR($E(TITLE,1,46),47," ")_NOW_" PAGE "_PAGE,!
  1. S INDEX=0 F S INDEX=$O(HEADER(INDEX)) Q:'INDEX W HEADER(INDEX),!
  1. W $$REPEAT^XLFSTR("-",(IOM-1)),!
  1. Q 0
  1. STOPTASK() ;DETERMINE IF TASKMAN HAS ASKED PROCESS TO STOP
  1. ;RETURNS: 0 => TASKMAN HAS NOT ASKED TASK TO STOP
  1. ; 1 => TASKMAN HAS ASKED TASK TO STOP
  1. I $D(ZTQUEUED),($$S^%ZTLOAD) D Q:$G(ZTSTOP)=1 1
  1. .S ZTSTOP=$$S^%ZTLOAD("Received stop request"),ZTSTOP=1
  1. Q 0
  1. FMERROR(ERROR) ;OUTPUT FILEMAN ERROR
  1. ;PARAMETERS: ERROR => (REFERENCE) ARRAY CONTAINING THE FILEMAN ERROR
  1. N OUT
  1. W !!,"Unable to generate the report due to the following FileMan error:",!
  1. W "FILEMAN ERROR #"_ERROR("DIERR",1)_":",!
  1. N IDX S IDX="" F S IDX=$O(ERROR("DIERR",1,"TEXT",IDX)) Q:'IDX D WRAP(ERROR("DIERR",1,"TEXT",IDX),"OUT")
  1. S IDX=0 F S IDX=$O(OUT(IDX)) Q:+$G(IDX)=0 W OUT(IDX),!
  1. Q
  1. 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
  1. ; FORMAT: DIV(FILE #4 IEN)=INSTITUTION NAME
  1. ; IF THE USER SELECTS ALL DIVISIONS, THEN ONLY THE FOLLOWING IS RETURNED:
  1. ; DIV("ALL")="all divisions"
  1. ;RETURNS: -1 USER ENTERED CARET AT PROMPT IF SITE IS MULTIDIVISIONAL
  1. ; 0 INSTITUTION FILE POINTER IS MISSING FOR ALL SELECTED DIVISIONS
  1. ; 1 SUCCESSFUL SELECTION OF DIVISION(S)
  1. N SELDIV,BADDIV,TIUDI,IDX,DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT,COUNT,DELIMIT
  1. F D Q:+$G(SELDIV)=1!(+$G(SELDIV)=-1)
  1. .D SELDIV^TIULA
  1. .S IDX=0 F S IDX=$O(TIUDI(IDX)) Q:+$G(IDX)=0 D
  1. ..S DIV(TIUDI(IDX))=$P($$SITE^VASITE(,IDX),U,2),COUNT=1+$G(COUNT)
  1. .I SELDIV=1,('$D(DIV)) S DIV("ALL")="all divisions"
  1. .I $D(BADDIV) D
  1. ..N TEXT,OUTPUT
  1. ..S DELIMIT=", "
  1. ..F IDX=1:1:$L(BADDIV,",") D
  1. ...S:IDX=$L(BADDIV,",") DELIMIT=" and "
  1. ...S TEXT=$S($G(TEXT)'="":TEXT_DELIMIT,1:"")_$P(BADDIV,",",IDX)
  1. ..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.")
  1. ..D WRAP^ORUTL(BADDIV,"OUTPUT")
  1. ..W !!
  1. ..F IDX=1:1:OUTPUT W OUTPUT(IDX),!
  1. ..I $D(DIV) D
  1. ...S DIR(0)="Y"_U,DIR("A")="Do you want to continue with the valid division"_$S(COUNT>1:"s",1:"")_" already selected"
  1. ...S DIR("B")="YES"
  1. ...D ^DIR
  1. ...Q:$D(DIRUT)
  1. ...S:Y SELDIV=1
  1. Q SELDIV
  1. 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)
  1. ; DIV => REFERENCE TO ARRAY CONTAINING SELECTED DIVISIONS
  1. ; FORMAT: DIV(FILE_#4_IEN)=INSTITUTION NAME
  1. ; DIV("FOUND",FILE_#4_IEN)=INSTITUTION NAME <-- FOR DISCOVERED DIVISIONS
  1. ; RET => 1 TO RETURN DISCOVERED DIVISIONS IN DIV ARRAY, WHEN "ALL DIVISIONS" ARE SELECTED
  1. ; 0 TO NOT RETURN DISCOVERED DIVISIONS (DEFAULT)
  1. ;RETURNS: NAME OF Y'S DIVISION
  1. ; EMPTY STRING IF Y'S DIVISION IS NOT A SELECTED DIVISION
  1. N DIVISION S DIVISION=""
  1. S RET=+$G(RET)
  1. I $D(DIV) D
  1. .N DIVISIONS,IDX,HASDIV
  1. .;IA #2533
  1. .S HASDIV=$$DIV4^XUSER(.DIVISIONS,Y)
  1. .I HASDIV=0 D
  1. ..N IEN
  1. ..S IEN=$P($$SITE^VASITE(),U)
  1. ..S:+IEN=0 IEN=DUZ(2)
  1. ..S DIVISIONS(IEN)=1
  1. .I $G(DIV("ALL"))="all divisions" D Q
  1. ..N IEN
  1. ..S IEN=0 F S IEN=$O(DIVISIONS(IEN)) Q:'+IEN D
  1. ...I DIVISIONS(IEN) D
  1. ....S DIVISION=$$GET1^DIQ(4,IEN_",",.01)
  1. ....S:RET DIV("FOUND",IEN)=DIVISION
  1. ..I DIVISION="" D
  1. ...S IEN=$O(DIVISIONS(0)),DIVISION=$$GET1^DIQ(4,IEN_",",.01)
  1. ...S:RET DIV("FOUND",IEN)=DIVISION
  1. .S IDX=0 F S IDX=$O(DIVISIONS(IDX)) Q:+$G(IDX)=0 D
  1. ..I $D(DIV(IDX)) D
  1. ...I DIVISION'="",(DIVISIONS(IDX)=1) S DIVISION=DIV(IDX)
  1. ...I DIVISION="" S DIVISION=DIV(IDX)
  1. Q DIVISION
  1. 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)
  1. ; DIV => REFERENCE TO ARRAY CONTAINING SELECTED DIVISIONS
  1. ; FORMAT: DIV(FILE_#4_IEN)=INSTITUTION NAME
  1. ; DIV("FOUND",FILE_#4_IEN)=INSTITUTION NAME <-- FOR DISCOVERED DIVISIONS
  1. ; RET => 1 TO RETURN DISCOVERED DIVISIONS IN DIV ARRAY, WHEN "ALL DIVISIONS" ARE SELECTED
  1. ; 0 TO NOT RETURN DISCOVERED DIVISIONS (DEFAULT)
  1. ;RETURNS: NAME OF LOC'S DIVISION
  1. ; EMPTY STRING IF LOC'S DIVISION IS NOT A SELECTED DIVISION
  1. N DIVISION,LOCDIV
  1. S DIVISION="",LOCDIV=0,LOC=$G(LOC),RET=+$G(RET)
  1. I $D(DIV) D
  1. .I LOC>0 D
  1. ..N GLOREF,HLIEN
  1. ..S GLOREF=U_$$UP^XLFSTR($P(LOC,";",2))_+LOC_",0)"
  1. ..I GLOREF'?1"^SC("1.N1",0)" Q
  1. ..;IA #10040
  1. ..S LOCDIV=$P($G(@GLOREF),U,15)
  1. ..I +LOCDIV D
  1. ...N ORFND
  1. ...;IA #2817
  1. ...S ORFND=0,HLIEN=0 F S HLIEN=$O(^DG(40.8,"AD",HLIEN)) Q:HLIEN="" D
  1. ....I $D(^DG(40.8,"AD",HLIEN,LOCDIV)) D
  1. .....S ORFND=1
  1. .....I '$D(DIV("ALL")),$D(DIV(HLIEN)) S DIVISION=DIV(HLIEN)
  1. .....I $D(DIV("ALL")) D
  1. ......S DIVISION=$$GET1^DIQ(4,HLIEN_",",.01)
  1. ......S:RET DIV("FOUND",HLIEN)=DIVISION
  1. ...I DIVISION="",'ORFND S LOCDIV=0
  1. .I 'LOC!('LOCDIV) D
  1. ..N IEN
  1. ..S IEN=+$P($$SITE^VASITE(),U)
  1. ..S:'IEN IEN=+DUZ(2)
  1. ..Q:'IEN
  1. ..I $G(DIV("ALL"))="all divisions" D
  1. ...S DIVISION=$$GET1^DIQ(4,IEN_",",.01)
  1. ...S:RET DIV("FOUND",IEN)=DIVISION
  1. ..I '$D(DIV("ALL")),($D(DIV(IEN))) S DIVISION=DIV(IEN)
  1. Q DIVISION