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

BEHORXFN.m

Go to the documentation of this file.
  1. BEHORXFN ;MSC/IND/DKM/PLS - Supporting calls for EHR ;23-Jul-2015 21:20;PLS
  1. ;;1.1;BEH COMPONENTS;**009005,009006,009007,009008,009011,009012,009013**;Sep 18, 2007
  1. ;=================================================================
  1. ; RPC: BEHORXFN FINISH
  1. ; Finish a pending script
  1. ; DFN = Patient IEN
  1. ; ORIFN = Order IEN
  1. ; DATA returned as:
  1. ; Drug[1] ^ Rx #[2] ^ ExpDate[3] ^ RefRem[4] ^ Issue Date[5] ^ Status[6] ^
  1. ; Days Supply[7] ^ Quantity[8] ^ Provider IEN~Name[9] ^ PharmID[10] ^ OrderID[11] ^
  1. ; LastFill[12] ^ PharmSite[13] ^ NDC[14] ^ RXNORM[15] ^ Process State[16] ^ External Pharmacy[17]
  1. ; <"\" or " "><Instruction Text> where "\" indicates a new line
  1. ;
  1. FINISH(DATA,DFN,ORIFN) ;
  1. N PSIFN,X,RXINFO,I,ILST,INST
  1. D CREATE^APSPFNC2(ORIFN,1)
  1. S PSIFN=$$GETPSIFN(ORIFN)
  1. S DATA=$$TMPGBL^CIAVMRPC
  1. K @DATA
  1. Q:'PSIFN
  1. K ^TMP("PS",$J)
  1. D OEL^PSOORRL(DFN,PSIFN)
  1. S ILST=0
  1. S RXINFO=$G(^TMP("PS",$J,0)),$P(RXINFO,U,2)=$P($G(^("RXN",0)),U)
  1. S $P(RXINFO,U,9)=$TR($G(^TMP("PS",$J,"P",0)),U,"~")
  1. S $P(RXINFO,U,10)=PSIFN_"R;O",$P(RXINFO,U,13)=$$LOC^APSPFNC2(+ORIFN)
  1. S $P(RXINFO,U,14)=$$NDCVAL^APSPFUNC(PSIFN)
  1. S $P(RXINFO,U,15)=$$GETRXNRM(+ORIFN,PSIFN)
  1. S $P(RXINFO,U,16)=$$PSTATE(PSIFN)
  1. S $P(RXINFO,U,17)=$$EPHARM(PSIFN)
  1. D ADDOUT(RXINFO)
  1. S INST(1)=" "_$P(RXINFO,U),Y=1
  1. S:$L($P(RXINFO,U,8)) INST(1)=INST(1)_" Qty: "_$P(RXINFO,U,8)
  1. S:$L($P(RXINFO,U,7)) INST(1)=INST(1)_" for "_$P(RXINFO,U,7)_" days"
  1. S I=0
  1. F S I=$O(^TMP("PS",$J,"SIG",I)) Q:'I D
  1. .S Y=Y+1,INST(Y)=^TMP("PS",$J,"SIG",I,0)
  1. S INST(2)="\ Sig: "_$G(INST(2))
  1. F I=3:1:Y S INST(I)=" "_INST(I)
  1. S I=0
  1. F S I=+$O(INST(I)) Q:'I D ADDOUT(INST(I))
  1. K ^TMP("PS",$J)
  1. Q
  1. ; RPC: BEHORXFN PRINTLOG
  1. ; Log print activity
  1. PRINTLOG(DATA,ORIFN,PRINTER,ACTION,COM) ;
  1. N ARY,PSIFN
  1. S:$L(PRINTER)>40 $E(PRINTER,1,$L(PRINTER)-37)="..."
  1. S PRINTER=$TR(PRINTER,U)
  1. I ACTION=2 D
  1. .S ARY("COM")=$G(COM,"Comment not provided.")
  1. .S ARY("TYPE")="R"
  1. E D
  1. .S ARY("COM")=$S(ACTION:"Sample label",1:"Prescription")_" printed on "_PRINTER_"."
  1. .S ARY("TYPE")="P"
  1. S ARY("REASON")="B"
  1. S ARY("RX REF")=0
  1. S ARY("DEV")=PRINTER
  1. S:$L($G(COM)) ARY("COM")=COM
  1. S PSIFN=+$$GETPSIFN(ORIFN)
  1. I $$ORDFSIG(ORIFN) D
  1. .D UPTLOG^BEHORXF1(.DATA,ORIFN,ACTION,.ARY)
  1. E D:PSIFN UPTLOG^APSPFNC2(.DATA,PSIFN,ACTION,.ARY)
  1. Q
  1. ; RPC: BEHORXFN GETRXS
  1. ; Fetch list of current prescriptions
  1. ; DFN = Patient IEN
  1. ; DAYS= # days to include in search (default = 365)
  1. ; DATA returned as a list in the format for each script:
  1. ;
  1. ; ~Type[1] ^ PharmID[2] ^ Drug[3] ^ InfRate[4] ^ StopDt[5] ^ RefRem[6] ^
  1. ; TotDose[7] ^ UnitDose[8] ^ OrderID[9] ^ Status[10] ^ LastFill[11] ^
  1. ; Days Supply[12] ^ Quantity[13] ^ Chronic[14] ^ Issued[15] ^
  1. ; Rx #[16] ^ Provider IEN~Name[17] ^ Status Reason[18] ^ DEA Handling[19] ^
  1. ; Pharmacy Site[20] ^ Indication ICD~Text[21] ^ DAW[22] ^ NVOA[23] ^ NDC[24] ^ RXNORM[25] ^
  1. ; Process State[26] ^ External Pharmacy[27]
  1. ;
  1. ; <"\" or " "><Instruction Text> where "\" indicates a new line
  1. GETRXS(DATA,DFN,DAYS) ;
  1. D CLNNVA
  1. N INDEX,ILST,DAT
  1. K ^TMP("PS",$J)
  1. S:$G(DAYS)<1 DAYS=365
  1. D OCL^PSOORRL(DFN,$$FMADD^XLFDT(DT,-DAYS),"")
  1. S ILST=0,INDEX=""
  1. F S INDEX=$O(^TMP("PS",$J,INDEX),-1) Q:'INDEX D
  1. .N INSTRUCT,COMMENTS,FIELDS,NVSDT,TYPE,IND,CMF,RXN,PRV,REASON,DEA,IFN,DAW,J,K,X,NDC,RXNORM,ATF,EPHARM,TDRUG
  1. .S (INSTRUCT,COMMENTS,IND,CMF,RXN,REASON,DEA,DAW,NDC,RXNORM,ATF,EPHARM)=""
  1. .S FIELDS=^TMP("PS",$J,INDEX,0),PRV=$TR($G(^("P",0)),U,"~")
  1. .S IFN=+$P(FIELDS,U,8),X=$O(^OR(100,IFN,4.5,"ID","DRUG",0))
  1. .S:X X=+$G(^OR(100,IFN,4.5,X,1))
  1. .S:X DEA=$P($G(^PSDRUG(X,0)),U,3)
  1. .;S:$D(^OR(100,IFN,8,"C","XX")) $P(^(0),U,2)="*"_$P(^TMP("PS",$J,INDEX,0),U,2)
  1. .S TYPE=$S($P($P(FIELDS,U),";",2)="O":"OP",1:"UD")
  1. .I TYPE="OP",$P(FIELDS,";")["N" S TYPE="NV"
  1. .S:$O(^TMP("PS",$J,INDEX,"A",0))>0 TYPE="IV"
  1. .S:$O(^TMP("PS",$J,INDEX,"B",0))>0 TYPE="IV"
  1. .Q:$G(IFN)&$D(^TMP("PS",$J,"X",TYPE,IFN)) S ^(IFN)="" ; OCL^PSOORRL can return dups
  1. .I TYPE="UD" D
  1. ..D UDINST(.INSTRUCT)
  1. ..D SETMULT(.COMMENTS,"SIO")
  1. ..S TDRUG=$$VALUE^ORCSAVE2(IFN,"DRUG")
  1. ..S NDC=$$GET1^DIQ(50,TDRUG,31)
  1. .E I TYPE="OP" D
  1. ..D OPINST(.INSTRUCT)
  1. ..S CMF=$$GETCMF1(IFN)
  1. ..S IND=$$GETIND(IFN)
  1. ..S DAW=$$GETDAW(IFN)
  1. ..S NDC=$$GETNDC(IFN)
  1. ..S RXNORM=$$GETRXNRM(IFN)
  1. ..S RXNORM=$P(RXNORM,U,1)
  1. ..S ATF=$$PSTATE(+$$GETPSIFN(IFN))
  1. ..S EPHARM=$$EPHARM(+$$GETPSIFN(IFN))
  1. ..S J=$P($P(FIELDS,U),";")
  1. ..I J["R" D
  1. ...S RXN=$P($G(^PSRX(+J,0)),U),J=$G(^(2)),K=+$G(^("STA"))
  1. ...;IHS/MSC/PLS - 09/30/2013
  1. ...;I K<12,'$P(J,U,13),$P(J,U,15) S $P(FIELDS,U,9,10)="Not Picked Up^",REASON="Returned to stock on "_$$FMTE^XLFDT($P(J,U,15))
  1. ...;I K=5 S $P(FIELDS,U,10)="" ;P1018 - remove last fill date for suspsended rxs
  1. ...I '$P(J,U,13),$P(J,U,15) D
  1. ....I K<12 S $P(FIELDS,U,9,10)="Not Picked Up^",REASON="Returned to stock on "_$$FMTE^XLFDT($P(J,U,15))
  1. ....E S $P(FIELDS,U,10)=""
  1. ...I "FESPQ"[ATF,ATF'="" S $P(FIELDS,U,10)="" ;IHS/MSC/PLS - 07/07/2015 - APSP 1019/EHR p15
  1. .E I TYPE="IV" D
  1. ..D IVINST(.INSTRUCT)
  1. ..D SETMULT(.COMMENTS,"SIO")
  1. .E I TYPE="NV" D
  1. ..D NVINST(.INSTRUCT)
  1. ..D NVSTATE(.REASON,.NVSDT)
  1. ..D SETMULT(.COMMENTS,"SIO")
  1. ..S $P(FIELDS,U,9)=$$NVSTS(IFN,$P(FIELDS,U,9))
  1. ..S $P(FIELDS,U,15)=$G(NVSDT)
  1. ..S TDRUG=$$VALUE^ORCSAVE2(IFN,"DRUG")
  1. ..S NDC=$$GET1^DIQ(50,TDRUG,31)
  1. .S:$D(COMMENTS(1)) COMMENTS(1)="\"_COMMENTS(1)
  1. .S:$P(FIELDS,U,9)="HOLD" REASON=$$HLDRSN(IFN)
  1. .D ADDOUT("~"_TYPE_U_$P(FIELDS,U,1,12)_U_CMF_U_$P(FIELDS,U,15)_U_RXN_U_PRV_U_REASON_U_DEA_U_$S(IFN:$$LOC^APSPFNC2(IFN),1:"")_U_IND_U_DAW_U_$$NVOA()_U_NDC_U_RXNORM_U_ATF_U_EPHARM)
  1. .S J=0
  1. .F S J=+$O(INSTRUCT(J)) Q:'J D ADDOUT(INSTRUCT(J))
  1. .F S J=+$O(COMMENTS(J)) Q:'J D ADDOUT("t"_COMMENTS(J))
  1. .F S J=+$O(REASON(J)) Q:'J D ADDOUT("t"_REASON(J))
  1. K ^TMP("PS",$J)
  1. Q
  1. ; Add to output
  1. ADDOUT(X) ;
  1. S ILST=ILST+1,@DATA@(ILST)=X
  1. Q
  1. ; Assembles instructions for a unit dose order
  1. UDINST(Y) ;
  1. N I,X
  1. S X=FIELDS
  1. S Y(1)=" "_$P(X,U,2),Y=1
  1. S X=$S($L($P(X,U,6)):$P(X,U,6),1:$P(X,U,7))
  1. I $L(X) S Y=2,Y(2)=X
  1. E S Y=1 D SETMULT(.Y,"SIG")
  1. S Y(2)="\Give: "_$G(Y(2)),Y=$G(Y,2)
  1. D SETMULT(.Y,"MDR"),SETMULT(.Y,"SCH")
  1. F I=3:1:Y S Y(I)=" "_Y(I)
  1. Q
  1. ; Assembles instructions for an outpatient prescription
  1. OPINST(Y) ;
  1. N I,X
  1. S X=FIELDS
  1. S Y(1)=" "_$P(X,U,2),Y=1
  1. S:$L($P(X,U,12)) Y(1)=Y(1)_" Qty: "_$P(X,U,12)
  1. S:$L($P(X,U,11)) Y(1)=Y(1)_" for "_$P(X,U,11)_" days"
  1. D SETMULT(.Y,"SIG")
  1. I Y=1 D
  1. .D SETMULT(.Y,"SIO")
  1. .D SETMULT(.Y,"MDR")
  1. .D SETMULT(.Y,"SCH")
  1. S Y(2)="\ Sig: "_$G(Y(2))
  1. F I=3:1:Y S Y(I)=" "_Y(I)
  1. Q
  1. ; Assembles instructions for an IV order
  1. IVINST(Y) ;
  1. N SOLN1,I
  1. S Y=0
  1. D SETMULT(.Y,"A")
  1. S SOLN1=Y+1
  1. D SETMULT(.Y,"B")
  1. I $D(Y(SOLN1)),$L($P(FIELDS,U,2)) S Y(SOLN1)="in "_Y(SOLN1)
  1. S SOLN1=Y+1
  1. D SETMULT(.Y,"SCH")
  1. S:$D(Y(SOLN1)) Y(SOLN1)=" "_Y(SOLN1)
  1. F I=1:1:Y S Y(I)="\"_$TR(Y(I),U," ")
  1. S:$D(Y(1)) Y(1)=" "_$E(Y(1),2,999)
  1. S Y(Y)=Y(Y)_" "_$P(FIELDS,U,3)
  1. Q
  1. ; Assembles instructions for a home med
  1. NVINST(Y) ;
  1. N I
  1. S Y(1)=" "_$P(FIELDS,U,2),Y=1
  1. D SETMULT(.Y,"SIG")
  1. I Y=1 D
  1. .D SETMULT(.Y,"SIO")
  1. .D SETMULT(.Y,"MDR")
  1. .D SETMULT(.Y,"SCH")
  1. S Y(2)="\ "_$G(Y(2))
  1. F I=3:1:Y S Y(I)=" "_Y(I)
  1. Q
  1. ; Assembles start date and reasons for a home med
  1. NVSTATE(Y,NVSDT) ;
  1. N ORN
  1. S ORN=+$P(FIELDS,U,8)
  1. I $D(^OR(100,ORN,0)) D
  1. .S NVSDT=$P(^OR(100,ORN,0),U,8)
  1. .D WPVAL(.Y,ORN,"STATEMENTS")
  1. Q
  1. ; Return Non-VA med validate order action
  1. NVOA() ;EP -
  1. N ORN,OA
  1. S ORN=+$P(FIELDS,U,8)
  1. S OA=$P($G(^OR(100,ORN,8,1,0)),U,2)
  1. Q $S(OA="VA":OA,1:"")
  1. ; Return status for home med
  1. NVSTS(IFN,STS) ;EP -
  1. N OSTS
  1. S OSTS=$$GET1^DIQ(100,IFN,5,"I")
  1. Q $S((OSTS>21399)!(OSTS=3):$$GET1^DIQ(100.01,OSTS,.01),1:STS)
  1. ; Return word processing value
  1. WPVAL(Y,ORN,ID) ;
  1. N DA,I,J
  1. S DA=+$O(^OR(100,ORN,4.5,"ID",ID,0)),(I,J)=0
  1. F S I=$O(^OR(100,ORN,4.5,DA,2,I)) Q:'I S J=J+1,Y(J)=^(I,0)
  1. Q
  1. ; Appends the multiple at the subscript to Y
  1. SETMULT(Y,SUB) ;
  1. N I
  1. S I=0
  1. F S I=$O(^TMP("PS",$J,INDEX,SUB,I)) Q:'I D
  1. .S Y=Y+1,Y(Y)=^TMP("PS",$J,INDEX,SUB,I,0)
  1. Q
  1. ; Return hold reason
  1. HLDRSN(ORIFN) ;
  1. N RSN,PSIFN,X
  1. S X=$O(^OR(100,+ORIFN,8,"C","HD",""),-1)
  1. S:$O(^OR(100,+ORIFN,8,"C","RL",X)) X=""
  1. S RSN=$S('X:"",1:$G(^OR(100,+ORIFN,8,X,1)))
  1. S PSIFN=$$GETPSIFN(ORIFN)
  1. I PSIFN=+PSIFN D
  1. .S X=$$GET1^DIQ(52,PSIFN,99.1)
  1. .S:'$L(X) X=$$GET1^DIQ(52,PSIFN,99),X=$S($E(X,1,5)="OTHER":"",1:X)
  1. .S:$L(X) RSN=X
  1. Q "Hold Reason: "_$S($L(RSN):RSN,1:"Not specified")
  1. ; Return chronic med flag from order IFN
  1. GETCMF1(ORIFN) ;EP
  1. N PSIFN
  1. S PSIFN=$$GETPSIFN(ORIFN)
  1. Q:PSIFN=+PSIFN $$GET1^DIQ(52,PSIFN,9999999.02)["Y"
  1. Q $$VALUE^ORCSAVE2(+ORIFN,"CMF")["Y"
  1. ; Return clinical indication from order IFN
  1. GETIND(ORIFN) ;EP
  1. N PSIFN,ICD,TXT
  1. S PSIFN=$$GETPSIFN(ORIFN)
  1. I PSIFN=+PSIFN D
  1. .S TXT=$$GET1^DIQ(52,PSIFN,9999999.21)
  1. .S ICD=$$GET1^DIQ(52,PSIFN,9999999.22)
  1. E D
  1. .S TXT=$$VALUE^ORCSAVE2(+ORIFN,"CLININD")
  1. .S ICD=$$VALUE^ORCSAVE2(+ORIFN,"CLININD2")
  1. Q $S($L(TXT)!$L(ICD):ICD_"~"_TXT,1:"")
  1. ; Return dispense as written (DAW) flag from order IFN
  1. GETDAW(ORIFN) ;EP
  1. N PSIFN,DAW
  1. S PSIFN=$$GETPSIFN(ORIFN)
  1. I PSIFN=+PSIFN S DAW=$$GET1^DIQ(52,PSIFN,9999999.25,"I")
  1. E S DAW=$$VALUE^ORCSAVE2(+ORIFN,"DAW")
  1. Q $S(DAW=7:1,DAW>1:0,1:+DAW)
  1. ; Return NDC value associated with Prescription
  1. GETNDC(ORIFN) ;EP
  1. N PSIFN,NDC
  1. S NDC=""
  1. S PSIFN=$$GETPSIFN(ORIFN)
  1. S:PSIFN=+PSIFN NDC=$$NDCVAL^APSPFUNC(PSIFN)
  1. Q NDC
  1. ; Return RXNORM value associated with NDC
  1. GETRXNRM(ORIFN,PSIFN) ;EP
  1. N RXNORM,NDC,DRUG
  1. S RXNORM=""
  1. S PSIFN=$G(PSIFN,$$GETPSIFN(ORIFN))
  1. I PSIFN=+PSIFN D
  1. .;EHR 13 changes made to get Rxnorm from prescription
  1. .S RXNORM=$$GET1^DIQ(52,PSIFN,9999999.27,"I")
  1. .;S NDC=$TR($$NDCVAL^APSPFUNC(PSIFN),"-","")
  1. .;Q:'$L(NDC)
  1. .;S RXNORM=+$O(^C0CRXN(176.002,"NDC",NDC,0))
  1. .;S RXNORM=$$GET1^DIQ(176.002,RXNORM,.01)
  1. Q RXNORM
  1. ; Return process state of E, Q, P, or I
  1. PSTATE(PSIFN) ;EP-
  1. N RES,ATF,PMY,PRT,LACT
  1. S RES=""
  1. S ATF=$$GET1^DIQ(52,PSIFN,9999999.23,"I") ;autofinish
  1. S PMY=$$GET1^DIQ(52,PSIFN,9999999.24,"I") ;pharmacy
  1. I 'ATF S RES="I"
  1. E D
  1. .S PRT=$$CKRXACT^APSPFNC6(PSIFN,"B","PR")
  1. .I PMY D
  1. ..; if pharmacy and either transmitted or failed to transmit and no print then return E
  1. ..; else
  1. ..I $$CKRXACT^APSPFNC6(PSIFN,"X","T")!($$CKRXACT^APSPFNC6(PSIFN,"X","F"))!($$CKRXACT^APSPFNC6(PSIFN,"X","U"))&('PRT) D ;S RES="E"
  1. ...;I 'PRT D
  1. ...S LACT=$$LASTACT^APSPFNC6(PSIFN,"X")
  1. ...S RES=$S(LACT="F":"F",LACT="T":"E",LACT="X":"E",LACT="U":"S",1:"")
  1. ..E S RES=$S(PRT:"P",1:"Q")
  1. .E D
  1. ..S RES=$S(PRT:"P",1:"Q")
  1. Q RES
  1. ; Return external pharmacy information
  1. EPHARM(PSIFN) ;EP-
  1. Q $$GET1^DIQ(52,PSIFN,9999999.24,"I")_";"_$$GET1^DIQ(52,PSIFN,9999999.24)
  1. ; Get pharmacy IFN from order IFN
  1. GETPSIFN(ORIFN) ;
  1. N PKG,PSIFN
  1. S PKG=+$P($G(^OR(100,+ORIFN,0)),U,14),PSIFN=$P($G(^(4)),U)
  1. Q $S('PSIFN!(PKG'=$O(^DIC(9.4,"C","PSO",0))):"",1:PSIFN)
  1. ; RPC: BEHORXFN SETCMF
  1. ; Set chronic med flag for one or more prescriptions
  1. ; DFN = Patient IEN
  1. ; RXS = Order ID or list of order IDs
  1. ; CMF = New value for chronic med flag (0 or 1)
  1. ; DATA returned as list in format:
  1. ; OrderID^Error Text (null if no error)
  1. SETCMF(DATA,DFN,RXS,CMF) ;EP
  1. N LP,FDA,FDX,ERR,PLC,ORIFN,IDS,X
  1. S:$L($G(RXS)) RXS(-1)=RXS
  1. S LP="",PLC=0
  1. F S LP=$O(RXS(LP)) Q:'$L(LP) D SETCMF1(RXS(LP))
  1. D:$D(FDA) UPDATE^DIE("E","FDA",,"ERR")
  1. F S LP=$O(ERR("DIERR",LP)) Q:'LP D
  1. .S ORIFN=FDX($G(ERR("DIERR",LP,"PARAM","FILE"),100.045),ERR("DIERR",LP,"PARAM","IENS"))
  1. .D ADDERR(ERR("DIERR",LP,"TEXT",1))
  1. Q
  1. ; Set CMF flag in FDA array for specified order and associated script
  1. SETCMF1(ORIFN) ;
  1. N PSIFN,OK
  1. S IDS(ORIFN)=LP,DATA(LP)=ORIFN
  1. I $P($G(^OR(100,+ORIFN,0)),U,2)'=(DFN_";DPT(") D Q
  1. .D ADDERR("Prescription does not belong to current patient.")
  1. S PSIFN=$$GETPSIFN(ORIFN)
  1. D:PSIFN=+PSIFN ADDFDA(52,PSIFN_",",9999999.02) ; Set CMF on script
  1. S OK=+$O(^OR(100,+ORIFN,4.5,"ID","CMF",0)) ; Find CMF prompt on order
  1. I OK D ; If prompt found, change response
  1. .D ADDFDA(100.045,OK_","_+ORIFN_",",1)
  1. E D ; Else add prompt and set response
  1. .N X,DLG,PMT,CMI,CMN,IENS
  1. .S DLG=$P($G(^OR(100,+ORIFN,0)),U,5)
  1. .Q:DLG'[";ORD(101.41,"
  1. .S DLG=+DLG,CMI=+$O(^ORD(101.41,"B","OR GTX CMF",0))
  1. .S CMN=$O(^ORD(101.41,DLG,10,"D",CMI,0))
  1. .Q:'CMN
  1. .S PLC=PLC+1,IENS="+"_PLC_","_+ORIFN_",",OK=1
  1. .S FDA(100.045,IENS,.01)=CMN
  1. .S FDA(100.045,IENS,.02)="`"_CMI
  1. .S FDA(100.045,IENS,.03)=1
  1. .S FDA(100.045,IENS,.04)="CMF"
  1. .D ADDFDA(100.045,IENS,1)
  1. D:'OK ADDERR("Cannot set chronic med status on this order.")
  1. Q
  1. ; Add to FDA array
  1. ADDFDA(FN,IENS,FLD) ;
  1. S FDA(FN,IENS,FLD)=$S(CMF:"Y",1:"N"),FDX(FN,IENS)=ORIFN
  1. Q
  1. ; Add error text
  1. ADDERR(TXT) ;
  1. S DATA(IDS(ORIFN))=ORIFN_U_TXT
  1. Q
  1. ; Get list of active/pending med orders for order checking
  1. OCALL(DATA,DFN) ;EP
  1. N CNT,OBJ,ORIEN,ORLOG,X,ST
  1. S OBJ=DFN_";DPT(",(CNT,ORLOG)=0,DATA=$$TMPGBL^CIAVMRPC
  1. F S ORLOG=$O(^OR(100,"AC",OBJ,ORLOG)) Q:'ORLOG D
  1. .S ORIEN=0
  1. .F S ORIEN=$O(^OR(100,"AC",OBJ,ORLOG,ORIEN)) Q:'ORIEN D
  1. ..Q:$D(@DATA@(0,ORIEN))
  1. ..S @DATA@(0,ORIEN)=""
  1. ..S X=$G(^OR(100,ORIEN,0)),ST=$P($G(^(3)),U,3)
  1. ..I ST'=5,ST'=6,ST'=11 Q
  1. ..Q:$P(X,U,2)'=OBJ
  1. ..S PKG=$$GET1^DIQ(9.4,$P(X,U,14),1)
  1. ..Q:$E(PKG,1,2)'="PS"
  1. ..S CNT=CNT+1,@DATA@(CNT)=ORIEN
  1. K @DATA@(0)
  1. Q
  1. ; Cleanup PCC Link in NVA node
  1. CLNNVA ;EP -
  1. Q:$$PATCH^XPDUTL("APSP*7.0*1009")
  1. N DFN,IEN,FDA,NVAERR
  1. S DFN=0 F S DFN=$O(^PS(55,"APCC","+1",DFN)) Q:'DFN D
  1. .S IEN=0 F S IEN=$O(^PS(55,"APCC","+1",DFN,IEN)) Q:'IEN D
  1. ..S FDA(55.05,IEN_","_DFN_",",9999999.11)="@"
  1. D:$D(FDA) UPDATE^DIE("","FDA",,"NVAERR")
  1. Q
  1. ; Returns boolean flag indicating if order is Order For Signature
  1. ORDFSIG(ORIFN) ;EP-
  1. N ORD
  1. S ORD=$G(^OR(100,ORIFN,4))
  1. Q (ORD?.N1"S")&($P($G(^OR(100,ORIFN,3)),U,3)=5)
  1. ; Returns string containing vital measurement
  1. ; Date/time^Imperial value^Metric value
  1. VITALFMT(DATA,DFN,TYP) ;EP-
  1. S DATA=""
  1. Q:'$G(DFN)
  1. Q:'$L($G(TYP))
  1. S DATA=$$VITALF^APSPFUNC(DFN,TYP)
  1. S DATA=$P(DATA,U)_U_$P(DATA,U,8,9)
  1. Q