ORQOR2 ; slc/CLA - Extrinsic functions which return order information ;02/17/16  12:08
 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**6,32,92,122,144,190,251,350,423**;Dec 17, 1997;Build 19
STATUS(ORN) ;extrinsic function returns the current status of an order in
 ;the format: status ien^external text
 ;DBIA #3458 supported api for outpt pharmacy
 Q:'$L($G(ORN)) ""
 Q:'$L($G(^OR(100,ORN,3))) ""
 N ORSTATUS
 S ORSTATUS=$P(^OR(100,ORN,3),U,3)
 S ORSTATUS=ORSTATUS_U_$G(^ORD(100.01,+ORSTATUS,0))
 Q ORSTATUS
RECENT(PT,OI,ST) ;extrinsic funct returns pt's most recent order for an orderable item and status in format:
 ; order number^order text (truncated to 60 chars)^start d/t^status
 N INDT,ORN,CDT,ORSTATUS,ORTEXT,RESULT S RESULT="",ORN="",INDT=""
 F  S INDT=$O(^OR(100,"AOI",OI,PT_";DPT(",INDT)) Q:INDT=""!(RESULT'="")  D
 .F  S ORN=$O(^OR(100,"AOI",OI,PT_";DPT(",INDT,ORN)) Q:ORN=""  D
 ..S ORSTATUS=$P(^OR(100,ORN,3),U,3)
 ..I '$L($G(ST))!($G(ORSTATUS)=ST) D
 ...S ORSTATUS=$G(^ORD(100.01,ORSTATUS,0)),CDT=9999999-INDT
 ...S ORTEXT=$P($$TEXT^ORKOR(ORN,60),U,2)
 ...S RESULT=ORN_U_ORTEXT_U_CDT_U_ORSTATUS
 Q RESULT
DUPRANGE(OI,DG,ODT,ORPT) ;extrinsic funct returns duplicate order range beginning date in the format:
 ;fileman d/t^inverse fileman d/t
 ;OI   = orderable item ien
 ;DG   = display group abbrev. (e.g. 'LR')
 ;ODT  = order effective/start date/time in FM format
 ;ORPT = patient dfn
 N DHRS,BDT,INBDT,ORSRV,ORLOC
 S BDT="",INBDT=""
 ;
 ;get patient's location flag (INPATIENT ONLY - outpt locations cannot be
 ;reliably determined, and many simultaneous outpt locations can occur):
 I +$G(ORPT)>0 D
 .N DFN S DFN=ORPT,VA200="" D OERR^VADPT
 .I +$G(VAIN(4))>0 S ORLOC=+$G(^DIC(42,+$G(VAIN(4)),44))
 .K VA200,VAIN
 ;
 S ORSRV=$G(^VA(200,DUZ,5)) I +ORSRV>0 S ORSRV=$P(ORSRV,U)
 S DHRS=$$GET^XPAR("LOC.`"_$G(ORLOC)_"^SRV.`"_$G(ORSRV)_"^DIV^SYS","ORK DUP ORDER RANGE OI",OI,"I")
 Q:$G(DHRS)=0 "0^0" ;quit if number of hours for this OI is zero
 I +$G(DHRS)<1 D
 .I DG="LR" S DHRS=$$GET^XPAR("LOC.`"_$G(ORLOC)_"^SRV.`"_$G(ORSRV)_"^DIV^SYS^PKG","ORK DUP ORDER RANGE LAB",1,"I")
 .I DG="RA" S DHRS=$$GET^XPAR("LOC.`"_$G(ORLOC)_"^SRV.`"_$G(ORSRV)_"^DIV^SYS^PKG","ORK DUP ORDER RANGE RADIOLOGY",1,"I")
 I +$G(DHRS)<1 S DHRS=48  ;non-lab and non-radiology default is 48 hrs
 S BDT=$$FMADD^XLFDT(ODT,"","-"_DHRS,"",""),INBDT=9999999-BDT
 Q BDT_U_INBDT
