1 | PSBMLLKU ;BIRMINGHAM/TEJ-BCMA RPC LOOKUP UTLILITIES ;Mar 2004
|
---|
2 | ;;3.0;BAR CODE MED ADMIN;**3,9,11,20,13,38,32**;Mar 2004;Build 32
|
---|
3 | ;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ; Reference/IA
|
---|
6 | ; EN^PSJBCMA1/2829
|
---|
7 | ; $$DOB^DPTLK1/3266
|
---|
8 | ; $$SSN^DPTLK1/3267
|
---|
9 | ; ^DPT/10035
|
---|
10 | ; ^XUSEC/10076
|
---|
11 | ; File 52.6/436
|
---|
12 | ; File 52.7/437
|
---|
13 | ; File 50/221
|
---|
14 | ; File 211.4/1409
|
---|
15 | ;
|
---|
16 | RPC(RESULTS,PSBREC) ; Remote Procedure Call Entry Point.
|
---|
17 | ;
|
---|
18 | S RESULTS="" D @(PSBREC(0)_"(.RESULTS,.PSBREC)") Q
|
---|
19 | Q
|
---|
20 | ;
|
---|
21 | ADMLKUP(RESULTS,PSBREC) ;
|
---|
22 | ; Lookup ADMinistrations per DFN and search DATE
|
---|
23 | ; input - PSBREC(1) DFN
|
---|
24 | ; PSBREC(2) Search DATE
|
---|
25 | ;
|
---|
26 | ; outpt - RESULTS (array)
|
---|
27 | ; (Administrations returned will be dated = to Search Date
|
---|
28 | ;
|
---|
29 | ;
|
---|
30 | K RESULTS
|
---|
31 | S DFN=PSBREC(1),PSBSRCH=$G(PSBREC(2)) I $G(PSBSRCH)']"" D NOW^%DTC S PSBSRCH=$P(%,".")
|
---|
32 | S PSBDT=PSBSRCH,PSBCNT=0 S:PSBSRCH'["." PSBSRCH=PSBSRCH+.9
|
---|
33 | S RESULTS(0)=1,RESULTS(1)="-1^No Meds Found!"
|
---|
34 | F S PSBSRCH=$O(^PSB(53.79,"AADT",DFN,PSBSRCH),-1) Q:'PSBSRCH!(PSBSRCH<PSBDT) D
|
---|
35 | .S PSBIEN=""
|
---|
36 | .F S PSBIEN=$O(^PSB(53.79,"AADT",DFN,PSBSRCH,PSBIEN),-1) Q:'PSBIEN D:'$D(^PSB(53.79,PSBIEN)) KILLAADT Q:'$D(^PSB(53.79,PSBIEN)) D:$$CHKKEY(PSBIEN)
|
---|
37 | ..L +^PSB(53.79,PSBIEN):1
|
---|
38 | ..I L -^PSB(53.79,PSBIEN)
|
---|
39 | ..E Q
|
---|
40 | ..S PSBXORDN=$$GET1^DIQ(53.79,PSBIEN_",",.11) Q:'$D(^PSB(53.79,"AORDX",DFN,PSBXORDN,PSBSRCH))
|
---|
41 | ..Q:($$GET1^DIQ(53.79,PSBIEN_",",.06,"I")>PSBSRCH)
|
---|
42 | ..Q:($$GET1^DIQ(53.79,PSBIEN_",",.09,"I")="N")
|
---|
43 | ..S PSBCNT=PSBCNT+1,RESULTS(PSBCNT)=PSBIEN
|
---|
44 | ..S $P(RESULTS(PSBCNT),U,2)=PSBSRCH
|
---|
45 | ..S $P(RESULTS(PSBCNT),U,3)=$$GET1^DIQ(53.79,PSBIEN_",",.08)
|
---|
46 | ..S:$$GET1^DIQ(53.79,PSBIEN_",",.26) $P(RESULTS(PSBCNT),U,4)=$$GET1^DIQ(53.79,PSBIEN_",",.26)
|
---|
47 | ..S $P(RESULTS(PSBCNT),U,5)=$S($$GET1^DIQ(53.79,PSBIEN_",",.09,"I")']"":"U",1:$$GET1^DIQ(53.79,PSBIEN_",",.09,"I"))
|
---|
48 | ..D ; Get order information
|
---|
49 | ...K ^TMP("PSJ1",$J) D EN^PSJBCMA1(DFN,PSBXORDN,1)
|
---|
50 | ...S $P(RESULTS(PSBCNT),U,3)=$P(^TMP("PSJ1",$J,2),U,2) ;OItem_" "_Dosage Form
|
---|
51 | ...S $P(RESULTS(PSBCNT),U,6)=$P(^TMP("PSJ1",$J,4),U) ;Sched Type
|
---|
52 | ...K ^TMP("PSJ1",$J)
|
---|
53 | ..S $P(RESULTS(PSBCNT),U,7)=$$GET1^DIQ(53.79,PSBIEN_",",.06,"I")
|
---|
54 | ..S $P(RESULTS(PSBCNT),U,8)=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:INITIAL")
|
---|
55 | ..S:$D(^PSB(53.79,PSBIEN,.2)) $P(RESULTS(PSBCNT),U,9)=$P(^PSB(53.79,PSBIEN,.2),U),$P(RESULTS(PSBCNT),U,10)=$P(^PSB(53.79,PSBIEN,.2),U,2)
|
---|
56 | S:+$G(RESULTS(1))>0 $P(RESULTS(0),U)=PSBCNT
|
---|
57 | Q
|
---|
58 | ;
|
---|
59 | CHKKEY(PSBIENX) ;
|
---|
60 | I '(($D(^XUSEC("PSB MANAGER",DUZ)))!($$GET1^DIQ(53.79,+PSBIENX,.07,"I")=DUZ)) Q 0
|
---|
61 | Q 1
|
---|
62 | ;
|
---|
63 | PTLKUP(RESULTS,PSBREC) ; Patient lookup handled separately for security
|
---|
64 | ; input - PSBREC (array) User entered patient lookup data
|
---|
65 | ;
|
---|
66 | ; outpt - RESULTS (array)
|
---|
67 | ; (Person(s) in PATIENT File (#2) meeting search criteria)
|
---|
68 | ;
|
---|
69 | ;
|
---|
70 | K RESULTS
|
---|
71 | S PSBDATA=$E(PSBREC(1),1,60)
|
---|
72 | S PSBDATA1=PSBDATA
|
---|
73 | N PSBINDX S PSBINDX="" K ^TMP("DILIST",$J)
|
---|
74 | I $E(PSBDATA,$L(PSBDATA)-10,60)=" [MAS WARD]" S PSBINDX="CN" S PSBDATA=$P(PSBDATA," [MAS WARD]")
|
---|
75 | I $E(PSBDATA,$L(PSBDATA)-11,60)=" [NURS UNIT]" S PSBINDX="CN" S PSBDATA=$P(PSBDATA," [NURS UNIT]") D
|
---|
76 | .K PSBPT S PSBPT(0)=0
|
---|
77 | .S PSBZ=0 F S PSBZ=$O(^NURSF(211.4,PSBZ)) Q:PSBZ'?.N I $$GET1^DIQ(211.4,PSBZ_",",.01)=PSBDATA S PSBY=PSBZ Q
|
---|
78 | .K PSBDATA S PSBDATA=""
|
---|
79 | .S PSBX=0 F S PSBX=$O(^NURSF(211.4,PSBY,3,PSBX)) Q:PSBX="" S PSBDATA(PSBX)=$$GET1^DIQ(42,$P(^NURSF(211.4,PSBY,3,PSBX,0),U)_",",.01)
|
---|
80 | I PSBINDX="" S PSBINDX=$S(PSBDATA?9N.1P:"SSN",PSBDATA?4N.1P:"BS5^BS",1:PSBINDX)
|
---|
81 | I ($O(PSBDATA(""))'>0) D FIND^DIC(2,"","@;.01;.02;.03;.09","MP",PSBDATA,200,PSBINDX)
|
---|
82 | I ($O(PSBDATA(""))>0) D
|
---|
83 | .S PSBX="",PSBY=1 F S PSBX=$O(PSBDATA(PSBX)) Q:PSBX="" D K ^TMP("DILIST",$J) Q:$P(PSBPT(0),U,3)=1
|
---|
84 | ..D FIND^DIC(2,"","@;.01;.02;.03;.09","MP",PSBDATA(PSBX),200,PSBINDX)
|
---|
85 | ..S PSBZ=0 F S PSBZ=$O(^TMP("DILIST",$J,PSBZ)) Q:PSBZ="" S PSBPT(PSBY,0)=^TMP("DILIST",$J,PSBZ,0),PSBPT(0)=PSBY,PSBY=PSBY+1 I PSBY>200 S $P(PSBPT(0),U,3)=1
|
---|
86 | K:+$G(PSBPT(0))=0 PSBPT
|
---|
87 | I $D(PSBPT) M ^TMP("DILIST",$J)=PSBPT
|
---|
88 | I $P($G(^TMP("DILIST",$J,0)),U,3) D Q
|
---|
89 | .S RESULTS(0)=1,RESULTS(1)="-1^Too many patients found matching '"_PSBDATA1_"'. Please be more specific."
|
---|
90 | I $D(^TMP("DILIST",$J,0)) D
|
---|
91 | .F PSBXX=0:0 S PSBXX=$O(^TMP("DILIST",$J,PSBXX)) Q:'PSBXX D
|
---|
92 | ..S RESULTS(PSBXX)=$$PTREC(+^TMP("DILIST",$J,PSBXX,0))
|
---|
93 | I '$D(RESULTS) S RESULTS(0)=1,RESULTS(1)="-1^No patients matching '"_PSBDATA1_"'"
|
---|
94 | E S RESULTS(0)=+$O(RESULTS(""),-1)
|
---|
95 | Q
|
---|
96 | ;
|
---|
97 | PTREC(DFN) ;
|
---|
98 | ; Extrinsic to return a Pt Rec in standard list format
|
---|
99 | N PSBXX
|
---|
100 | S PSBXX=$G(^DPT(DFN,0))
|
---|
101 | S PSBXX=DFN_U_$P(PSBXX,U,1)_U_$P(PSBXX,U,2)_U_$P(PSBXX,U,3)_U_$P(PSBXX,U,9)
|
---|
102 | S $P(PSBXX,U,6)=$$GET1^DIQ(2,DFN_",",.1)
|
---|
103 | S $P(PSBXX,U,7)=$$GET1^DIQ(2,DFN_",",.101)
|
---|
104 | S $P(PSBXX,U,10)=$$DOB^DPTLK1(DFN)
|
---|
105 | S $P(PSBXX,U,11)=$$SSN^DPTLK1(DFN)
|
---|
106 | Q PSBXX
|
---|
107 | ;
|
---|
108 | SELECTAD(RESULTS,PSBREC) ; Select Administration
|
---|
109 | ;
|
---|
110 | ; Process the SELECTed ADministration
|
---|
111 | ; input - PSBREC(1) = PSB Med Log File (#53.79) IEN
|
---|
112 | ;
|
---|
113 | ;
|
---|
114 | ; outpt - RESULTS (array)
|
---|
115 | ; (Administration data that can be subsequently updated via GUI MED LOG EDIT)
|
---|
116 | ;
|
---|
117 | ;
|
---|
118 | K RESULTS,PSBXIV,PSBPTCHX
|
---|
119 | N PSBIEN,PSBCNT,PSBX S PSBIEN=PSBREC(1),PSBCNT=2
|
---|
120 | ; Construct form data Patient^SSN^Med^BagID^AdminStat^AdminD/T^InjctSt^PRNReas^PRNEff^DisDrg^UntsGiven^Unt^
|
---|
121 | S RESULTS(0)=0
|
---|
122 | D:$$CHKKEY(PSBIEN)
|
---|
123 | .L +^PSB(53.79,PSBIEN):1
|
---|
124 | .E I $P(^PSB(53.79,PSBIEN,0),U,9)]"" S PSBCNT=1,RESULTS(1)="-1^ This administration is being modified by another process at this moment." L -^PSB(53.79,PSBIEN) Q
|
---|
125 | .S $P(RESULTS(1),U)=PSBIEN
|
---|
126 | .S $P(RESULTS(1),U,2)=$$GET1^DIQ(53.79,PSBIEN_",",.01,"I")
|
---|
127 | .S $P(RESULTS(1),U,3)=$$GET1^DIQ(53.79,PSBIEN_",",.01)
|
---|
128 | .S $P(RESULTS(1),U,4)=$$GET1^DIQ(2,$P(RESULTS(1),U,2)_",",.09)
|
---|
129 | .S $P(RESULTS(1),U,5)=$$GET1^DIQ(53.79,PSBIEN_",",.08,"I")_"~"_$$GET1^DIQ(53.79,PSBIEN_",",.08)
|
---|
130 | .S $P(RESULTS(1),U,6)=$$GET1^DIQ(53.79,PSBIEN_",",.26)
|
---|
131 | .S $P(RESULTS(1),U,7)=$S($$GET1^DIQ(53.79,PSBIEN_",",.09,"I")']"":"U",1:$$GET1^DIQ(53.79,PSBIEN_",",.09,"I"))
|
---|
132 | .;
|
---|
133 | .D:($P(RESULTS(1),U,7)'="N")&($P(RESULTS(1),U,7)]"") SELSTTUS(.RESULTS) ; Amend RESULTS(1) data...
|
---|
134 | .S Y=$E($$GET1^DIQ(53.79,PSBIEN_",",.06,"I"),1,12) D DD^%DT
|
---|
135 | .S $P(RESULTS(1),U,8)=Y
|
---|
136 | .S $P(RESULTS(1),U,9)=$$GET1^DIQ(53.79,PSBIEN_",",.06,"I")
|
---|
137 | .S $P(RESULTS(1),U,10)=$$GET1^DIQ(53.79,PSBIEN_",",.16)
|
---|
138 | .S $P(RESULTS(1),U,16)=0
|
---|
139 | .S $P(RESULTS(2),U)=$$GET1^DIQ(53.79,PSBIEN_",",.21),$P(RESULTS(2),U,2)=$$GET1^DIQ(53.79,PSBIEN_",",.22)
|
---|
140 | .; Determine if there are any active IVs/Patchs per order
|
---|
141 | .D:$G(PSBPTCHX)
|
---|
142 | ..S PSBX="",PSBX="^PSB(53.79,""APATCH"","_$P(RESULTS(1),U,2)_")"
|
---|
143 | ..F S PSBX=$Q(@PSBX) Q:PSBX="" Q:$QS(PSBX,3)'=$P(RESULTS(1),U,2) D Q:$P(RESULTS(1),U,16)
|
---|
144 | ...S PSBXX=$QS(PSBX,5),PSBXXX=$S(($P(^PSB(53.79,PSBXX,0),U,9)="G")&(PSBXX'=PSBIEN):1,1:0)
|
---|
145 | ...I PSBXXX&($P(^PSB(53.79,PSBXX,.1),U)=$P(RESULTS(1),U,15)) S $P(RESULTS(1),U,16)=1
|
---|
146 | .D:$G(PSBXIV)
|
---|
147 | ..S PSBX="",PSBX="^PSB(53.79,""AUID"","_$P(RESULTS(1),U,2)_")"
|
---|
148 | ..F S PSBX=$Q(@PSBX) Q:PSBX="" Q:$QS(PSBX,3)'=$P(RESULTS(1),U,2) Q:$QS(PSBX,4)>$P(RESULTS(1),U,15) D Q:$P(RESULTS(1),U,16)
|
---|
149 | ...Q:$QS(PSBX,4)'=$P(RESULTS(1),U,15)
|
---|
150 | ...S PSBXX=$QS(PSBX,6) S:(PSBXX'=PSBIEN) $P(RESULTS(1),U,16)=$S($P(^PSB(53.79,PSBXX,0),U,9)="I":1,$P(^PSB(53.79,PSBXX,0),U,9)="S":1,1:0)
|
---|
151 | .;
|
---|
152 | .; LOOP - Place DD in RESULTS
|
---|
153 | .S PSBX=0 F S PSBX=$O(^PSB(53.79,PSBIEN,.5,PSBX)) Q:'(+PSBX) D
|
---|
154 | ..S PSBCNT=PSBCNT+1
|
---|
155 | ..S RESULTS(PSBCNT)="DD^"_$P(^PSB(53.79,PSBIEN,.5,PSBX,0),U)_"^"_$$GET1^DIQ(50,$P(^PSB(53.79,PSBIEN,.5,PSBX,0),U)_",",.01)
|
---|
156 | ..S $P(RESULTS(PSBCNT),U,4)=$P(^PSB(53.79,PSBIEN,.5,PSBX,0),U,2)_"^"_$P(^PSB(53.79,PSBIEN,.5,PSBX,0),U,3)_"^"_$P(^PSB(53.79,PSBIEN,.5,PSBX,0),U,4)
|
---|
157 | ..S:$P(RESULTS(PSBCNT),U,4)?1"."1.N $P(RESULTS(PSBCNT),U,4)=0_+$P(RESULTS(PSBCNT),U,4)
|
---|
158 | ..S:$P(RESULTS(PSBCNT),U,5)?1"."1.N $P(RESULTS(PSBCNT),U,5)=0_+$P(RESULTS(PSBCNT),U,5)
|
---|
159 | .; LOOP - Place ADD in RESULTS
|
---|
160 | .S PSBX=0 F S PSBX=$O(^PSB(53.79,PSBIEN,.6,PSBX)) Q:'(+PSBX) D
|
---|
161 | ..S PSBCNT=PSBCNT+1
|
---|
162 | ..S RESULTS(PSBCNT)="ADD^"_$P(^PSB(53.79,PSBIEN,.6,PSBX,0),U)_"^"_$$GET1^DIQ(52.6,$P(^PSB(53.79,PSBIEN,.6,PSBX,0),U)_",",.01)
|
---|
163 | ..S $P(RESULTS(PSBCNT),U,4)=$P(^PSB(53.79,PSBIEN,.6,PSBX,0),U,2)_"^"_$P(^PSB(53.79,PSBIEN,.6,PSBX,0),U,3)_"^"_$P(^PSB(53.79,PSBIEN,.6,PSBX,0),U,4)
|
---|
164 | .; LOOP - Place SOL in RESULTS
|
---|
165 | .S PSBX=0 F S PSBX=$O(^PSB(53.79,PSBIEN,.7,PSBX)) Q:'(+PSBX) D
|
---|
166 | ..S PSBCNT=PSBCNT+1
|
---|
167 | ..S RESULTS(PSBCNT)="SOL^"_$P(^PSB(53.79,PSBIEN,.7,PSBX,0),U)_"^"_$$GET1^DIQ(52.7,$P(^PSB(53.79,PSBIEN,.7,PSBX,0),U)_",",.01)
|
---|
168 | ..S $P(RESULTS(PSBCNT),U,4)=$P(^PSB(53.79,PSBIEN,.7,PSBX,0),U,2)_"^"_$P(^PSB(53.79,PSBIEN,.7,PSBX,0),U,3)_"^"_$P(^PSB(53.79,PSBIEN,.7,PSBX,0),U,4)
|
---|
169 | .L -^PSB(53.79,PSBIEN)
|
---|
170 | S:PSBCNT>0 RESULTS(0)=PSBCNT
|
---|
171 | Q
|
---|
172 | ;
|
---|
173 | SELSTTUS(RESULTS) ;
|
---|
174 | ; Provide the SELectable STaTUS
|
---|
175 | ;
|
---|
176 | ; Get TAB, ScheduleType, Current Status, provide Selectable Staus(s) in ^8
|
---|
177 | N PSBORTYP,PSBIVTYP,PSBINTSY,PSBCHMTY,PSBIVPSH,PSBXTAB
|
---|
178 | K ^TMP("PSJ1",$J) D EN^PSJBCMA1($$GET1^DIQ(53.79,PSBIEN_",",.01,"I"),$$GET1^DIQ(53.79,PSBIEN_",",.11),1)
|
---|
179 | I ^TMP("PSJ1",$J,0)>0 D
|
---|
180 | .S PSBORTYP=$TR($P(^TMP("PSJ1",$J,0),U,3),"1234567890"),PSBIVTYP=$P(^TMP("PSJ1",$J,0),U,6)
|
---|
181 | .S PSBINTSY=$P(^TMP("PSJ1",$J,0),U,7),PSBCHMTY=$P(^TMP("PSJ1",$J,0),U,8),PSBIVPSH=+$P($G(^TMP("PSJ1",$J,1,0)),U,2)
|
---|
182 | .S:$$IVPTAB^PSBVDLU3(PSBORTYP,PSBIVTYP,PSBINTSY,PSBCHMTY,PSBIVPSH) PSBXTAB="PB"
|
---|
183 | .D:'$D(PSBXTAB)
|
---|
184 | ..I PSBORTYP="U" S PSBXTAB="UD"
|
---|
185 | ..I PSBORTYP="V" S PSBXTAB="IV"
|
---|
186 | ; Set Results(1) and other flags...
|
---|
187 | I ^TMP("PSJ1",$J,0)>0 D
|
---|
188 | .S $P(RESULTS(1),U,13)=$P(^TMP("PSJ1",$J,4),U)
|
---|
189 | .S $P(RESULTS(1),U,14)=$P(^TMP("PSJ1",$J,1),U,10)
|
---|
190 | .S $P(RESULTS(1),U,15)=$P(^TMP("PSJ1",$J,0),U,3)
|
---|
191 | .I (PSBXTAB="UD"),($P(^TMP("PSJ1",$J,2),U,6)="PATCH") S PSBPTCHX=1
|
---|
192 | .I PSBXTAB="IV" S PSBXIV=1
|
---|
193 | .S:$G(PSBXTAB)]"" $P(RESULTS(1),U,11)=$G(PSBXTAB)
|
---|
194 | K ^TMP("PSJ1",$J)
|
---|
195 | Q
|
---|
196 | ;
|
---|
197 | KILLAADT ;
|
---|
198 | ; Here because there is an errorant index entry via version 1.0/2.0
|
---|
199 | ; Cleansing!
|
---|
200 | ;
|
---|
201 | K ^PSB(53.79,"AADT",DFN,PSBSRCH,PSBIEN)
|
---|
202 | Q
|
---|
203 | ;
|
---|