1 | PSOORRDI ;BHAM-ISC/EJW - Remote Data Interoperability Order Checks ;04/25/05
|
---|
2 | ;;7.0;OUTPATIENT PHARMACY;**207,243**;DEC 1997;Build 22
|
---|
3 | ;
|
---|
4 | ;External references to ^ORRDI1 supported by DBIA 4659
|
---|
5 | ;External references to ^XTMP("ORRDI" supported by DBIA 4660
|
---|
6 | ;External reference to ^PS(50.605 supported by DBIA 696
|
---|
7 | ;External reference to ^PSDRUG supported by DBIA 221
|
---|
8 | ;External reference to ^PS(56 supported by DBIA 2229
|
---|
9 | ;External reference to ^PS(50.416 supported by DBIA 692
|
---|
10 | ;External reference to DDIEX^PSNAPIS supported by DBIA 2574
|
---|
11 | REMOTE(PSODFN,DREN) ;
|
---|
12 | ; Input: DFN: PATIENT file (#2) IEN
|
---|
13 | ; : DREN: DRUG file (#50) IEN of order being checked
|
---|
14 | I $T(HAVEHDR^ORRDI1)']"" Q
|
---|
15 | I '$$HAVEHDR^ORRDI1 Q
|
---|
16 | I $D(^XTMP("ORRDI","OUTAGE INFO","DOWN")) Q
|
---|
17 | N PSORDI,RDIINST,RDIVUID,RDIRX,RDIDNAM,RDISTA,RDISIG,RDIDAYS,RDIQTY,RDIFILL,RDIEXP,RDIISS,RDIFILL,RDIREF,RDIPHYS,PSOPROD,PSOCLASS,DRNM,RDITMP,PSODC,IT,PSOICT,NDF,RDIDI,PSOPRODA,PSOFILE,PSOSIG
|
---|
18 | I '$G(DT) S DT=$$DT^XLFDT
|
---|
19 | S PSORDI=0
|
---|
20 | I $T(GET^ORRDI1)]"" S PSORDI=$$GET^ORRDI1(PSODFN,"PSOO")
|
---|
21 | I PSORDI<1 Q
|
---|
22 | I '$D(^XTMP("ORRDI","PSOO",PSODFN)) Q
|
---|
23 | K ^TMP($J,"PSORDI")
|
---|
24 | D PARSE,FILTER
|
---|
25 | I '$D(^TMP($J,"PSORDI")) Q
|
---|
26 | D DRGNAME ; GET VA PRODUCT FILE NAME FOR FILE 50 DRUG BEING CHECKED
|
---|
27 | S PSORDI="" F S PSORDI=$O(^TMP($J,"PSORDI",PSORDI)) Q:'PSORDI S RDITMP=^(PSORDI) D
|
---|
28 | .S RDIINST=$P(RDITMP,"^")
|
---|
29 | .S RDIVUID=$P(RDITMP,"^",2)
|
---|
30 | .I RDIVUID="" Q
|
---|
31 | .S RDIDNAM=$P(RDITMP,"^",3)
|
---|
32 | .S RDISTA=$P(RDITMP,"^",4)
|
---|
33 | .S RDIRX=$P(RDITMP,"^",5)
|
---|
34 | .S RDIFILL=$P(RDITMP,"^",6)
|
---|
35 | .S RDIDAYS=$P(RDITMP,"^",7) I $E(RDIDAYS)="D" S RDIDAYS=$P(RDIDAYS,"D",2)
|
---|
36 | .S RDIQTY=$P(RDITMP,"^",8)
|
---|
37 | .S RDIREF=$P(RDITMP,"^",9)
|
---|
38 | .S RDIEXP=$P(RDITMP,"^",10)
|
---|
39 | .S RDIPHYS=$P(RDITMP,"^",11)
|
---|
40 | .S RDIISS=$P(RDITMP,"^",12)
|
---|
41 | .S DRNM=$G(PSODRUG("NAME"))
|
---|
42 | .D GETPROD
|
---|
43 | .I DRNM'="" I PSODRUG("NAME")=DRNM S DD=$G(DD)+1,^TMP($J,"DD",DD,0)=PSODRUG("IEN")_"^"_PSODRUG("NAME")_"^"_"^"_RDIRX_"R;O"_"^"_RDIINST D Q:'$G(PSOPHI)
|
---|
44 | ..S ^TMP($J,"DD",DD,1)=RDIDNAM_"^"_RDISTA_"^"_RDIFILL_"^"_RDIDAYS_"^"_RDIQTY_"^"_RDIREF_"^"_RDIEXP_"^"_RDIPHYS_"^"_RDIISS
|
---|
45 | ..M ^TMP($J,"DD",DD,1)=^TMP($J,"PSORDI",PSORDI,"SIG")
|
---|
46 | .I PSODRUG("NAME")'=DRNM I PSODRUG("VA CLASS")]"",$E(PSODRUG("VA CLASS"),1,4)=$E(PSOCLASS,1,4) D
|
---|
47 | ..I $E(PSODRUG("VA CLASS"),1,2)="HA",$E(PSOCLASS,1,2)="HA" Q
|
---|
48 | ..S PSODC=$O(^PS(50.605,"B",PSODRUG("VA CLASS"),0)) Q:'PSODC
|
---|
49 | ..S DC=$G(DC)+1,^TMP($J,"DC",DC,0)=PSODRUG("VA CLASS")
|
---|
50 | ..S PSODC=$P(^PS(50.605,PSODC,0),"^",2),^TMP($J,"DC",DC,0)=^TMP($J,"DC",DC,0)_"^"_PSODC_"^"_RDIVUID_"^"_DRNM_"^"_"^"_RDIRX_"R;O"_"^"_RDIINST D
|
---|
51 | ...S ^TMP($J,"DC",DC,1)=RDIDNAM_"^"_RDISTA_"^"_RDIFILL_"^"_RDIDAYS_"^"_RDIQTY_"^"_RDIREF_"^"_RDIEXP_"^"_RDIPHYS_"^"_RDIISS
|
---|
52 | ...M ^TMP($J,"DC",DC,1)=^TMP($J,"PSORDI",PSORDI,"SIG")
|
---|
53 | .;drug interaction check
|
---|
54 | .K ^TMP($J,"PSOPROD")
|
---|
55 | .D DATA^PSN50P68(PSOPROD,,"PSOPROD")
|
---|
56 | .S NDF=+$G(^TMP($J,"PSOPROD",PSOPROD,.05))
|
---|
57 | .I NDF=0 Q
|
---|
58 | .S NDF=NDF_"A"_PSOPROD
|
---|
59 | .K ^TMP($J,"PSOPROD")
|
---|
60 | .S IT=0,PSOICT=""
|
---|
61 | .F S IT=$O(^PS(56,"APD",NDF,PSODRUG("NDF"),IT)) Q:'IT D
|
---|
62 | ..Q:$$DDIEX^PSNAPIS($P(NDF,"A"),$P(NDF,"A",2))
|
---|
63 | ..Q:$$DDIEX^PSNAPIS($P(PSODRUG("NDF"),"A"),$P(PSODRUG("NDF"),"A",2))
|
---|
64 | ..Q:$P(^PS(56,IT,0),"^",7)&($P(^PS(56,IT,0),"^",7)<DT)
|
---|
65 | ..I 'PSOICT S PSOICT=IT Q
|
---|
66 | ..I $P($G(^PS(56,IT,0)),"^",4)=1 S PSOICT=IT Q
|
---|
67 | ..Q
|
---|
68 | .I 'PSOICT Q
|
---|
69 | .S IT=PSOICT
|
---|
70 | .S RDIDI=$O(^TMP($J,"DI",999),-1) I 'RDIDI S RDIDI=0
|
---|
71 | .S RDIDI=$G(RDIDI)+1,^TMP($J,"DI",RDIDI,0)=RDIVUID_"^"_DRNM_"^"_IT_"^"_$S($P(^PS(56,IT,0),"^",4)=1:"CRITICAL",1:"SIGNIFICANT")_"^"
|
---|
72 | .S ^TMP($J,"DI",RDIDI,0)=^TMP($J,"DI",RDIDI,0)_$P(^PS(50.416,$P(^PS(56,IT,0),"^",2),0),"^")_"^"_$P(^PS(50.416,$P(^PS(56,IT,0),"^",3),0),"^")_"^"_""_"^"_RDIRX_"R;O"_"^"_RDIINST
|
---|
73 | .S ^TMP($J,"DI",RDIDI,1)=RDIDNAM_"^"_RDISTA_"^"_RDIFILL_"^"_RDIDAYS_"^"_RDIQTY_"^"_RDIREF_"^"_RDIEXP_"^"_RDIPHYS_"^"_RDIISS
|
---|
74 | .M ^TMP($J,"DI",RDIDI,1)=^TMP($J,"PSORDI",PSORDI,"SIG")
|
---|
75 | .M ^TMP($J,"DI"_PSODFN,RDIDI)=^TMP($J,"DI",RDIDI) ; SAVE FOR OUTPATIENT PHARMACY BACKDOOR DISPLAY
|
---|
76 | K ^TMP($J,"PSORDI")
|
---|
77 | Q
|
---|
78 | ;
|
---|
79 | PARSE ; PULL INFORMATION FROM ^XTMP
|
---|
80 | N PSORDI,LOCAL,NEWISS,BADEXP,PSOPRE,PSO30,NEWDC,NEWEXP
|
---|
81 | S PSORDI=0 F S PSORDI=$O(^XTMP("ORRDI","PSOO",PSODFN,PSORDI)) Q:'PSORDI D
|
---|
82 | .S RDISTA=$G(^XTMP("ORRDI","PSOO",PSODFN,PSORDI,5,0))
|
---|
83 | .I RDISTA="DELETED" Q
|
---|
84 | .S RDIINST=$G(^XTMP("ORRDI","PSOO",PSODFN,PSORDI,1,0))
|
---|
85 | .S RDIDNAM=$G(^XTMP("ORRDI","PSOO",PSODFN,PSORDI,2,0))
|
---|
86 | .S RDIVUID=$G(^XTMP("ORRDI","PSOO",PSODFN,PSORDI,3,0))
|
---|
87 | .I RDIVUID="" Q
|
---|
88 | .S RDIRX=$G(^XTMP("ORRDI","PSOO",PSODFN,PSORDI,4,0))
|
---|
89 | .S RDIQTY=$G(^XTMP("ORRDI","PSOO",PSODFN,PSORDI,6,0)),RDIDAYS=$P(RDIQTY,";",2),RDIQTY=$P(RDIQTY,";")
|
---|
90 | .I $E(RDIDAYS)="D" S RDIDAYS=$P(RDIDAYS,"D",2)
|
---|
91 | .S RDIEXP=$G(^XTMP("ORRDI","PSOO",PSODFN,PSORDI,7,0))
|
---|
92 | .S RDIISS=$G(^XTMP("ORRDI","PSOO",PSODFN,PSORDI,8,0))
|
---|
93 | .I RDIEXP?."/" S BADEXP=1 D I BADEXP Q
|
---|
94 | ..I RDIISS?."/" Q
|
---|
95 | ..S PSOPRE=$E(DT) I $P(RDIISS,"/",3)>($E(DT,2,3)+1) S PSOPRE=PSOPRE-1
|
---|
96 | ..S NEWISS=PSOPRE_$P(RDIISS,"/",3)_$P(RDIISS,"/")_$P(RDIISS,"/",2) I NEWISS>(DT-10000) S RDIEXP=RDIISS,BADEXP=0
|
---|
97 | .I RDISTA["EXPIRE" S PSO30=0 D I PSO30 Q
|
---|
98 | ..S PSOPRE=$E(DT) I $P(RDIEXP,"/",3)>($E(DT,2,3)+1) S PSO30=1 Q
|
---|
99 | ..S NEWEXP=PSOPRE_$P(RDIEXP,"/",3)_$P(RDIEXP,"/")_$P(RDIEXP,"/",2)
|
---|
100 | ..S X1=NEWEXP,X2=30 D C^%DTC I X<DT S PSO30=1
|
---|
101 | .I RDIRX'="" S LOCAL=0 D CHKLOCAL I LOCAL Q
|
---|
102 | .S RDIFILL=$G(^XTMP("ORRDI","PSOO",PSODFN,PSORDI,9,0))
|
---|
103 | .I RDISTA["DISCONT" S PSO30=0 D I PSO30 Q
|
---|
104 | ..S PSOPRE=$E(DT) I $P(RDIFILL,"/",3)>($E(DT,2,3)+1) S PSO30=1 Q
|
---|
105 | ..S NEWDC=PSOPRE_$P(RDIFILL,"/",3)_$P(RDIFILL,"/")_$P(RDIFILL,"/",2)
|
---|
106 | ..S X1=NEWDC,X2=30+RDIDAYS D C^%DTC I X<DT S PSO30=1
|
---|
107 | .S RDIREF=$G(^XTMP("ORRDI","PSOO",PSODFN,PSORDI,10,0))
|
---|
108 | .S RDIPHYS=$G(^XTMP("ORRDI","PSOO",PSODFN,PSORDI,11,0))
|
---|
109 | .S PSOSIG="" F S PSOSIG=$O(^XTMP("ORRDI","PSOO",PSODFN,PSORDI,14,PSOSIG)) Q:PSOSIG="" S PSOSIG(PSOSIG)=^(PSOSIG)
|
---|
110 | .S ^TMP($J,"PSORDI",PSORDI)=RDIINST_"^"_RDIVUID_"^"_RDIDNAM_"^"_RDISTA_"^"_RDIRX_"^"_RDIFILL_"^"_RDIDAYS_"^"_RDIQTY_"^"_RDIREF_"^"_RDIEXP_"^"_RDIPHYS_"^"_RDIISS
|
---|
111 | .S PSOSIG="" F S PSOSIG=$O(PSOSIG(PSOSIG)) Q:PSOSIG="" S ^TMP($J,"PSORDI",PSORDI,"SIG",PSOSIG)=PSOSIG(PSOSIG)
|
---|
112 | Q
|
---|
113 | ;
|
---|
114 | CHKLOCAL ; IF SAME RX NUMBER AND ISSUE DATE - LOCAL RX
|
---|
115 | N PSOISS
|
---|
116 | I $D(^PSRX("B",RDIRX)) D
|
---|
117 | .N PSORX
|
---|
118 | .S PSORX=$O(^PSRX("B",RDIRX,"")) I 'PSORX Q
|
---|
119 | .S PSOISS=$P($G(^PSRX(PSORX,0)),"^",13)
|
---|
120 | .S PSOISS=$E(PSOISS,4,5)_"/"_$E(PSOISS,6,7)_"/"_$E(PSOISS,2,3)
|
---|
121 | .I PSOISS=RDIISS S LOCAL=1 Q
|
---|
122 | Q
|
---|
123 | ;
|
---|
124 | VAPROD(PSOPROD) ; GET VA PRODUCT FILE NAME AND DRUG CLASS
|
---|
125 | S PSOCLASS=$$DCLCODE^PSNAPIS(,PSOPROD)
|
---|
126 | S DRNM=$P($$PROD0^PSNAPIS(,PSOPROD),"^")
|
---|
127 | Q
|
---|
128 | ;
|
---|
129 | DRGNAME ;
|
---|
130 | N PSOY
|
---|
131 | S PSOY=DREN_"^"_$P($G(^PSDRUG(DREN,0)),"^"),PSOY(0)=$G(^PSDRUG(DREN,0))
|
---|
132 | S PSODRUG("IEN")=+PSOY,PSODRUG("VA CLASS")=$P(PSOY(0),"^",2)
|
---|
133 | S PSODRUG("NDF")=$S($G(^PSDRUG(+PSOY,"ND"))]"":+^("ND")_"A"_$P(^("ND"),"^",3),1:0)
|
---|
134 | I PSODRUG("NDF")=0 Q
|
---|
135 | S PSOPROD=$P(PSODRUG("NDF"),"A",2) I PSOPROD D VAPROD(PSOPROD) S PSODRUG("NAME")=DRNM
|
---|
136 | Q
|
---|
137 | ;
|
---|
138 | FILTER ; FOR SAME DRUG VUID FOR SAME SITE, KEEP 1 ENTRY - CHECK BY ACTIVE STATUS FIRST THEN BY GREATEST EXPIRATION DATE
|
---|
139 | N XX,RDI,OLDEXP,RDIEXP,RDIEXP2,OLDEXP2,PSORDI,RDISTA,OLDSTA,OLDRDI,ZZ
|
---|
140 | S PSORDI=0
|
---|
141 | F S PSORDI=$O(^TMP($J,"PSORDI",PSORDI)) Q:'PSORDI D
|
---|
142 | .S XX=$G(^TMP($J,"PSORDI",PSORDI)),RDIINST=$P(XX,"^"),RDIVUID=$P(XX,"^",2),RDISTA=$P(XX,"^",4),RDIEXP=$P(XX,"^",10) Q:RDIINST="" Q:RDIVUID="" I RDIEXP="" Q
|
---|
143 | .I $D(RDI(RDIINST,RDIVUID)) S ZZ=RDI(RDIINST,RDIVUID) D Q
|
---|
144 | ..I RDISTA="ACTIVE"!(RDISTA["SUSPEN") D Q
|
---|
145 | ...S OLDSTA=$P(ZZ,"^",2) I OLDSTA["ACTIVE"!(OLDSTA["SUSPEN") D CHKEXP Q
|
---|
146 | ...S OLDRDI=$P(ZZ,"^") K ^TMP($J,"PSORDI",OLDRDI) D SETRDI
|
---|
147 | ..S OLDSTA=$P(ZZ,"^",2) I OLDSTA["ACTIVE"!(OLDSTA["SUSPEN") K ^TMP($J,"PSORDI",PSORDI) Q
|
---|
148 | ..D CHKEXP ; ALL OTHER STATUSES - KEEP BY GREATER EXPIRATION DATE
|
---|
149 | .D SETRDI
|
---|
150 | Q
|
---|
151 | ;
|
---|
152 | CHKEXP ;
|
---|
153 | N PSOPRE
|
---|
154 | S OLDEXP=$P(ZZ,"^",3) D I OLDEXP2>RDIEXP2 K ^TMP($J,"PSORDI",PSORDI) Q
|
---|
155 | .S PSOPRE=$E(DT) I $P(RDIEXP,"/",3)>($E(DT,2,3)+1) S PSOPRE=PSOPRE-1
|
---|
156 | .S RDIEXP2=PSOPRE_$P(RDIEXP,"/",3)_$P(RDIEXP,"/")_$P(RDIEXP,"/",2)
|
---|
157 | .S PSOPRE=$E(DT) I $P(OLDEXP,"/",3)>($E(DT,2,3)+1) S PSOPRE=PSOPRE-1
|
---|
158 | .S OLDEXP2=PSOPRE_$P(OLDEXP,"/",3)_$P(OLDEXP,"/")_$P(OLDEXP,"/",2)
|
---|
159 | S OLDRDI=$P(ZZ,"^") K ^TMP($J,"PSORDI",OLDRDI) D SETRDI
|
---|
160 | Q
|
---|
161 | ;
|
---|
162 | SETRDI ;
|
---|
163 | S RDI(RDIINST,RDIVUID)=PSORDI_"^"_RDISTA_"^"_RDIEXP
|
---|
164 | Q
|
---|
165 | ;
|
---|
166 | GETPROD ;
|
---|
167 | S PSOFILE=50.68
|
---|
168 | S DRNM="",PSOCLASS="",PSOPROD=0
|
---|
169 | N PSOPR
|
---|
170 | K PSOPRODA
|
---|
171 | N DIC
|
---|
172 | D GETIREF^XTID(PSOFILE,.01,RDIVUID,"PSOPRODA",1) I 'PSOPRODA Q
|
---|
173 | S PSOPR="" F S PSOPR=$O(PSOPRODA(PSOFILE,.01,PSOPR)) Q:PSOPR="" D Q:DRNM'="" Q:PSOCLASS'=""
|
---|
174 | .I +(PSOPRODA(PSOFILE,.01,PSOPR)) S PSOPROD=+PSOPR D VAPROD(PSOPROD) Q
|
---|
175 | .I +(PSOPRODA(PSOFILE,.01,PSOPR))=0 I '$O(PSOPRODA(PSOFILE,.01,PSOPR)) S PSOPROD=+PSOPR D VAPROD(PSOPROD) ; USE LAST ENTRY IF ALL ARE INACTIVE
|
---|
176 | Q
|
---|
177 | ;
|
---|