ORDERER(ORNUM) ;ext. funct. gets ordering provider DUZ from ORDER File (#100)
 Q:'$L($G(ORNUM)) ""
 S ORNUM=+$G(ORNUM)
 N ORQDUZ,ORQI S ORQDUZ=""
 I $L($G(^OR(100,ORNUM,8,0))) D
 .S ORQI=0,ORQI=$O(^OR(100,ORNUM,8,"C","NW",ORQI))  ;8 node for New order
 Q:+$G(ORQI)<1 ""
 S ORQDUZ=$P(^OR(100,ORNUM,8,ORQI,0),U,3)
 Q ORQDUZ
UNSIGNOR(ORNUM) ;ext. funct. gets ordering provider DUZ from ORDER File (#100)
 ; based on order action number (8 node)
 ; if no action number return orderer for New order
 ;ORNUM in format: <order ien><action number>
 Q:'$L(+$G(ORNUM)) ""
 N ORQDUZ,ORQI S ORQDUZ=""
 S ORQI=$P(ORNUM,";",2)
 S ORNUM=$P(ORNUM,";")
 Q:+$G(ORNUM)<1 ""
 I +$G(ORQI)<1 S ORQI=$P($G(^OR(100,ORNUM,8,0)),U,3)
 I $L(ORQI),$L($G(^OR(100,ORNUM,8,ORQI,0))) D
 .S ORQDUZ=$P(^OR(100,ORNUM,8,ORQI,0),U,3)
 Q ORQDUZ
OI(ORNUM) ;ext. funct. gets Orderable Item ien from ORDER File (#100)
 Q:+$G(ORNUM)<1 ""
 N OI S OI=""
 S OI=+$G(^OR(100,+$G(ORNUM),.1,1,0))
 Q OI
OIM(ORY,ORNUM) ; Retrieves multiple Orderable Item IEN's from ORDER File (#100)
 N ORDA,ORCNT S (ORDA,ORY,ORCNT)=0
 Q:+$G(ORNUM)<1 ORY
 F  S ORDA=$O(^OR(100,+$G(ORNUM),.1,ORDA)) Q:'ORDA  D
 . S ORY(ORDA)=+$G(^OR(100,+$G(ORNUM),.1,ORDA,0))
 . S ORCNT=ORDA
 S ORY=ORCNT
 Q ORY
DG(ORNUM) ;ext. funct. gets Display Group ien from ORDER File (#100)
 Q:'$L($G(ORNUM)) ""
 N DG S DG=""
 S DG=$G(^OR(100,ORNUM,0))
 I $L(DG) S DG=$P(DG,U,11)
 Q DG
DGRX(ORNUM)        ;ext. funct. determines if order is pharmacy order
 Q:+$G(ORNUM)<1 ""
 N DG,DGNAME,RXDG
 S DG=$$DG(ORNUM)
 S DGNAME=$P($G(^ORD(100.98,+DG,0)),U) Q:'$L(DGNAME) ""
 F RXDG="PHARMACY","INPATIENT MEDICATIONS","OUTPATIENT MEDICATIONS","UNIT DOSE MEDICATIONS","IV MEDICATIONS","NON-VA MEDICATIONS","CLINIC ORDERS","CLINIC INFUSIONS","CLINIC MEDICATIONS","" Q:(DGNAME=RXDG)
 Q RXDG
PT(ORNUM) ;ext. funct. gets Patient dfn from ORDER File (#100)
 Q:'$L($G(ORNUM)) ""
 N PT S PT=""
 S PT=$G(^OR(100,ORNUM,0))
 I $L(PT) S PT=$P(PT,U,2),PT=$P(PT,";DPT")
 Q PT
RSLTFLG(ORNUM) ;ext. funct. returns duz of user to receive alert if order was
 ; flagged to alert when resulted
 Q:'$L($G(ORNUM)) ""
 N FLG S FLG=""
 S FLG=$G(^OR(100,+ORNUM,3))
 I $L(FLG) S FLG=$P(FLG,U,10)
 Q FLG
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HORQOR2   4637     printed  Sep 23, 2025@20:09:38                                                                                                                                                                                                      Page 2
ORQOR2    ; slc/CLA - Extrinsic functions which return order information ;02/17/16  12:08
 +1       ;;3.0;ORDER ENTRY/RESULTS REPORTING;**6,32,92,122,144,190,251,350,423**;Dec 17, 1997;Build 19
STATUS(ORN) ;extrinsic function returns the current status of an order in
 +1       ;the format: status ien^external text
 +2       ;DBIA #3458 supported api for outpt pharmacy
 +3        if '$LENGTH($GET(ORN))
               QUIT ""
 +4        if '$LENGTH($GET(^OR(100,ORN,3)))
               QUIT ""
 +5        NEW ORSTATUS
 +6        SET ORSTATUS=$PIECE(^OR(100,ORN,3),U,3)
 +7        SET ORSTATUS=ORSTATUS_U_$GET(^ORD(100.01,+ORSTATUS,0))
 +8        QUIT ORSTATUS
RECENT(PT,OI,ST) ;extrinsic funct returns pt's most recent order for an orderable item and status in format:
 +1       ; order number^order text (truncated to 60 chars)^start d/t^status
 +2        NEW INDT,ORN,CDT,ORSTATUS,ORTEXT,RESULT
           SET RESULT=""
           SET ORN=""
           SET INDT=""
 +3        FOR 
               SET INDT=$ORDER(^OR(100,"AOI",OI,PT_";DPT(",INDT))
               if INDT=""!(RESULT'="")
                   QUIT 
               Begin DoDot:1
 +4                FOR 
                       SET ORN=$ORDER(^OR(100,"AOI",OI,PT_";DPT(",INDT,ORN))
                       if ORN=""
                           QUIT 
                       Begin DoDot:2
 +5                        SET ORSTATUS=$PIECE(^OR(100,ORN,3),U,3)
 +6                        IF '$LENGTH($GET(ST))!($GET(ORSTATUS)=ST)
                               Begin DoDot:3
 +7                                SET ORSTATUS=$GET(^ORD(100.01,ORSTATUS,0))
                                   SET CDT=9999999-INDT
 +8                                SET ORTEXT=$PIECE($$TEXT^ORKOR(ORN,60),U,2)
 +9                                SET RESULT=ORN_U_ORTEXT_U_CDT_U_ORSTATUS
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +10       QUIT RESULT
DUPRANGE(OI,DG,ODT,ORPT) ;extrinsic funct returns duplicate order range beginning date in the format:
 +1       ;fileman d/t^inverse fileman d/t
 +2       ;OI   = orderable item ien
 +3       ;DG   = display group abbrev. (e.g. 'LR')
 +4       ;ODT  = order effective/start date/time in FM format
 +5       ;ORPT = patient dfn
 +6        NEW DHRS,BDT,INBDT,ORSRV,ORLOC
 +7        SET BDT=""
           SET INBDT=""
 +8       ;
 +9       ;get patient's location flag (INPATIENT ONLY - outpt locations cannot be
 +10      ;reliably determined, and many simultaneous outpt locations can occur):
 +11       IF +$GET(ORPT)>0
               Begin DoDot:1
 +12               NEW DFN
                   SET DFN=ORPT
                   SET VA200=""
                   DO OERR^VADPT
 +13               IF +$GET(VAIN(4))>0
                       SET ORLOC=+$GET(^DIC(42,+$GET(VAIN(4)),44))
 +14               KILL VA200,VAIN
               End DoDot:1
 +15      ;
 +16       SET ORSRV=$GET(^VA(200,DUZ,5))
           IF +ORSRV>0
               SET ORSRV=$PIECE(ORSRV,U)
 +17       SET DHRS=$$GET^XPAR("LOC.`"_$GET(ORLOC)_"^SRV.`"_$GET(ORSRV)_"^DIV^SYS","ORK DUP ORDER RANGE OI",OI,"I")
 +18      ;quit if number of hours for this OI is zero
           if $GET(DHRS)=0
               QUIT "0^0"
 +19       IF +$GET(DHRS)<1
               Begin DoDot:1
 +20               IF DG="LR"
                       SET DHRS=$$GET^XPAR("LOC.`"_$GET(ORLOC)_"^SRV.`"_$GET(ORSRV)_"^DIV^SYS^PKG","ORK DUP ORDER RANGE LAB",1,"I")
 +21               IF DG="RA"
                       SET DHRS=$$GET^XPAR("LOC.`"_$GET(ORLOC)_"^SRV.`"_$GET(ORSRV)_"^DIV^SYS^PKG","ORK DUP ORDER RANGE RADIOLOGY",1,"I")
               End DoDot:1
 +22      ;non-lab and non-radiology default is 48 hrs
           IF +$GET(DHRS)<1
               SET DHRS=48
 +23       SET BDT=$$FMADD^XLFDT(ODT,"","-"_DHRS,"","")
           SET INBDT=9999999-BDT
 +24       QUIT BDT_U_INBDT
ORDERER(ORNUM) ;ext. funct. gets ordering provider DUZ from ORDER File (#100)
 +1        if '$LENGTH($GET(ORNUM))
               QUIT ""
 +2        SET ORNUM=+$GET(ORNUM)
 +3        NEW ORQDUZ,ORQI
           SET ORQDUZ=""
 +4        IF $LENGTH($GET(^OR(100,ORNUM,8,0)))
               Begin DoDot:1
 +5       ;8 node for New order
                   SET ORQI=0
                   SET ORQI=$ORDER(^OR(100,ORNUM,8,"C","NW",ORQI))
               End DoDot:1
 +6        if +$GET(ORQI)<1
               QUIT ""
 +7        SET ORQDUZ=$PIECE(^OR(100,ORNUM,8,ORQI,0),U,3)
 +8        QUIT ORQDUZ
UNSIGNOR(ORNUM) ;ext. funct. gets ordering provider DUZ from ORDER File (#100)
 +1       ; based on order action number (8 node)
 +2       ; if no action number return orderer for New order
 +3       ;ORNUM in format: <order ien><action number>
 +4        if '$LENGTH(+$GET(ORNUM))
               QUIT ""
 +5        NEW ORQDUZ,ORQI
           SET ORQDUZ=""
 +6        SET ORQI=$PIECE(ORNUM,";",2)
 +7        SET ORNUM=$PIECE(ORNUM,";")
 +8        if +$GET(ORNUM)<1
               QUIT ""
 +9        IF +$GET(ORQI)<1
               SET ORQI=$PIECE($GET(^OR(100,ORNUM,8,0)),U,3)
 +10       IF $LENGTH(ORQI)
               IF $LENGTH($GET(^OR(100,ORNUM,8,ORQI,0)))
                   Begin DoDot:1
 +11                   SET ORQDUZ=$PIECE(^OR(100,ORNUM,8,ORQI,0),U,3)
                   End DoDot:1
 +12       QUIT ORQDUZ
OI(ORNUM) ;ext. funct. gets Orderable Item ien from ORDER File (#100)
 +1        if +$GET(ORNUM)<1
               QUIT ""
 +2        NEW OI
           SET OI=""
 +3        SET OI=+$GET(^OR(100,+$GET(ORNUM),.1,1,0))
 +4        QUIT OI
OIM(ORY,ORNUM) ; Retrieves multiple Orderable Item IEN's from ORDER File (#100)
 +1        NEW ORDA,ORCNT
           SET (ORDA,ORY,ORCNT)=0
 +2        if +$GET(ORNUM)<1
               QUIT ORY
 +3        FOR 
               SET ORDA=$ORDER(^OR(100,+$GET(ORNUM),.1,ORDA))
               if 'ORDA
                   QUIT 
               Begin DoDot:1
 +4                SET ORY(ORDA)=+$GET(^OR(100,+$GET(ORNUM),.1,ORDA,0))
 +5                SET ORCNT=ORDA
               End DoDot:1
 +6        SET ORY=ORCNT
 +7        QUIT ORY
DG(ORNUM) ;ext. funct. gets Display Group ien from ORDER File (#100)
 +1        if '$LENGTH($GET(ORNUM))
               QUIT ""
 +2        NEW DG
           SET DG=""
 +3        SET DG=$GET(^OR(100,ORNUM,0))
 +4        IF $LENGTH(DG)
               SET DG=$PIECE(DG,U,11)
 +5        QUIT DG
DGRX(ORNUM) ;ext. funct. determines if order is pharmacy order
 +1        if +$GET(ORNUM)<1
               QUIT ""
 +2        NEW DG,DGNAME,RXDG
 +3        SET DG=$$DG(ORNUM)
 +4        SET DGNAME=$PIECE($GET(^ORD(100.98,+DG,0)),U)
           if '$LENGTH(DGNAME)
               QUIT ""
 +5        FOR RXDG="PHARMACY","INPATIENT MEDICATIONS","OUTPATIENT MEDICATIONS","UNIT DOSE MEDICATIONS","IV MEDICATIONS","NON-VA MEDICATIONS","CLINIC ORDERS","CLINIC INFUSIONS","CLINIC MEDICATIONS",""
               if (DGNAME=RXDG)
                   QUIT 
 +6        QUIT RXDG
PT(ORNUM) ;ext. funct. gets Patient dfn from ORDER File (#100)
 +1        if '$LENGTH($GET(ORNUM))
               QUIT ""
 +2        NEW PT
           SET PT=""
 +3        SET PT=$GET(^OR(100,ORNUM,0))
 +4        IF $LENGTH(PT)
               SET PT=$PIECE(PT,U,2)
               SET PT=$PIECE(PT,";DPT")
 +5        QUIT PT
RSLTFLG(ORNUM) ;ext. funct. returns duz of user to receive alert if order was
 +1       ; flagged to alert when resulted
 +2        if '$LENGTH($GET(ORNUM))
               QUIT ""
 +3        NEW FLG
           SET FLG=""
 +4        SET FLG=$GET(^OR(100,+ORNUM,3))
 +5        IF $LENGTH(FLG)
               SET FLG=$PIECE(FLG,U,10)
 +6        QUIT FLG