1 | RAO7UTL ;HISC/GJC,SS-Utilities for HL7 messages. ;9/5/97 08:55
|
---|
2 | ;;5.0;Radiology/Nuclear Medicine;**18,45,57,82**;Mar 16, 1998;Build 8
|
---|
3 | ;modified by SS JUN 19,2000 for P18
|
---|
4 | EN1 ; Entry point to define some basic HL7 variables
|
---|
5 | N I S RAHLFS="|",RAECH="^~\&"
|
---|
6 | S $P(RAHLFS(0),RAHLFS,51)=""
|
---|
7 | F I=1:1:$L(RAECH) S RAECH(I)=$E(RAECH,I)
|
---|
8 | Q
|
---|
9 | ;
|
---|
10 | CMEDIA(IEN,RAPTYPE) ;Called from RAO7MFN when a procedure is updated
|
---|
11 | ;Input: IEN=ien of proc. in file 71
|
---|
12 | ; RAPTYPE=procedure type; broad, parent, series, or detailed.
|
---|
13 | ;Return: J=a string with some combination of the following indicators:
|
---|
14 | ;I for Iodinated ionic, N for Iodinated non-ionic, L for Gadolinium
|
---|
15 | ;C for Oral Cholecystographic, G for Gastrografin, B for Barium or
|
---|
16 | ;NULL if none of the indicators apply to this procedure.
|
---|
17 | ;
|
---|
18 | ;'Broad' procedures have no contrast media definition, return null
|
---|
19 | Q:RAPTYPE="B" ""
|
---|
20 | ;if 'detailed' or 'series' & no contrast media data return null
|
---|
21 | I RAPTYPE'="P",'($O(^RAMIS(71,IEN,"CM",0))) Q ""
|
---|
22 | NEW I,INA,J S J=""
|
---|
23 | I RAPTYPE="P" D
|
---|
24 | .S I=0 F S I=$O(^RAMIS(71,IEN,4,I)) Q:'I D
|
---|
25 | ..S I(0)=+$G(^RAMIS(71,IEN,4,I,0)) Q:'I(0)
|
---|
26 | ..S INA=$P($G(^RAMIS(71,I(0),"I")),"^")
|
---|
27 | ..S INA=$S(INA="":1,INA>DT:1,1:0)
|
---|
28 | ..D:INA NONPAR(I(0))
|
---|
29 | ..Q
|
---|
30 | .Q
|
---|
31 | E D NONPAR(IEN)
|
---|
32 | Q J
|
---|
33 | ;
|
---|
34 | NONPAR(IEN) ;obtain contrast media data for a 'detailed' or 'series' proc
|
---|
35 | ; Input: IEN=ien of the non-parent, non-broad procedure
|
---|
36 | ;Return: J=data string (return)
|
---|
37 | ;variable definition: I=ien of sub-file rec
|
---|
38 | NEW H,I S I=0
|
---|
39 | F S I=$O(^RAMIS(71,IEN,"CM",I)) Q:I'>0 D
|
---|
40 | .S H=$P($G(^RAMIS(71,IEN,"CM",I,0)),U) Q:H=""
|
---|
41 | .S:J'[H J=J_H
|
---|
42 | .Q
|
---|
43 | Q
|
---|
44 | ;
|
---|
45 | MSH(X) ; Set up the 'MSH' segment.
|
---|
46 | ; 'X' is passed in and identifies the message type.
|
---|
47 | S:X']"" X="Message Type Error"
|
---|
48 | Q "MSH"_RAHLFS_RAECH_RAHLFS_"RADIOLOGY"_RAHLFS_$P($G(^DIC(4,+$G(DUZ(2)),99)),"^")_$$STR(3)_$$HLDATE^HLFNC($$NOW^XLFDT(),"TS")_$$STR(2)_X
|
---|
49 | ;
|
---|
50 | MSA(X,Y) ; Set up the 'MSA' segment. P18
|
---|
51 | ; 'X' is passed in and identifies the message ID.
|
---|
52 | ; 'Y' is acknowledgement code
|
---|
53 | S:X']"" X="Message ID Error"
|
---|
54 | Q "MSA"_RAHLFS_Y_RAHLFS_$E(X,1,20)_$$STR(4)
|
---|
55 | MFI(X) ; Set up the 'MFI' segment
|
---|
56 | S @(RAVAR_RACNT_")")="MFI"_RAHLFS_RAFNUM
|
---|
57 | S @(RAVAR_RACNT_")")=@(RAVAR_RACNT_")")_RAECH(1)_RAFNAME_RAECH(1)
|
---|
58 | S @(RAVAR_RACNT_")")=@(RAVAR_RACNT_")")_"99DD"_RAHLFS_RAHLFS_X ;P18
|
---|
59 | S @(RAVAR_RACNT_")")=@(RAVAR_RACNT_")")_RAHLFS_RAHLFS_RAHLFS_"ER"
|
---|
60 | X RAINCR ; increment counter
|
---|
61 | Q
|
---|
62 | PID(Y) ; Create 'pid' segment
|
---|
63 | Q "PID"_$$STR(3)_+$P(Y,"^")_$$STR(2)_$P($G(^DPT(+$P(Y,"^"),0)),"^")
|
---|
64 | ;
|
---|
65 | PV1(Y) ; Create 'pv1' segment
|
---|
66 | ;Input: Y=zero node of the RAD/NUC MED ORDERS (#75.1) file
|
---|
67 | N DFN,RA,RARMBED,RAWARD,VAIP,RAPF
|
---|
68 | S DFN=+$P(Y,"^"),VAIP("D")=$P(Y,"^",21)
|
---|
69 | S RA("PV1",2)="O",RA("PV1",3)=+$P(Y,"^",22)
|
---|
70 | D IN5^VADPT S RAWARD=$G(VAIP(5)),RARMBED=$G(VAIP(6))
|
---|
71 | I RAWARD]"" D
|
---|
72 | . S RA("PV1",2)="I",RAWARD(44)=$P($G(^DIC(42,+RAWARD,44)),"^")
|
---|
73 | . S RA("PV1",3)=+RAWARD(44)_U_$P(RARMBED,"^",2)
|
---|
74 | . Q
|
---|
75 | S RAPF="PV1"_$$STR(2)_RA("PV1",2)_RAHLFS_RA("PV1",3)_$$STR(16) ;_"Visit #" was truncated for P18 ? Req 4
|
---|
76 | D PV1^RABWIBB
|
---|
77 | ; pv1^RABWIBB will redefine RAPF if the PFSS switch is on and there's a valid PFSS Account Reference
|
---|
78 | ; Otherwise, RAPF won't be changed
|
---|
79 | K RACCOUNT ; this variable was set earlier in FB^RABWIBB
|
---|
80 | Q RAPF
|
---|
81 | ;
|
---|
82 | PURGE K RAHLFS,RACNT,RAECH,RAFNAME,RAFNUM,RAINCR,RASUB,RATSTMP,RAVAR,RAXIT
|
---|
83 | PURGE1 ; kill only whole file update variables
|
---|
84 | K RA71,RA713,RACMCODE,RACMNOR,RACOST,RACPT,RAIEN71,RAIMGAB,RAMFE,RAMULT
|
---|
85 | K RAPHYAP,RAPRCTY,RAXT71
|
---|
86 | Q
|
---|
87 | DIAG(X,Y,Z) ; Pass back an "A" if any Dx code has 'Yes' in the 'Generate
|
---|
88 | ; Abnormal Alert' field.
|
---|
89 | N A,AAH,RA7003,RA783 S AAH=""
|
---|
90 | S RA7003=$G(^RADPT(X,"DT",Y,"P",Z,0)),RA7003(13)=+$P(RA7003,"^",13)
|
---|
91 | S RA783(0)=$G(^RA(78.3,RA7003(13),0))
|
---|
92 | S RA783(4)=$$UP^XLFSTR($P(RA783(0),"^",4))
|
---|
93 | S:RA783(4)="Y" AAH="A"
|
---|
94 | Q:AAH]"" AAH
|
---|
95 | S A=0 F S A=$O(^RADPT(X,"DT",Y,"P",Z,"DX",A)) Q:A'>0 D Q:AAH]""
|
---|
96 | . S RA783=+$G(^RADPT(X,"DT",Y,"P",Z,"DX",A,0))
|
---|
97 | . S RA783(0)=$G(^RA(78.3,RA783,0))
|
---|
98 | . S RA783(4)=$$UP^XLFSTR($P(RA783(0),"^",4))
|
---|
99 | . I RA783(4)="Y" S AAH="A"
|
---|
100 | . Q
|
---|
101 | Q AAH
|
---|
102 | PROCNDE(X) ; Check if the procedure has both an I-Type & Proc. Type
|
---|
103 | ; assigned. Pass back '1' if either the I-Type -or- Proc. Type
|
---|
104 | ; data is missing. '0' if everything is ok.
|
---|
105 | I $P(X(0),U,6)]"",($P(X(0),U,12)]"") Q 0
|
---|
106 | Q 1
|
---|
107 | STR(X) ; Pass back a predetermined # of '|' or other field separator
|
---|
108 | Q:$G(RAHLFS(0))']""!(+X=0) "" ; Quit if parent string i.e, 'RAHLFS(0)'
|
---|
109 | ; does not exist or +X evaluates to null.
|
---|
110 | ;
|
---|
111 | S:X<0 X=$$ABS^XLFMTH(X) ; If passed in negative, take absolute
|
---|
112 | ; value. Quit if 'X' is greater than the
|
---|
113 | ; length of our parent string.
|
---|
114 | ;
|
---|
115 | S:X["." X=X\1 ; If a non-integer, remove mantissa.
|
---|
116 | ;
|
---|
117 | Q:X>($L(RAHLFS(0))) "" ; If parameter greater than length of
|
---|
118 | ; string, pass back null.
|
---|
119 | Q $E(RAHLFS(0),1,X)
|
---|
120 | ;
|
---|
121 | CHKUSR(RADUZ) ; Check user status to 'DC' an order.
|
---|
122 | ; pass back '0' if non-active Rad/Nuc Med user
|
---|
123 | ; pass back '1' if active Rad/Nuc Med user
|
---|
124 | N RAINADT S RAINADT=+$P($G(^VA(200,RADUZ,"PS")),"^",4) ;inactivation DT
|
---|
125 | Q $S('($D(RADUZ)#2):0,'$D(^VA(200,RADUZ,0)):0,'$D(^("RAC")):0,'RAINADT:1,'$D(DT):0,DT'>RAINADT:1,1:0)
|
---|
126 | ;
|
---|
127 | ERR(RATXT,RAMSG,RAVAR) ; Call CPRS utility to log 'soft' errors.
|
---|
128 | ; Input: RATXT-text description of the error
|
---|
129 | ; RAMSG-HL7 message array
|
---|
130 | ; RAVAR-variables to be saved off
|
---|
131 | D EN^ORERR(RATXT,.RAMSG,.RAVAR)
|
---|
132 | Q
|
---|
133 | ;
|
---|
134 | MSG(RAPROTO,RAMSG) ; ship HL7 messages to CPRS from this entry point
|
---|
135 | ; input: RAPROTO - protocol to execute
|
---|
136 | ; RAMSG - message (in HL7 format)
|
---|
137 | D MSG^XQOR(RAPROTO,.RAMSG)
|
---|
138 | Q
|
---|
139 | ;
|
---|
140 | UPDATP(RAY) ;update the parent procedure when a descendent is
|
---|
141 | ;updated. Called from RAMAIN2 (procedure entry/edit)
|
---|
142 | ;input: RAY=ien of desc.^name of desc. (if existing record)
|
---|
143 | ; RAY=ien of desc.^name of desc.^1 (if new record)
|
---|
144 | W !!,$P(RAY,U,2)_" is a descendent procedure, updating parent(s)..."
|
---|
145 | N RAPIEN,RAQUIT S (RAPIEN,RAQUIT)=0
|
---|
146 | F S RAPIEN=$O(^RAMIS(71,"ADESC",+RAY,RAPIEN)) Q:'RAPIEN D Q:RAQUIT
|
---|
147 | .S RAPIEN(0)=$G(^RAMIS(71,RAPIEN,0))
|
---|
148 | .W !?2,"Updating parent: "_$E($P(RAPIEN(0),U),1,50)
|
---|
149 | .S RAPIEN("I")=$P($G(^RAMIS(71,RAPIEN,"I")),"^")
|
---|
150 | .S RAPIEN("S")=$S(RAPIEN("I")="":1,RAPIEN("I")>DT:1,1:0)
|
---|
151 | .L +^RAMIS(71,RAPIEN):300
|
---|
152 | .I '$T S RAQUIT=1 D Q
|
---|
153 | ..W !?2,"Parent Procedure: "_$E($P(RAPIEN(0),U),1,50)
|
---|
154 | ..W !?2,"being edited by another user, try again later!",$C(7)
|
---|
155 | ..Q
|
---|
156 | .D PROC^RAO7MFN(0,71,RAPIEN("S")_"^"_RAPIEN("S"),RAPIEN)
|
---|
157 | .L -^RAMIS(71,RAPIEN)
|
---|
158 | .Q
|
---|
159 | Q
|
---|
160 | ;----------------------------
|
---|
161 | ;called from
|
---|
162 | ;-Case # edit START1+16^RAEDCN
|
---|
163 | ;-Edit by patient
|
---|
164 | ;-Tracking
|
---|
165 | ;Saves proc ien before editing, locate the exam by patient, datetime and caseN
|
---|
166 | SVBEFOR(RAPATN,RAINVDT,RACIEN) ;P18;send radfn,radti,racni (instead of racn and new sequencing of params
|
---|
167 | ; RAPRIEN() holds "before" values
|
---|
168 | N RADATA,RAX,RA0,RA1,RA2,RA3
|
---|
169 | S RADATA=$G(^RADPT(RAPATN,"DT",RAINVDT,"P",RACIEN,0))
|
---|
170 | Q:RADATA="" ;failure
|
---|
171 | ; don't check parent here, since still need compare Req Phys & Proc Mods
|
---|
172 | S RAPRIEN=$P(RADATA,"^",2) ; procedure ien
|
---|
173 | S RAPRIEN(1)=RAPATN ; dfn
|
---|
174 | S RAPRIEN(2)=RAINVDT ; inverse date exm
|
---|
175 | S RAPRIEN(3)=RACIEN ; case ien
|
---|
176 | S RAPRIEN(4)=$P(RADATA,"^",14) ; req phy
|
---|
177 | D STR70^RAUTL10(.RAX,RAPATN,RAINVDT,RACIEN)
|
---|
178 | S RAPRIEN(5)=RAX ; string of proc mods
|
---|
179 | ; send "XX" if diffcs in Req.Phy &/or Proc Mods
|
---|
180 | ; Next lines are for RA*5*82
|
---|
181 | ; Save CPT modifiers before editing
|
---|
182 | S RAX=0 K RAPRIEN("CMOD")
|
---|
183 | F S RAX=$O(^RADPT(RAPATN,"DT",RAINVDT,"P",RACIEN,"CMOD",RAX)) Q:'RAX S RAPRIEN("CMOD",RAX)=+$G(^(RAX,0))
|
---|
184 | ; Save Tech comments before editing
|
---|
185 | S RAX=0 K RAPRIEN("TCOM")
|
---|
186 | F S RAX=$O(^RADPT(RAPATN,"DT",RAINVDT,"P",RACIEN,"L",RAX)) Q:'RAX S RAPRIEN("TCOM",RAX)=$G(^(RAX,"TCOM"))
|
---|
187 | Q ;OK
|
---|