1 | PSJHLU ;BIR/RLW-UTILITIES USED IN BUILDING HL7 SEGMENTS ;20 Apr 98 / 9:58 AM
|
---|
2 | ;;5.0; INPATIENT MEDICATIONS ;**1,56,72,102,134**;16 DEC 97;Build 124
|
---|
3 | ;
|
---|
4 | ; Reference to ^PS(52.6 is supported by DBIA# 1231.
|
---|
5 | ; Reference to ^PS(52.7 is supported by DBIA# 2173.
|
---|
6 | ; Reference to ^VA(200 is supported by DBIA 10060.
|
---|
7 | ; Reference to ^PS(55 is supported by DBIA# 2191.
|
---|
8 | ;
|
---|
9 | INIT ; set up HL7 application variables
|
---|
10 | S PSJHLSDT="PS",PSJHINST=$P($$SITE^VASITE(),"^")
|
---|
11 | S PSJCLEAR="K FIELD F J=0:1:LIMIT S FIELD(J)="""""
|
---|
12 | Q
|
---|
13 | ;
|
---|
14 | SEGMENT(LIMIT) ;
|
---|
15 | K SEGMENT
|
---|
16 | N SUBSEG,SEGLENGT S SUBSEG=0,SEGMENT="" F J=0:1:LIMIT D
|
---|
17 | .I SEGMENT']"" S SEGMENT=FIELD(J) Q
|
---|
18 | .S SEGMENT=SEGMENT_"|"_FIELD(J)
|
---|
19 | F S SEGLENGT=$L(SEGMENT) D Q:$L(SEGMENT)'>246
|
---|
20 | .I SEGLENGT'>246 S SEGMENT(SUBSEG)=SEGMENT
|
---|
21 | .I SEGLENGT>245 S SEGMENT(SUBSEG)=$E(SEGMENT,1,245),SUBSEG=SUBSEG+1 D
|
---|
22 | ..S SEGMENT=$E(SEGMENT,246,SEGLENGT),SEGMENT(SUBSEG)=$E(SEGMENT,1,245)
|
---|
23 | SET S PSJI=PSJI+1,^TMP("PSJHLS",$J,PSJHLSDT,PSJI)=SEGMENT(0)
|
---|
24 | F J=1:1 Q:'$D(SEGMENT(J)) S ^TMP("PSJHLS",$J,PSJHLSDT,PSJI,J)=SEGMENT(J)
|
---|
25 | Q
|
---|
26 | ;
|
---|
27 | SEGMENT2 ; Retrieve text fields
|
---|
28 | K SEGMENT S JJ=0 F S JJ=$O(@(PSJORDER_"12,"_JJ_")")) Q:'JJ S SEGMENT(JJ-1)=$G(@(PSJORDER_"12,"_JJ_",0)"))
|
---|
29 | I $D(SEGMENT(0)) S SEGMENT(0)="NTE|6|L|"_$S($G(PSJBCBU):SEGMENT(0),1:$$ESC^ORHLESC(SEGMENT(0))) D
|
---|
30 | .D SET^PSJHLU K SEGMENT,JJ
|
---|
31 | I $P($G(@(PSJORDER_"6)")),"^")]"" K SEGMENT S SEGMENT(0)="NTE|21|L|"_$S($G(PSJBCBU):$P($G(@(PSJORDER_"6)")),"^"),1:$$ESC^ORHLESC($P($G(@(PSJORDER_"6)")),"^"))) D
|
---|
32 | .D SET^PSJHLU K SEGMENT
|
---|
33 | I PSJORDER["P",$P($G(@(PSJORDER_"9)")),"^",2)]"" K SEGMENT S SEGMENT(0)="NTE|21|L|"_$S($G(PSJBCBU):$P($G(@(PSJORDER_"9)")),"^",2),1:$$ESC^ORHLESC($P($G(@(PSJORDER_"9)")),"^",2))) D
|
---|
34 | .D SET^PSJHLU K SEGMENT
|
---|
35 | Q
|
---|
36 | ;
|
---|
37 | CALL(HLEVN) ; call DHCP HL7 package -or- protocol, to pass Orders
|
---|
38 | ; HLEVN = number of segments in message
|
---|
39 | K CLERK,DDIEN,DDNUM,DOSEFORM,DOSEOR,FIELD,IVTYPE,LIMIT,NAME,NDNODE,NODE1,NODE2,PRODNAME,PROVIDER,PSGS0Y,PSJHINST,PSJHLSDT,PSJI,PSJORDER,PSOC,PSREASON,ROOMBED,SPDIEN,SEGMENT
|
---|
40 | I $G(PSJBCBU)=1 M PSJNAME=^TMP("PSJHLS",$J,"PS") Q
|
---|
41 | S PSJMSG="^TMP(""PSJHLS"",$J,""PS"")"
|
---|
42 | D MSG^XQOR("PS EVSEND OR",.PSJMSG)
|
---|
43 | Q
|
---|
44 | ;
|
---|
45 | IVTYPE(PSJORDER) ; check whether a back-door order is Inpatient IV or IV fluid
|
---|
46 | I RXORDER["V",$P($G(@(PSJORDER_"0)")),"^",4)'="A" Q "I"
|
---|
47 | I RXORDER["P" I $P($G(@(PSJORDER_"0)")),"^",4)'="F" S IVTYPE="" Q IVTYPE
|
---|
48 | N SUB,AD,SOL,IVTYPE,NODE1 S SUB=0,IVTYPE="F"
|
---|
49 | ;naked reference on line below refers to the full indirect reference of PSJORDER_ which is from ^PS(55,DFN,"IV",PSJORD
|
---|
50 | F TYPE="AD","SOL" S SUB=0 F S SUB=$O(@(PSJORDER_""""_TYPE_""""_","_SUB_")")) Q:(SUB="")!(IVTYPE="I") S NODE1=$G(^(SUB,0)) Q:NODE1="" D Q:IVTYPE="I"
|
---|
51 | .I TYPE="AD" D
|
---|
52 | ..I '$P($G(^PS(52.6,$P(NODE1,"^"),0)),"^",13) S IVTYPE="I"
|
---|
53 | .D:TYPE="SOL"
|
---|
54 | ..S:'$P($G(^PS(52.7,$P(NODE1,"^"),0)),"^",13) IVTYPE="I"
|
---|
55 | Q IVTYPE
|
---|
56 | ENI ;Calculate Frequency for IV orders
|
---|
57 | N INFUSE
|
---|
58 | I X?.E1L.E S INFUSE=$$ENLU^PSGMI(X) Q:(INFUSE="TITRATE")!(INFUSE="BOLUS")!($P(INFUSE," ")="INFUSE")!($P(INFUSE," ")="Infuse")
|
---|
59 | Q:(X="TITRATE")!(X="BOLUS")!($P(X," ")="INFUSE")!($P(X," ")="Infuse")
|
---|
60 | Q:$$INTRMT(X)
|
---|
61 | K:$L(X)<1!($L(X)>30)!(X["""")!($A(X)=45) X I '$D(X) Q
|
---|
62 | I X["=" D Q ; NOIS LOU-0501-42191
|
---|
63 | .N X2,X1 S X1=$P(X,"="),X2=$P(X,"=",2)
|
---|
64 | .I X1["ML/HR",(+X1=$P(X1,"ML/HR"))!(+X1=$P(X1," ML/HR")) D
|
---|
65 | ..S X1=$TR(X1,"ML/HR","ml/hr")
|
---|
66 | .I X2["ML/HR",(+X2=$P(X2,"ML/HR"))!(+X2=$P(X2," ML/HR")) D
|
---|
67 | ..S X2=$TR(X2,"ML/HR","ml/hr")
|
---|
68 | .I X1[" ml/hr",(+X1=$P(X1," ml/hr")) D
|
---|
69 | ..S X1=$P(X1," ml/hr")_$P(X1," ml/hr",2,9999)
|
---|
70 | .I X2[" ml/hr",(+X2=$P(X2," ml/hr")) D
|
---|
71 | ..S X2=$P(X2," ml/hr")_$P(X2," ml/hr",2,9999)
|
---|
72 | .I X1["ml/hr",(+X1=$P(X1,"ml/hr")) D
|
---|
73 | ..S X1=$P(X1,"ml/hr")_$P(X1,"ml/hr",2,9999)
|
---|
74 | .I X2["ml/hr",(+X2=$P(X2,"ml/hr")) D
|
---|
75 | ..S X2=$P(X2,"ml/hr")_$P(X2,"ml/hr",2,9999)
|
---|
76 | .I X2'=+X2 D
|
---|
77 | ..I ($P(X2,"@",2,999)'=+$P(X2,"@",2,999)!(+$P(X2,"@",2,999)<0)) K X Q
|
---|
78 | .I X1=+X1 S X1=X1_" ml/hr"
|
---|
79 | .I X2=+X2 S X2=X2_" ml/hr"
|
---|
80 | .S:$P(X2,"@")=+X2 $P(X2,"@")=$P(X2,"@")_" ml/hr"
|
---|
81 | .S X=X1_"="_X2
|
---|
82 | I X'=+X,($P($TR(X," ml/hr",""),"@",2,999)'=+$P($TR(X," ml/hr",""),"@",2,999)!(+$P(X,"@",2,999)<0)),($P(X," ml/hr")'=+$P(X," ml/hr")!(+$P(X," ml/hr")<0)) Q:(X>0&($E(X)=0)) K X Q
|
---|
83 | I X=+X!(X>0&($E(X)=0)) S X=X_" ml/hr" D SPSOL S FREQ=$S('X:0,1:SPSOL\X*60+(SPSOL#X/X*60+.5)\1) K SPSOL Q
|
---|
84 | I X[" ml/hr" D SPSOL S FREQ=$S('X:0,1:SPSOL\X*60+(SPSOL#X/X*60+.5)\1) K SPSOL Q
|
---|
85 | S SPSOL=$P(X,"@",2) S:$P(X,"@")=+X $P(X,"@")=$P(X,"@")_" ml/hr" S FREQ=$S('SPSOL:0,1:1440/SPSOL\1) K SPSOL
|
---|
86 | Q
|
---|
87 | SPSOL S SPSOL=+TVOLUME Q
|
---|
88 | INTRMT(X) ;
|
---|
89 | Q:'$P(X," ") 0
|
---|
90 | Q:$P(X," ",2)="Minutes" 1
|
---|
91 | Q:$P(X," ",2)="Hours" 1
|
---|
92 | Q 0
|
---|
93 | IVCAT(DFN,PSJORD,PARRAY) ; This returns the IV CATEGORY based on the IV TYPE and CHEMO TYPE (not what is already in the IV CATEGORY field)
|
---|
94 | ; Passed in: PSJORDER (file root of order)
|
---|
95 | N NODE,TYP,CHEMTYP,INTSYR,ND2P5
|
---|
96 | S (CHEMTYP,INTSYR)=""
|
---|
97 | S TYP=$G(P(4)),INTSYR=$G(P(5)),CHEMTYP=$G(P(23))
|
---|
98 | I TYP="",$G(PSJORD)["V" S NODE=$G(^PS(55,DFN,"IV",+PSJORD,0)) S TYP=$P(NODE,"^",4),INTSYR=$P(NODE,"^",5),CHEMTYP=$P(NODE,"^",23)
|
---|
99 | I TYP="",$G(PSJORD)["P" S NODE=$G(^PS(53.1,+PSJORD,8)) S TYP=$P(NODE,"^"),INTSYR=$P(NODE,"^",4),CHEMTYP=$P(NODE,"^",2)
|
---|
100 | I TYP="" S TYP=$G(PARRAY(4)),INTSYR=$G(PARRAY(5)),CHEMTYP=$G(PARRAY(23))
|
---|
101 | Q:$G(TYP)="" ""
|
---|
102 | S CAT=$S(",A,H,"[(","_TYP_","):"C",TYP="C"&(",A,H,S,"[(","_CHEMTYP_",")&'INTSYR):"C",TYP="C"&(CHEMTYP="P"):"I",TYP="S"&'INTSYR:"C",TYP="P":"I",$G(INTSYR):"I",1:"")
|
---|
103 | Q CAT
|
---|
104 | ZRX ; Perform outbound processing
|
---|
105 | S LIMIT=6 X PSJCLEAR
|
---|
106 | S FIELD(0)="ZRX"
|
---|
107 | I '$G(PSJREN) N PREON,PSJREN I $G(PSJORD)["U"&($P(NODE1,"^",24)="R") S PSJREN=1
|
---|
108 | I $G(PSJORD)["V"&($P(NODE2,"^",8)="R") S PSJREN=1
|
---|
109 | S PREON=$S($G(PSJREN):$G(PSJORD),PSJORDER["IV":$P(NODE2,"^",5),1:$P(NODE1,"^",25))
|
---|
110 | S FIELD(1)=$S(PREON["P":$P($G(^PS(53.1,+PREON,0)),"^",21),PREON["V":$P($G(^PS(55,PSJHLDFN,"IV",+PREON,0)),"^",21),1:$P($G(^PS(55,PSJHLDFN,5,+PREON,0)),"^",21))
|
---|
111 | S FIELD(2)=$S(PSJORDER["IV":$G(P("NAT")),1:$G(PSJNOO))
|
---|
112 | S FIELD(3)=$S($G(PSJREN):"R",PSJORDER["IV":$P(NODE2,"^",8),1:$P(NODE1,"^",24))
|
---|
113 | I FIELD(3)="" I PSOC="SN" S FIELD(3)="N"
|
---|
114 | I $D(P)>1 S FIELD(6)=$$IVCAT^PSJHLU(PSJHLDFN,RXORDER,.P)
|
---|
115 | S NAME=$P($G(^VA(200,DUZ,0)),"^")
|
---|
116 | S FIELD(5)=DUZ_"^"_$S($G(PSJBCBU):NAME,1:$$ESC^ORHLESC(NAME))_"^"_"99NP"
|
---|
117 | D SEGMENT^PSJHLU(LIMIT),DISPLAY^PSJHL2
|
---|
118 | Q
|
---|