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

APSPES4.m

Go to the documentation of this file.
  1. APSPES4 ;IHS/MSC/PLS - SureScripts HL7 interface - con't;19-Oct-2015 14:30;DU
  1. ;;7.0;IHS PHARMACY MODIFICATIONS;**1016,1017,1018,1020**;Sep 23, 2004;Build 7
  1. ; Return array of message data
  1. ; Input: MIEN - IEN to HLO MESSAGES and HLO MESSAGE BODY files
  1. ; Output: DATA
  1. ; HLMSTATE
  1. ;Handle the extra segment data from APSPES1
  1. ; Create RXR segment
  1. RXR ;EP
  1. N RX6
  1. D SET(.ARY,"RXR",0)
  1. S RX6=$O(^PSRX(RXIEN,6,0))
  1. I RX6 D
  1. .S RX6=^PSRX(RXIEN,6,RX6,0)
  1. .D SET(.ARY,$S($P(RX6,U,7):$$GROUTE^APSPES1($P(RX6,U,7)),1:"OTH"),1)
  1. S RX6=$$ADDSEG^HLOAPI(.HLST,.ARY)
  1. Q
  1. RXC ;Do the RXC segment
  1. N DIEN
  1. S DIEN=$P(RX0,U,6)
  1. ;This means its a compounding medication
  1. I $P($G(^PSDRUG(DIEN,999999935)),U,1)=1 D CMP
  1. Q
  1. CMP ; Get compound data
  1. N ING,NODE,CDRUG,CNDC,IND,AMT,UNIT,STR,SUNIT,RXNORM,RXCOM
  1. S ING=0 F S ING=$O(^PSDRUG(DIEN,999999936,ING)) Q:'+ING D
  1. .S NODE=$G(^PSDRUG(DIEN,999999936,ING,0))
  1. .S CDRUG=$P(NODE,U,1)
  1. .S CNDC=$$NDC(CDRUG)
  1. .S IND=$P(NODE,U,4)
  1. .S AMT=$P(NODE,U,2)
  1. .S UNIT=$P($G(^PS(50.607,$P(NODE,U,3),0)),U,1)
  1. .S IND=$S(IND=1:"B",1:"A")
  1. .D SET(.ARY,"RXC",0)
  1. .D SET(.ARY,IND,1,1) ;Additive/Base field
  1. .D SET(.ARY,CNDC,2,1) ; NDC Value
  1. .D SET(.ARY,$$GET1^DIQ(50,CDRUG,.01),2,2) ; Drug Name
  1. .D SET(.ARY,"NDC",2,3) ; Coding System
  1. .D SET(.ARY,AMT,3,1) ; Amt
  1. .D SET(.ARY,UNIT,4,1) ; Units
  1. .S SUNIT=$$GET1^DIQ(50,CDRUG,14.5,"E")
  1. .S STR=$$GET1^DIQ(50,CDRUG,901,"E")
  1. .D SET(.ARY,STR,5,1) ;Strength
  1. .D SET(.ARY,SUNIT,6,1) ;Strength Units
  1. .;I CNDC'="" D
  1. .S RXNORM=$$RXNORDRG^APSPFNC1(DIEN)
  1. .D SET(.ARY,RXNORM,7,1) ;RxNorm as alt id
  1. .D SET(.ARY,"RXNORM",7,3) ;Code List
  1. .S RXCOM=$$ADDSEG^HLOAPI(.HLST,.ARY)
  1. Q
  1. AL1 ;EP Send an AL1 segment
  1. N AL1,RESULT,CNT,ALL,APSPAL,CT
  1. D GETADR^APSPESAL(.RESULT,DFN,"A",.AL1)
  1. I $D(RESULT)'>9 D Q
  1. .I $D(AL1),AL1=0 S ALL="NKA"
  1. .E S ALL="UNKNOWN"
  1. .D SET(.ARY,"AL1",0)
  1. .D SET(.ARY,"1",1)
  1. .D SET(.ARY,"DA",2)
  1. .D SET(.ARY,ALL,3)
  1. .S AL1=$$ADDSEG^HLOAPI(.HLST,.ARY)
  1. S CT=0,APSPAL=0
  1. F S APSPAL=$O(RESULT(APSPAL)) Q:+APSPAL'>0 D
  1. .S CT=CT+1
  1. .D SET(.ARY,"AL1",0)
  1. .D SET(.ARY,CT,1)
  1. .D SET(.ARY,$P(RESULT(APSPAL),U,11),2)
  1. .D SET(.ARY,$P(RESULT(APSPAL),U,3),3)
  1. .D SET(.ARY,$P(RESULT(APSPAL),U,9),4)
  1. .D SET(.ARY,$P(RESULT(APSPAL),U,10),5)
  1. .D SET(.ARY,$P(RESULT(APSPAL),U,4),6)
  1. .S AL1=$$ADDSEG^HLOAPI(.HLST,.ARY)
  1. Q
  1. ; Create DG1 segment
  1. DG1 ;EP
  1. N CICODE,CITXT,DG1,ICDNAME,ICDTYPE,Z
  1. S CICODE=$$GET1^DIQ(52,RXIEN,9999999.22) ; Clinical Indicator code
  1. Q:'$L(CICODE)
  1. S CICODE=$P(CICODE,";") ;P1020 - use first ICD
  1. D SET(.ARY,"DG1",0)
  1. D SET(.ARY,"1",1)
  1. D SET(.ARY,CICODE,3)
  1. I $$AICD D
  1. .S Z=$$ICDDX^ICDEX(CICODE,DT)
  1. .S ICDNAME=$P(Z,U,4)
  1. .S ICDTYPE=$S($P(Z,U,20)=1:"I9",$P(Z,U,20)=30:"I10",1:"")
  1. E D
  1. .S ICDNAME=$P($$ICDDX^ICDCODE(CICODE,DT),U,4)
  1. .S ICDTYPE="I9"
  1. D SET(.ARY,ICDNAME,3,2) ; Clinical Indicator text
  1. D SET(.ARY,ICDTYPE,3,3) ; Name of coding system
  1. D SET(.ARY,"RX",6) ; Diagnosis type - Prescription (RX)
  1. S DG1=$$ADDSEG^HLOAPI(.HLST,.ARY)
  1. Q
  1. ;
  1. SET(ARY,V,F,C,S,R) ;EP
  1. D SET^HLOAPI(.ARY,.V,.F,.C,.S,.R)
  1. Q
  1. FNDORD(MSGIEN) ;Find the orderable item for this request
  1. N ORITM,RXNORM,NDC,NNDC,I,DRNM,POICT
  1. S (NDC,RXNORM,ORITM)=""
  1. S RXNORM=$$GETVAL^APSPES2(MSGIEN,"RXO",24,1)
  1. I RXNORM="" S RXNORM=$$GETVAL^APSPES2(MSGIEN,"RXE",31,1)
  1. I RXNORM'="" D
  1. .S I="" F S I=$O(^C0CRXN(176.002,"B",RXNORM,I)) Q:I=""!(ORITM'="") D
  1. ..S NNDC=$P($G(^C0CRXN(176.002,I,0)),U,3)
  1. ..I NNDC'="" S ORITM=$$FNDDRG(NNDC)
  1. I ORITM="" D
  1. .S NDC=$$GETVAL^APSPES2(MSGIEN,"RXO",1,1)
  1. .I NDC'="" S ORITM=$$FNDDRG(NDC)
  1. ;If all this still fails, try a name lookup
  1. I ORITM="" D
  1. .S DRNM=$$GETVAL^APSPES2(MSGIEN,"RXO",1,2)
  1. .S ORITM=$$DRGNMOI($$UP^XLFSTR(DRNM))
  1. Q ORITM
  1. FNDDRG(NDC) ;Get the drug, and orderable items
  1. N DRG,OI,ID
  1. S OI=""
  1. S DRG="" F S DRG=$O(^PSDRUG("ZNDC",NDC,DRG)) Q:DRG=""!(OI'="") D
  1. .S OI=$$FNDOI(DRG)
  1. I OI="" S OI=$$PRODNDC(NDC)
  1. I OI="" D
  1. .I $L(NDC=11) D
  1. ..S NDC="0"_NDC
  1. ..S OI=$$PRODNDC(NDC)
  1. Q OI
  1. ;Try the lookup from the VA PRODUCT FILE
  1. PRODNDC(NDC) ;product NDC
  1. N VA,PROD,OI2
  1. S OI2=""
  1. S VA="" S VA=$O(^PSNDF(50.67,"NDC",NDC,VA))
  1. I VA="" Q OI2
  1. S PROD=$$GET1^DIQ(50.67,VA,5,"E")
  1. S PROD=$E(PROD,1,30)
  1. S DRG="" F S DRG=$O(^PSDRUG("VAPN",PROD,DRG)) Q:DRG=""!(OI'="") D
  1. .S OI2=$$FNDOI(DRG)
  1. Q OI2
  1. FNDOI(DRG) ;find orderable item from drug
  1. N POI,OI
  1. S OI=""
  1. S POI=$P($G(^PSDRUG(DRG,2)),U,1)
  1. I POI'="" D
  1. .Q:$$GET1^DIQ(50.7,POI,.04)
  1. .S ID=POI_";99PSP"
  1. .S OI="" S OI=$O(^ORD(101.43,"ID",ID,OI))
  1. Q OI
  1. NMPOI(DRNM) ;Match on name
  1. N POICT,POI,POIARR,OI3,ID
  1. S POICT=0,OI3=""
  1. S POI="" F S POI=$O(^PS(50.7,"B",DRNM,POI)) Q:POI="" D
  1. .S POICT=POICT+1
  1. .S POIARR(POICT)=POI
  1. ;Only allowed one match so that we can't have different dose forms
  1. I POICT=1 D
  1. .S POI=$G(POIARR(POICT))
  1. .Q:$$GET1^DIQ(50.7,POI,.04)
  1. .S ID=POI_";99PSP"
  1. .S OI3="" S OI3=$O(^ORD(101.43,"ID",ID,OI3))
  1. Q OI3
  1. ; Match on Drug File entries
  1. DRGNMOI(DNM) ;EP-
  1. N IEN,LNM,NM,UDNM,OI,CDNM,POI
  1. S UDNM=$$UP^XLFSTR(DNM)
  1. S OI=0
  1. S IEN=0 F S IEN=$O(^PSDRUG(IEN)) Q:'IEN!OI D
  1. .Q:$G(^PSDRUG(IEN,"I")) ;inactive drug
  1. .S LNM=$P($G(^PSDRUG(IEN,999999935)),U,2)
  1. .S NM=$P($G(^PSDRUG(IEN,0)),U)
  1. .S CDNM=$$UP^XLFSTR($S($L(LNM):LNM,1:NM))
  1. .Q:CDNM'=UDNM ;names must match
  1. .S POI=$P($G(^PSDRUG(IEN,2)),U)
  1. .Q:'POI ;no linked pharmacy orderable item
  1. .Q:$$GET1^DIQ(50.7,POI,.04) ;POI is inactive
  1. .S OI=$O(^ORD(101.43,"ID",POI_";99PSP",OI))
  1. Q OI
  1. GETDSP(RET,IEN) ;Get the dispensed data from the Refill request IEN
  1. N I,MSGID,HLMSG,DCODE,DRG,DCODEQ,DSIG,DSUP,DQTY,DREFILL,DDRUG,HLECH,DDRG,DEL,DDATE
  1. N APSPPID,APSPDG1,APSPRXE,APSPRXO,APSPORC,APSPRXO,APSPRXE,APSPRXR,APSPRXD,APSPMSG,APSPDG1,NOTES
  1. S HLECH="^~\&"
  1. F I=1:1:4 D
  1. .S HLECH(I)=$E(HLECH,I)
  1. S MSGID=$$GET1^DIQ(9009033.91,IEN,.01,"E"),HLMSG=$$GHLDAT^APSPESG1(IEN)
  1. S DEL="|"
  1. D SHLVARS^APSPESG
  1. S DCODE=$P($P(APSPRXD,DEL,3),HLECH(1),1)
  1. S DRG=$P($P(APSPRXD,DEL,3),HLECH(1),2)
  1. S DCODEQ=$P($P(APSPRXD,DEL,3),HLECH(1),3)
  1. S DDRG=DRG_$S($L(DCODE):" ("_DCODEQ_":"_DCODE_")",1:"")
  1. S DSIG=$P($P(APSPRXD,DEL,10),HLECH(1),1)
  1. S DSUP=$P($P(APSPRXD,DEL,23),HLECH(1),1)
  1. S DQTY=$P($P(APSPRXD,DEL,5),HLECH(1),1)
  1. S DDATE=$$FMTE^XLFDT($$FMDATE^HLFNC($P($P(APSPRXD,DEL,4),HLECH(1),1)),"5DZ0")
  1. S DREFILL=$P($P(APSPRXD,DEL,9),HLECH(1),1)
  1. S NOTES=$P($P(APSPRXD,DEL,16),HLECH(1),2)
  1. ;S RET=DRG_" "_DSIG_" Days Supply: "_DSUP_" QTY: "_DQTY_" Dt Written: "_DDATE
  1. S RET=DRG_" "_DSIG
  1. I NOTES'="" S RET=RET_" Notes: "_NOTES
  1. Q
  1. CHKNME(MSGIEN) ;Check names if there is no order
  1. N HLNAME,HFNAME,HLDOB,HLSEX,MATCH,AGE,PT,SEX,NAME,FIRSTN,LOOK
  1. ;Match on birth dates and last names
  1. S MATCH=0
  1. D HLPID
  1. S LOOK=HLNAME
  1. F S LOOK=$O(^DPT("B",LOOK)) Q:LOOK=""!(MATCH>0) D
  1. .Q:($P(LOOK,",")'=HLNAME)
  1. .S PT=""
  1. .F S PT=$O(^DPT("B",LOOK,PT)) Q:PT=""!(MATCH>0) D
  1. ..S NAME=$$GET1^DIQ(2,PT,.01)
  1. ..S FIRSTN=$P($P(NAME,",",2)," ",1)
  1. ..Q:FIRSTN'=HFNAME
  1. ..S AGE=$$GET1^DIQ(2,PT,.03,"I")
  1. ..S AGE=$$HLDATE^HLFNC(AGE,"DT")
  1. ..S SEX=$$GET1^DIQ(2,PT,.02,"I")
  1. ..I AGE=HLDOB&(SEX=HLSEX) S MATCH=PT
  1. Q MATCH
  1. CHKOPT(PAT) ;Find the match for the order patient
  1. N HL7NAME,HLNAME,HFNAME,HLDOB,HLSEX,MATCH,AGE,LASTN,FIRSTN,NAME
  1. S MATCH=0
  1. D HLPID
  1. S NAME=$$GET1^DIQ(2,PAT,.01)
  1. S HL7NAME=$$HLNAME^HLFNC(NAME,"^")
  1. S LASTN=$P(HL7NAME,U)
  1. S FIRSTN=$P(HL7NAME,U,2)
  1. I (LASTN=HLNAME)&(FIRSTN=HFNAME) S MATCH=PAT
  1. Q MATCH
  1. HLPID ;Find the hl7 name data
  1. S HLNAME=$$UP^XLFSTR($$GETVAL^APSPES2(MSGIEN,"PID",5,1))
  1. S HFNAME=$$UP^XLFSTR($$GETVAL^APSPES2(MSGIEN,"PID",5,2))
  1. S HLDOB=$$GETVAL^APSPES2(MSGIEN,"PID",7)
  1. I $L(HLDOB)>8 S HLDOB=$E(HLDOB,1,8)
  1. S HLSEX=$$GETVAL^APSPES2(MSGIEN,"PID",8)
  1. Q
  1. CHKDRG(MSGIEN,RXIEN) ;Check the drug
  1. N HLOI,RXOI,DRG
  1. S HLOI=$$FNDORD(MSGIEN)
  1. S DRG=$P($G(^PSRX(RXIEN,0)),U,6)
  1. S RXOI=$$FNDOI(DRG)
  1. Q $S(RXOI=HLOI:RXOI,1:0)
  1. ; APSPES4 SNDE900 RPC Support
  1. SNDE900(RET,RRIEN) ;EP-
  1. D ERR900($P(RRIEN,":",2),"Request has already been viewed.")
  1. S RET=1
  1. Q
  1. ; Send error message back
  1. ERR900(RR,MSGTXT) ;EP-
  1. N PARMS,ACK,ERR,HLMSGIEN,HLMSTATE,ACT,SEG
  1. K ACK
  1. S ACT=$$GET1^DIQ(9009033.91,RR,.08,"I")
  1. S OCC=$S($G(OCC):OCC,ACT=3:"RP",ACT=4:"DF",1:"DF")
  1. S HLMSGIEN=$$GET1^DIQ(9009033.91,RR,.05) ; Message ID
  1. Q:'HLMSGIEN
  1. S PARMS("ACK CODE")="AE"
  1. S PARMS("MESSAGE TYPE")="RRE"
  1. S PARMS("EVENT")="O12"
  1. S PARMS("VERSION")=2.5
  1. S PARMS("ACCEPT ACK TYPE")="AL"
  1. S PARMS("ERROR MESSAGE")=MSGTXT
  1. D PARSE^APSPES2(.DATA,HLMSGIEN,.HLMSTATE)
  1. S HLFS=$G(DATA("HDR","FIELD SEPARATOR"))
  1. S HLECH=HLMSTATE("HDR","ENCODING CHARACTERS")
  1. Q:'$$ACK^HLOAPI2(.HLMSTATE,.PARMS,.ACK,.ERR)
  1. D SET^HLOAPI(.SEG,"ERR",0)
  1. D SET^HLOAPI(.SEG,MSGTXT,8)
  1. Q:'$$ADDSEG^HLOAPI(.ACK,.SEG)
  1. I '$$SENDACK^HLOAPI2(.ACK,.ERR) D UPTRRACT^APSPES3(RR,$G(ERR,"There was a problem sending the HL7 message."))
  1. Q
  1. ; Generate Renew Order
  1. GENRENEW(MSGIEN,RXIEN,OPRV,REFILL,RRIEN) ;EP -
  1. N ORIFN,VAL,DFN,LOC,RET,FLDS,ORLST,DEA,RXSTS,PAT,ORDERPT,HLITM
  1. Q:'RXIEN "0^Prescription IEN not provided."
  1. S VAL=""
  1. S DFN=$P($G(^PSRX(RXIEN,0)),U,2)
  1. Q:'DFN "0^Patient not found for supplied prescription IEN."
  1. S ORIFN=+$P($G(^PSRX(RXIEN,"OR1")),U,2)
  1. S RXSTS=$$GET1^DIQ(52,RXIEN,100,"I")
  1. I ",12,14,15,"[(","_RXSTS_",") S VAL="Original order has been discontinued."
  1. D:VAL="" VALID^ORWDXA(.VAL,ORIFN,"RN",OPRV)
  1. ;TODO - GENERATE DENIAL MESSAGE
  1. Q:$L(VAL) 0_U_VAL ; Order can't be renewed. VAL contains refusal explanation
  1. K VAL
  1. S ORLST(1)=ORIFN
  1. D RENEW^ORWDXC(.VAL,DFN,.ORLST)
  1. S LOC=+$P($G(^OR(100,ORIFN,0)),U,10)
  1. D RNWFLDS^ORWDXR(.RET,ORIFN)
  1. S FLDS(1)=$G(RET(0))
  1. S $P(FLDS(1),U,6)=$$GET1^DIQ(9009033.91,RRIEN,1.7,"I") ; Set Pharmacy
  1. S FLDS("ORCHECK")=0
  1. S:$G(RRIEN) FLDS("SSRREQIEN")=$G(RRIEN)
  1. S FLDS("SSREFREQ")=1
  1. D PREPPTXT^APSPES2($NA(FLDS("SSREFREQ")),$G(RRIEN))
  1. S DEA=$$DEA^APSPES2($P($G(^PSRX(RXIEN,0)),U,6))
  1. ;S $P(FLDS(1),U,4)=$S($$DEACLS(DEA,"2345"):0,REFILL:1,1:0) ; Refill
  1. S $P(FLDS(1),U,4)=$$GET1^DIQ(9009033.91,RRIEN,1.9)-1 ; Refills equal Fills -1
  1. S FLDS(2)=$$GET1^DIQ(9009033.91,RRIEN,4.1) ; Notes to Pharmacist
  1. K RET
  1. D RENEW^ORWDXR(.RET,.ORIFN,DFN,OPRV,LOC,.FLDS)
  1. ;CHECK ORIFN FOR NEW ORDER
  1. D:$G(ORIFN) EN^OCXOERR(DFN_U_+ORIFN_U_OPRV_"^^^^^1")
  1. Q +$P($P($G(RET(1)),U),"~",2)
  1. ;
  1. ;Check to see if SSNUM already exists
  1. CHKSSNUM(SSNUM) ;EP-
  1. N ORGIEN
  1. S ORGIEN=$O(^APSPRREQ("G",SSNUM,0))
  1. Q:'ORGIEN 0
  1. Q ORGIEN
  1. ; Add related item to parent
  1. SETDUP(P,C) ;EP-
  1. N FDA,ERR,IENS
  1. S IENS="+1,"_P_","
  1. S FDA(9009033.919,IENS,.01)=C
  1. D UPDATE^DIE("","FDA")
  1. Q
  1. ;Compare SIG of PON Request with HL7 SIG
  1. COMPSIG(RET,ORIEN,RRIEN) ;EP
  1. N MATCH,SIG,TXT,RXTXT,STR,DEL,HLMSG,MSGID,HLECH,I,RXIEN
  1. S RET=0
  1. S HLECH="^~\&"
  1. S RRIEN=$G(RRIEN,0)
  1. I 'RRIEN S RET=1 Q
  1. S RXIEN=$$GET1^DIQ(9009033.91,RRIEN,.06,"I")
  1. I 'RXIEN S RET=1 Q
  1. F I=1:1:4 D
  1. .S HLECH(I)=$E(HLECH,I)
  1. S RXTXT="",RETXT=""
  1. ;S SIG=+$O(^OR(100,+ORIEN,4.5,"ID","SIG",0))
  1. S TXT=0 F S TXT=$O(^PSRX(RXIEN,"SIG1",TXT)) Q:'+TXT D
  1. .S STR=$G(^PSRX(RXIEN,"SIG1",TXT,0))
  1. .S RXTXT=RXTXT_STR
  1. S MSGID=$$GET1^DIQ(9009033.91,RRIEN,.01,"E"),HLMSG=$$GHLDAT^APSPESG1(RRIEN)
  1. S DEL="|"
  1. D SHLVARS^APSPESG
  1. S RETXT=$P($P(APSPRXO,DEL,8),HLECH(1),2)
  1. I RXTXT=RETXT S RET=1
  1. Q
  1. ;;Add patient instructions and compare
  1. ;S PITXT=$$PITXT(ORIEN)
  1. ;I $L(PITXT) D
  1. ;.S ORTXT=ORTXT_" "_PITXT
  1. ;.I ORTXT=RETXT S RET=1
  1. ;Q
  1. ; Return PITXT
  1. PITXT(ORIEN) ;EP-
  1. N PI,TXT,STR,PITXT
  1. S PITXT=""
  1. S PI=+$O(^OR(100,+ORIEN,4.5,"ID","PI",0))
  1. S TXT=0 F S TXT=$O(^OR(100,+ORIEN,4.5,PI,2,TXT)) Q:'+TXT D
  1. .S STR=$G(^OR(100,+ORIEN,4.5,PI,2,TXT,0))
  1. .S PITXT=PITXT_STR
  1. Q PITXT
  1. ; Return NDC code for Drug File Entry
  1. NDC(DRG) ; EP -
  1. ;1016 IHS/MSC/MGH Updated to get NDF from PSNDF file
  1. N NDF,CODE
  1. S CODE=""
  1. S NDF=$P($G(^PSDRUG(DRG,"ND")),U,3)
  1. I NDF'="" S CODE=$P($G(^PSNDF(50.68,NDF,1)),U,7)
  1. I CODE="" S CODE=$TR($P($G(^PSDRUG(DRG,2)),U,4),"-","")
  1. S:$L(CODE)=12 CODE=$E(CODE,2,12)
  1. Q CODE
  1. ;
  1. BADORP ; EP - Send bulletin regarding bad ORP acknowledgement message
  1. S MSG(1)="HL7 Message "_$G(^HLB(MSGIEN,1))_$G(^HLB(MSGIEN,2))
  1. S MSG(2)=" "
  1. S MSG(3)="did not receive a valid NEWRX acknowledgement."
  1. S MSG(4)=" "
  1. S MSG(5)="Acknowledgement code: "_$G(AACK)
  1. S MSG(6)="Error: "_$G(ERRTXT)
  1. S MSG(7)=" "
  1. S WHO("G.APSP EPRESCRIBING")=""
  1. S:$G(OPRV) WHO(OPRV)=""
  1. D BULL^APSPES2("HL7 ERROR","APSP eRx Interface",.WHO,.MSG)
  1. Q
  1. ; Send Notification to Ordering Provider
  1. ; Input: RXN = IEN to Prescription File
  1. ; MSG = Main message
  1. ; ALRTD = Alert data
  1. ; DFN = Patient IEN (optional)
  1. ; PVDIEN = Provider to received notification (optional)
  1. ; OIEN = Order File IEN
  1. NOTIF(RXN,MSG,ALRTD,DFN,PVDIEN) ;EP
  1. N PNAM,RET
  1. N XQA,XQAID,XQADATA,XQAMSG
  1. S:'$G(DFN) DFN=+$$GET1^DIQ(52,$G(RXN),2,"I")
  1. Q:'DFN
  1. S PNAM=$E($$GET1^DIQ(2,DFN,.01)_" ",1,9)
  1. S XQAMSG=PNAM_" "_"("_$$HRC^APSPFUNC(DFN)_")"
  1. S:'$G(PVDIEN) PVDIEN=$$GET1^DIQ(52,RXN,4,"I") ;TODO - change to Entering Person?
  1. Q:'PVDIEN
  1. S XQA(PVDIEN)=""
  1. S XQAMSG=XQAMSG_$G(MSG)
  1. S XQAID="OR"_","_DFN_","_99003
  1. S XQADATA=$$GET1^DIQ(52,$G(RXN),39.3,"I")_"@"_$G(ALRTD)
  1. D SETUP^XQALERT
  1. Q
  1. AICD() ;EP
  1. Q $S($$VERSION^XPDUTL("AICD")="4.0":1,1:0)