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

BGOUTL.m

Go to the documentation of this file.
  1. BGOUTL ; IHS/BAO/TMD - Utilities ;04-Feb-2015 08:58;DU
  1. ;;1.1;BGO COMPONENTS;**1,3,4,5,6,13,14**;Mar 20, 2007
  1. ; Compute patient's age
  1. ; DFN = Patient IEN
  1. ; DAT = Reference date (defaults to today)
  1. PTAGE(DFN,DAT) ;EP
  1. N DOB
  1. S DOB=+$P($G(^DPT(+DFN,0)),U,3)
  1. S:'$G(DAT) DAT=DT
  1. Q $S(DAT:$$FMDIFF^XLFDT(DT,DOB)/365.25\1,1:"")
  1. ; Convert a string to mixed case
  1. MCASE(X) ;EP
  1. N Y
  1. S X=$$LOW^XLFSTR(X),Y=1
  1. F D S Y=$F(X," ",Y) Q:'Y
  1. .S $E(X,Y)=$$UP^XLFSTR($E(X,Y))
  1. Q X
  1. ; Check if user has specified security key
  1. APSEC(RET,KEY) ;EP
  1. S RET=$D(^XUSEC(KEY,DUZ))
  1. Q
  1. ; Check security keys and parameters
  1. ; INP = <key 1>|<key 2>|...|<key n>^<param 1>|<param 2>|...|<param n>^User IEN (optional)
  1. ; Returned as:
  1. ; <key 1>|<key 2>|...|<key n>^<param 1>|<param 2>|...|<param n>
  1. ; where <key n> is boolean value for presence of key
  1. ; and <param n> is of the format <user setting>~<user class name>
  1. ; where <user setting> is the user setting for the parameter and
  1. ; <user class name> is the user class that has a true value for
  1. ; the parameter.
  1. CHKSEC(RET,INP) ;EP
  1. N KEYS,PARAMS,C,X,LP,PARM,USR,CLS,UC,USER
  1. S RET=""
  1. S KEYS=$P(INP,U)
  1. S PARAMS=$P(INP,U,2)
  1. S USER=$P(INP,U,3)
  1. I USER,USER'=DUZ S RET=$$ERR(1053) Q
  1. F C=1:1 S X=$P(KEYS,"|",C) Q:X="" S $P(KEYS,"|",C)=$$HASKEY^BEHOUSCX(X)
  1. F C=1:1 S PARM=$P(PARAMS,"|",C) Q:PARM="" D
  1. .S USR=$$GET^XPAR("USR.`"_DUZ,PARM)
  1. .S CLS=""
  1. .S LP=0
  1. .F S LP=$O(^USR(8930.3,"B",DUZ,LP)) Q:'LP D Q:CLS'=""
  1. ..S UC=$P($G(^USR(8930.3,LP,0)),U,2)
  1. ..Q:'UC
  1. ..S:$$GET^XPAR("CLS.`"_UC,PARM) CLS=$P($G(^USR(8930,UC,0)),U)
  1. .S $P(PARAMS,"|",C)=+USR_"~"_CLS
  1. S RET=KEYS_U_PARAMS
  1. Q
  1. ; Return a parameter value
  1. CKPARM(RET,PARM) ;EP
  1. S RET=$$GET^XPAR("ALL",PARM)
  1. Q
  1. ; Return clinic stop associated with a location
  1. ; IEN = IEN in HOSPITAL LOCATION file
  1. ; RET = Returned as Name^Code
  1. GETCLN(RET,IEN) ;EP
  1. S RET=$P($G(^SC(+IEN,0)),U,7)
  1. S:$D(^DIC(40.7,+RET,0)) RET=RET_U_$P(^(0),U,1,2)
  1. Q
  1. ;
  1. ; RPC to retrieve visit detail report
  1. GETRPT(RET,VIEN) ;EP
  1. D GETRPT^BEHOENPS(.RET,VIEN)
  1. Q
  1. ; Return a BGO parameter value
  1. ; PID = Parameter identifier
  1. ; RET = Parameter value
  1. GETPARM(RET,PID) ;EP
  1. I $G(PID)="" S RET=$$ERR(1054)
  1. E S RET=$$GET^XPAR("ALL","BGO PARAMETER",PID)
  1. Q
  1. ; Set a BGO parameter value
  1. ; INP = Parameter ID ^ Parameter Value ^ Entity (optional)
  1. SETPARM(RET,INP) ;EP
  1. N PID,VAL,ENT,ERR
  1. S PID=$P(INP,U)
  1. I PID="" S RET=$$ERR(1054) Q
  1. S VAL=$P(INP,U,2)
  1. I VAL="" S RET=$$ERR(1055) Q
  1. S ENT=$P(INP,U,3)
  1. S:'$L(ENT) ENT="USR"
  1. D PUT^XPAR(ENT,"BGO PARAMETER",PID,VAL,.RET)
  1. S:RET RET="-"_RET
  1. Q
  1. ; Lock/unlock a file entry
  1. ; INP = File # ^ IEN ^ Unlock Flag
  1. LOCK(RET,INP) ;EP
  1. N GBL,FNUM,IEN,FLG
  1. S FNUM=+INP
  1. S IEN=+$P(INP,U,2)
  1. S FLG=+$P(INP,U,3)
  1. S GBL=$$ROOT^DILFD(FNUM,,1)
  1. I GBL="" S RET=$$ERR(1056) Q
  1. I IEN'>0 S RET=$$ERR(1057) Q
  1. S GBL=$NA(@GBL@(IEN))
  1. D LOCK^CIANBRPC(.RET,GBL):FLG,LOCK^CIANBRPC(.RET,GBL,0):'FLG
  1. I 'RET,'FLG S RET=$$ERR(1058)
  1. Q
  1. ; Fileman Lookup utility
  1. ; INP = GBL [1] ^ Lookup Value [2] ^ FROM [3] ^ DIR [4] ^ MAX [5] ^ XREF [6] ^ SCRN [7] ^ ALL [8] ^ FLDS [9]
  1. ; GBL = File global root (open or closed, without leading ^) or file #
  1. ; FROM = Text from which to start search
  1. ; DIR = Search direction (defaults to 1)
  1. ; MAX = Maximum # to return (defaults to 44)
  1. ; XREF = Cross ref to use (defaults to "B")
  1. ; SCRN = Screening logic (e.g. => .04="TEST";.07=83)
  1. ; ALL = Return all records, maximum of 9999
  1. ; FLDS = Fields to return
  1. ; VDT = Visit Date for ICD0
  1. DICLKUP(RET,INP) ;EP
  1. N GBL,LKP,FROM,DIR,MAX,VDT,XREF,XREFS,SCRN,ALL,FLDS,FNUM,CNT,IMP
  1. S RET=$$TMPGBL
  1. S GBL=$P(INP,U)
  1. I GBL=9999999.88,$$CSVACT^BGOUTL2 S GBL=81.3
  1. I GBL=+GBL S GBL=$$ROOT^DILFD(GBL,,1)
  1. E S GBL=$$CREF^DILF(U_GBL)
  1. S FNUM=$P($G(@GBL@(0)),U,2),FNUM(0)=FNUM["P",FNUM=+FNUM
  1. Q:'FNUM
  1. S LKP=$P(INP,U,2)
  1. S FROM=$P(INP,U,3)
  1. S DIR=$P(INP,U,4)
  1. S MAX=$P(INP,U,5)
  1. S XREF=$P(INP,U,6)
  1. S SCRN=$TR($P(INP,U,7),"~",U)
  1. S ALL=$P(INP,U,8)
  1. S FLDS=$P(INP,U,9)
  1. S VDT=$P(INP,U,10)
  1. S:FLDS="" FLDS=".01"
  1. I LKP'="",FROM="" S FROM=LKP
  1. S CNT=0,MAX=$S(ALL:9999,MAX>0:+MAX,1:100),DIR=$S(DIR'=-1:1,1:-1)
  1. I GBL="^ICD0" S SCRN="",FLDS=".01",XREF="D" ;Patch 14 for old terms
  1. I XREF'="" D Q
  1. .S XREFS=XREF
  1. .F S XREF=$P(XREFS,"~"),XREFS=$P(XREFS,"~",2,999) D DL1 Q:(XREFS="")!CNT
  1. S XREF="B"
  1. I LKP="" D DL1 Q
  1. F D DL1 S XREF=$O(@GBL@(XREF)) Q:($E(XREF)'="B")!CNT
  1. Q
  1. ; Check specified xref
  1. DL1 N NEXT,IEN
  1. S NEXT=FROM
  1. I LKP'="",XREF="B" D Q:IEN
  1. .S IEN=$O(@GBL@(XREF,LKP,0))
  1. .I IEN,$$XSCRN(IEN,SCRN) D DL2
  1. F Q:CNT'<MAX D:$L(NEXT) Q:'$D(NEXT) S NEXT=$O(@GBL@(XREF,NEXT),DIR) Q:'$L(NEXT)
  1. .I LKP'="",$E(NEXT,1,$L(LKP))'=LKP K NEXT Q
  1. .S IEN=0
  1. .F S IEN=$O(@GBL@(XREF,NEXT,IEN)) Q:'IEN D
  1. ..N S,X,Y,I,J,FLD,OPR,VAL,N,P
  1. ..I SCRN'="" D Q:'X
  1. ...I $E(SCRN,1,2)="I " S Y=IEN X SCRN S X=$T Q
  1. ...F I=1:1 S S=$P(SCRN,"&",I) Q:S="" D Q:'X
  1. ....S FLD=+S,X=0
  1. ....Q:'FLD
  1. ....S OPR=""
  1. ....F J=1:1:3 Q:"=<>'[]"'[$E(S,$L(FLD)+J) S OPR=OPR_$E(S,$L(FLD)+J)
  1. ....Q:OPR=""
  1. ....S VAL=$P(S,OPR,2,999)
  1. ....S N=$P($G(^DD(FNUM,FLD,0)),U,4),P=$P(N,";",2),N=$P(N,";")
  1. ....Q:N=""!(P="")
  1. ....X "S X=$P($G(@GBL@(IEN,N)),U,P)"_OPR_"VAL"
  1. ..D DL2
  1. Q
  1. ; Add to output list
  1. DL2 N VAL,TGT,FLD,IENS,I,X,ICDNAME,XVAL
  1. S IENS=IEN_","
  1. S VAL=""
  1. D GETS^DIQ(FNUM,IENS,FLDS,"I","TGT")
  1. I GBL="^ICD0" D
  1. .I $$AICD^BGOUTL2 D
  1. ..S XVAL=$$ICDOP^ICDEX(IEN,"","","I")
  1. ..S IMP=$$IMP^ICDEX("10P",VDT)
  1. ..I IMP<VDT D
  1. ...I $P(XVAL,U,15)=31&($P(XVAL,U,10)=1) S VAL=IEN
  1. ..E I $P(XVAL,U,15)=2&($P(XVAL,U,10)=1) S VAL=IEN
  1. .E D
  1. ..S XVAL=$$ICDOP^ICDCODE(IEN,"","","I")
  1. ..I $P(XVAL,U,15)=2&($P(XVAL,U,10)=1) S VAL=IEN
  1. E S VAL=IEN_U_NEXT
  1. F I=1:1 S FLD=$P(FLDS,";",I) Q:'$L(FLD) D
  1. .S X=$G(TGT(FNUM,IENS,FLD,"I"))
  1. .I FNUM(0),FLD=.01 S X=$$EXTERNAL^DILFD(FNUM,FLD,,X)
  1. .I VAL'="" D
  1. ..I GBL="^ICD0" S VAL=VAL_U_X_U_$P(XVAL,U,5)
  1. ..E S VAL=VAL_U_X
  1. I VAL'="" S CNT=CNT+1,@RET@(CNT)=VAL
  1. Q
  1. ; Fileman Lookup utility (uses FIND^DIC)
  1. ; INP = GBL [1] ^ Lookup Value [2] ^ FROM [3] ^ DIR [4] ^ MAX [5] ^ XREF [6] ^ SCRN [7] ^ ALL [8] ^ FLDS [9]
  1. ; GBL = File global root (open or closed, without leading ^) or file #
  1. ; FROM = Text from which to start search
  1. ; DIR = Search direction (not supported)
  1. ; MAX = Maximum # to return (defaults to 44)
  1. ; XREF = Cross ref to use (defaults to "B")
  1. ; SCRN = Screening logic (e.g. => .04="TEST";.07=83)
  1. ; ALL = Return all records, maximum of 9999
  1. ; FLDS = Fields to return
  1. DICLKUP2(RET,INP) ;EP
  1. N GBL,LKP,FROM,DIR,MAX,XREF,XREFS,SCRN,ALL,FLDS,FNUM,LP,X
  1. S RET=$$TMPGBL
  1. S GBL=$P(INP,U)
  1. I GBL=+GBL S GBL=$$ROOT^DILFD(GBL,,1)
  1. E S GBL=$$CREF^DILF(U_GBL)
  1. S FNUM=$P($G(@GBL@(0)),U,2),FNUM(0)=FNUM["P",FNUM=+FNUM
  1. Q:'FNUM
  1. S LKP=$P(INP,U,2)
  1. S FROM=$P(INP,U,3)
  1. S DIR=$P(INP,U,4) ; ignored
  1. S MAX=$P(INP,U,5)
  1. S XREF=$TR($P(INP,U,6),"~",U)
  1. S SCRN=$TR($P(INP,U,7),"~",U)
  1. S ALL=$P(INP,U,8)
  1. S FLDS=$P(INP,U,9)
  1. S:FLDS="" FLDS=".01"
  1. F LP=1:1:$L(FLDS,";") D
  1. .S X=$P(FLDS,";",LP)
  1. .S $P(FLDS,";",LP)=X_$S(X=.01&FNUM(0):"E",1:"I")
  1. I LKP'="",FROM="" S FROM=LKP
  1. S MAX=$S(ALL:9999,MAX>0:+MAX,1:100),DIR=$S(DIR'=-1:1,1:-1)
  1. D FIND^DIC(FNUM,,"@;IX;"_FLDS,"BP",LKP,MAX,XREF,SCRN,,RET)
  1. K @RET@("DILIST",0)
  1. Q
  1. ; Returns true if active hospital location
  1. ; LOC = IEN of hospital location
  1. ; DAT = optional date to check (defaults to today)
  1. ACTHLOC(LOC,DAT) ;
  1. Q $$ACTLOC^BEHOENCX(LOC,.DAT)
  1. ; Returns true if user is a provider and is active
  1. ACTPRV(IEN,DAT) ;
  1. Q $$ACTIVE^BEHOUSCX(IEN,.DAT)&$$HASKEY^BEHOUSCX("PROVIDER")
  1. ; Returns true if routine exists
  1. ; X = Routine or routine^tag
  1. ; .Y error message returned if not found
  1. TEST(X,Y) ;EP
  1. S:X[U X=$P(X,U,2)
  1. Q:'$L(X)!(X'?.1"%"1.AN) 0
  1. X ^%ZOSF("TEST")
  1. Q:$T 1
  1. S Y=$$ERR(1059,X)
  1. Q 0
  1. ; Get CPT modifiers for a CPT code
  1. CPTMODS(RET,INP) ;EP
  1. Q:'$$TEST("CPTMODS^ORWPCE",.RET)
  1. D CPTMODS^ORWPCE(.RET,INP)
  1. Q
  1. ; Perform lookup in lexicon
  1. ; INP = Term ^ Type (ICD/CHP)
  1. LEXLKUP(RET,INP) ;EP
  1. N TERM,TYPE,VDT
  1. Q:'$$TEST("LEX^ORWPCE",.RET)
  1. S TERM=$P(INP,U)
  1. Q:TERM=""
  1. S TYPE=$P(INP,U,2)
  1. Q:TYPE=""
  1. S VDT=$P(INP,U,3)
  1. D LEX^ORWPCE(.RET,TERM,TYPE,VDT)
  1. Q
  1. ; Lexicon ICD lookup
  1. ; TERM = Term to lookup
  1. ICDLEX(RET,TERM) ;EP
  1. S $P(TERM,U,2)="ICD"
  1. D LEXLKUP(.RET,TERM)
  1. Q
  1. ; Return IEN of ICD code
  1. ICDIEN(RET,ICD) ;EP
  1. S RET=$S($L(ICD):$O(^ICD9("AB",ICD,"")),1:"")
  1. Q
  1. ; Get ICD IEN from lexicon IEN
  1. ICDLEXCD(RET,LEX) ;EP
  1. Q:'$$TEST("LEXCODE^ORWPCE",.RET)
  1. D LEXCODE^ORWPCE(.RET,LEX,"ICD"),ICDIEN(.RET,RET)
  1. Q
  1. ; Get CPT IEN from lexicon IEN
  1. CPTLEXCD(RET,LEX) ;EP
  1. Q:'$$TEST("LEXCODE^ORWPCE",.RET)
  1. D LEXCODE^ORWPCE(.RET,LEX,"CHP")
  1. S:$L(RET) RET=$O(^ICPT("B",RET,""))
  1. Q
  1. ; Returns the clinic stop associated with a visit
  1. ; VIEN = Visit IEN
  1. VCLN(RET,VIEN) ;EP
  1. I '$G(VIEN) S RET=$$ERR(1002)
  1. E I '$D(^AUPNVSIT(VIEN,0)) S RET=$$ERR(1003)
  1. E S RET=$P(^AUPNVSIT(VIEN,0),U,8),RET=$P($G(^DIC(40.7,+RET,0)),U,2)
  1. Q
  1. ; Returns 1 if a visit exists for current day
  1. ; DFN = Patient IEN
  1. FIRVIS(RET,DFN) ;EP
  1. I '$G(DFN) S RET=$$ERR(1050)
  1. E I '$D(^DPT(DFN,0)) S RET=$$ERR(1001)
  1. E I $O(^AUPNVSIT("AA",DFN,9999999-DT+.2359)) S RET=0
  1. E S RET=1
  1. Q
  1. ; Delete a V file entry
  1. ; INP = V File # ^ V File IEN
  1. VFDEL(RET,INP) ;EP
  1. D VFDEL^BGOUTL2(.RET,+INP,+$P(INP,U,2))
  1. Q
  1. ; Fetch a record from a file
  1. GETREC(FNUM,IEN,FLDS) ;EP
  1. N RET,FLD,IENS,VAL,I,X,Y
  1. S IENS=IEN_",",RET=IEN
  1. D GETS^DIQ(FNUM,IENS,FLDS,"IE","VAL")
  1. F I=1:1:$L(FLDS,";") D
  1. .S FLD=$P(FLDS,";",I)
  1. .S X=$G(VAL(FNUM,IENS,FLD,"E")),Y=$G(VAL(FNUM,IENS,FLD,"I"))
  1. .S:X'=Y X=X_"|"_Y
  1. .S $P(RET,U,I+1)=X
  1. Q RET
  1. ; Add/edit a file entry
  1. UPDATE(FDA,FLG,IEN) ;EP
  1. N ERR,DFN,X
  1. I $G(FLG)["@" S FLG=$TR(FLG,"@")
  1. E D
  1. .S X="FDA"
  1. .F S X=$Q(@X) Q:'$L(X) K:'$L(@X) @X
  1. Q:$D(FDA)'>1 ""
  1. D UPDATE^DIE(.FLG,"FDA","IEN","ERR")
  1. K FDA
  1. Q $S($G(ERR("DIERR",1)):-ERR("DIERR",1)_U_ERR("DIERR",1,"TEXT",1),1:"")
  1. ; Delete an entry from a file
  1. DELETE(DIK,DA) ;EP
  1. N CREF,X,Y
  1. S:DIK=+DIK DIK=$$ROOT^DILFD(DIK)
  1. S CREF=$$CREF^DILF(DIK)
  1. D ^DIK
  1. Q $S($D(@CREF@(DA)):$$ERR(1060,$P($G(@CREF@(0),"UNKNOWN"),U)),1:"")
  1. ; Check and validate visit
  1. CHKVISIT(VIEN,DFN,CAT) ;EP
  1. N RET,X0
  1. S RET=$$ISLOCKED^BEHOENCX(VIEN)
  1. Q:RET $S(RET<0:$$ERR(1003),1:$$ERR(1061))
  1. S X0=$G(^AUPNVSIT(VIEN,0))
  1. I $G(DFN),$P(X0,U,5)'=DFN S RET=$$ERR(1062)
  1. E I $P(X0,U,11) S RET=$$ERR(1063)
  1. E I $L($G(CAT)),CAT'[$P(X0,U,7) S RET=$$ERR(1064,$$EXTERNAL^DILFD(9000010,.07,,$P(X0,U,7)))
  1. Q RET
  1. ; Get primary provider for a visit
  1. ; VIEN = Visit IEN
  1. ; Returns Provider IEN ^ Provider Name ^ V Provider IEN
  1. PRIPRV(VIEN) ;EP
  1. N X,RET
  1. Q:'VIEN $$ERR(1002)
  1. S X=0,RET=$$ERR(1065)
  1. F S X=$O(^AUPNVPRV("AD",VIEN,X)) Q:'X D Q:RET>0
  1. .S Y=$G(^AUPNVPRV(X,0))
  1. .S:$P(Y,U,4)="P" RET=$P(Y,U)_U_$P($G(^VA(200,+Y,0)),U)_U_X
  1. Q RET
  1. ; Create an historical visit
  1. MAKEHIST(DFN,EVNTDT,LOC,VIEN) ;EP
  1. S EVNTDT=$$CVTDATE(EVNTDT)
  1. S:EVNTDT#100\1=0 EVNTDT=EVNTDT+1
  1. Q:EVNTDT\1>DT $$ERR(1066)
  1. I $G(VIEN) D Q:VIEN VIEN
  1. .N X,V,L
  1. .S X=$G(^AUPNVSIT(VIEN,0)),L=$G(^(21)),V=VIEN,VIEN=0
  1. .Q:DFN'=$P(X,U,5)
  1. .Q:$P(X,U,7)'="E"
  1. .I X\1'=EVNTDT,+X'=EVNTDT Q
  1. .I LOC=+LOC Q:$P(X,U,6)'=LOC
  1. .E I $L(LOC),$P(L,U)'=LOC,$$GET1^DIQ(4,$P(X,U,6),.01)'=LOC Q
  1. .S VIEN=V
  1. Q $$FNDVIS^BEHOENCX(DFN,EVNTDT,"E","",-1,,LOC)
  1. ; Convert date to internal format
  1. CVTDATE(X) ;EP
  1. Q:"@"[X X
  1. S:X?1.E1" "1.2N1":"2N.E X=$P(X," ")_"@"_$P(X," ",2,99)
  1. D DT^DILF("PT",X,.X)
  1. Q $S(X>0:X,1:"")
  1. ; Convert date to MM/DD/YYYY format
  1. ; If TM is nonzero, include time portion
  1. FMTDATE(X,TM) ;EP
  1. Q:'X ""
  1. N M,D,V
  1. S V=$TR($$FMTE^XLFDT(X,$S($G(TM):"5ZM",1:"5ZD")),"@"," ")
  1. Q V
  1. ;S M=$E(X,4,5),D=$E(X,6,7),V=$E(X,1,3)+1700
  1. ;S:M&D V=D_"/"_V
  1. ;S:M V=M_"/"_V
  1. ;I $G(TM) D
  1. ;.S X=X#1
  1. ;.Q:'X
  1. ;.S X=$TR($J(X*10000\1,4),0)
  1. ;.S V=V_" "_$E(X,1,2)_":"_$E(X,3,4)
  1. ;Q V
  1. ; Convert a string to WP format
  1. TOWP(X) ;EP
  1. N I,L,L2,Y,Z
  1. S Y=@X
  1. K @X
  1. S:Y="@" Y=""
  1. F I=1:1 Q:'$L(Y) D
  1. .S L=$F(Y,$C(13))
  1. .I 'L!(L>242) D
  1. ..S L=$S($L(Y)'>240:999,1:0)
  1. ..F S L2=$F(Y," ",L) Q:'L2!(L2>242) S L=L2
  1. .I 'L S Z=$E(Y,1,240),Y=$E(Y,241,99999)
  1. .E S Z=$E(Y,1,L-2),Y=$E(Y,L,99999)
  1. .S @X@(I,0)=$TR(Z,$C(13,10))
  1. Q $S($D(@X):X,1:"")
  1. ; Convert a value to internal format
  1. TOINTRNL(FNUM,FLD,VAL) ;EP
  1. N RET
  1. D CHK^DIE(FNUM,FLD,,VAL,.RET)
  1. Q $S(U[$G(RET):"",1:RET)
  1. ; Return an error code/error dialog
  1. ERR(CODE,PARAMS) ;EP
  1. Q -CODE_U_$$EZBLD^DIALOG(CODE+903620000,.PARAMS)
  1. ; Return a temporary global reference
  1. TMPGBL(X) ;EP
  1. K ^TMP("BGO"_$G(X),$J) Q $NA(^($J))
  1. ; Returns status of screen application
  1. ; 0=failed 1=passed
  1. XSCRN(IEN,SCRN) ;EP
  1. N S,X,Y,I,J,FLD,OPR,VAL,N,P
  1. S X=1 ; Default to passed
  1. I SCRN'="" D
  1. .I $E(SCRN,1,2)="I " D
  1. ..S Y=IEN X SCRN S X=$T
  1. .E D
  1. ..F I=1:1 S S=$P(SCRN,"&",I) Q:S="" D Q:'X
  1. ...S FLD=+S,X=0
  1. ...Q:'FLD
  1. ...S OPR=""
  1. ...F J=1:1:3 Q:"=<>'[]"'[$E(S,$L(FLD)+J) S OPR=OPR_$E(S,$L(FLD)+J)
  1. ...Q:OPR=""
  1. ...S VAL=$P(S,OPR,2,999)
  1. ...S N=$P($G(^DD(FNUM,FLD,0)),U,4),P=$P(N,";",2),N=$P(N,";")
  1. ...Q:N=""!(P="")
  1. ...X "S X=$P($G(@GBL@(IEN,N)),U,P)"_OPR_"VAL"
  1. Q X