1 | GMRCIEVT ;SLC/JFR - process events and build HL7 message; 1/27/03 09:23
|
---|
2 | ;;3.0;CONSULT/REQUEST TRACKING;**22,28,31**;DEC 27, 1997
|
---|
3 | ;
|
---|
4 | Q ;don't start at the top
|
---|
5 | TRIGR(IEN,ACTN) ;determine what action was taken on IFC and call event point
|
---|
6 | ;Input:
|
---|
7 | ; IEN = consult number from file 123
|
---|
8 | ; ACT = ien in 40 multiple corresponding to activity
|
---|
9 | ;
|
---|
10 | N ACTYPE
|
---|
11 | S ACTYPE=$P(^GMR(123,IEN,40,ACTN,0),U,2)
|
---|
12 | I 'ACTYPE Q
|
---|
13 | I ACTYPE=26 Q ;don't send admin corrections yet...
|
---|
14 | ;
|
---|
15 | ; check bkgrd job and run if overdue
|
---|
16 | I '$D(ZTQUEUED),$$GONOGO^GMRCIBKG D
|
---|
17 | . N ZTQUEUED S ZTQUEUED=1 D EN^GMRCIBKG ;remove ZTQUEUED?
|
---|
18 | ;
|
---|
19 | I $O(^GMR(123.6,"AC",IEN,ACTN),-1) D Q ;earlier pending activities
|
---|
20 | . I ACTYPE=22 Q ; not a trigger or not done here
|
---|
21 | . I ACTYPE=6 N GMRCQT D I $D(GMRCQT) Q
|
---|
22 | .. ;complete all transactions if IFC DC'd before request ever sent
|
---|
23 | .. I $O(^GMR(123.6,"AC",IEN,ACTN),-1)'=1 Q ;new request already sent
|
---|
24 | .. S GMRCQT=1
|
---|
25 | .. N DA,DIE,DR,GMRCACTS
|
---|
26 | .. S GMRCACTS=0
|
---|
27 | .. F S GMRCACTS=$O(^GMR(123.6,"AC",IEN,GMRCACTS)) Q:'GMRCACTS D
|
---|
28 | ... S DIE="^GMR(123.6,",DA=$O(^GMR(123.6,"AC",IEN,GMRCACTS,1,0))
|
---|
29 | ... S DR=".06///@" D ^DIE
|
---|
30 | . D LOGMSG^GMRCIUTL(IEN,ACTN,"",902) ;msg log entry but no msg sent
|
---|
31 | I ACTYPE=2!(ACTYPE=1) D NW(IEN) Q ;send new order
|
---|
32 | I ACTYPE=9!(ACTYPE=14) D RSLT(IEN,ACTN) Q ;inc report or add'l notes
|
---|
33 | I ACTYPE=10,$P(^GMR(123,IEN,40,ACTN,0),U,9) D RSLT(IEN,ACTN) Q ;comp
|
---|
34 | I ACTYPE=12 D RSLT(IEN,ACTN) Q ;dis-associate result
|
---|
35 | I ACTYPE=11 D RESUB^GMRCIEV1(IEN,ACTN) Q ;ed/resubmit
|
---|
36 | I ACTYPE=13 D RSLT(IEN,ACTN) Q ; addendum added
|
---|
37 | I ACTYPE=4 D SF^GMRCIEV1(IEN,ACTN) Q ; sig finding update
|
---|
38 | I ACTYPE=22 Q ;printed to is not a trigger
|
---|
39 | I ACTYPE=17 D FWD^GMRCIEV1(IEN,ACTN) Q ; forward
|
---|
40 | I ACTYPE=25 D FWD2IFC^GMRCIEV1(IEN,ACTN) Q ; FWD into an IFC service
|
---|
41 | D GENUPD(IEN,ACTN) ;all other updates
|
---|
42 | Q
|
---|
43 | NW(GMRCDA) ;build new order message for IFC
|
---|
44 | ; Input:
|
---|
45 | ; GMRCDA = ien from file 123
|
---|
46 | ;
|
---|
47 | N HL,HLL,SEG,GMRC773,GMRCIQT
|
---|
48 | S SEG=1
|
---|
49 | K ^TMP("HLS",$J)
|
---|
50 | D INIT^HLFNC2("GMRC IFC ORM EVENT",.HL)
|
---|
51 | I $G(HL) D Q ; if HL array can't be built, log it with an error
|
---|
52 | . D LOGMSG^GMRCIUTL(GMRCDA,GMRCACT,,904)
|
---|
53 | D I $D(GMRCIQT) D NOMPI(GMRCDA,1) Q ;build PID seg if not a local ICN
|
---|
54 | . N GMRCDFN S GMRCDFN=$P(^GMR(123,+GMRCDA,0),U,2)
|
---|
55 | . I '$G(GMRCDFN) S GMRCIQT=1 Q
|
---|
56 | . I $$GETICN^MPIF001(GMRCDFN)<1 S GMRCIQT=1 Q
|
---|
57 | . I $$IFLOCAL^MPIF001(GMRCDFN) S GMRCIQT=1 Q
|
---|
58 | . S ^TMP("HLS",$J,SEG)=$$EN^VAFCPID(GMRCDFN,"1,2,3,4,5,7,8,19")
|
---|
59 | . S SEG=SEG+1
|
---|
60 | . Q
|
---|
61 | S ^TMP("HLS",$J,SEG)=$$NWORC^GMRCISG1(GMRCDA) ; get ORC for new ord
|
---|
62 | S SEG=SEG+1
|
---|
63 | S ^TMP("HLS",$J,SEG)=$$OBR^GMRCISG1(GMRCDA) ;get OBR segment
|
---|
64 | S SEG=SEG+1
|
---|
65 | D ;build reason for request into OBX segment(s)
|
---|
66 | . K ^TMP("GMRCRFR",$J)
|
---|
67 | . D OBXWP^GMRCISEG(GMRCDA,"NW",1,$NA(^TMP("GMRCRFR",$J)))
|
---|
68 | . I '$D(^TMP("GMRCRFR",$J)) Q
|
---|
69 | . N I S I=0
|
---|
70 | . F S I=$O(^TMP("GMRCRFR",$J,I)) Q:'I D
|
---|
71 | .. S ^TMP("HLS",$J,SEG)=^TMP("GMRCRFR",$J,I)
|
---|
72 | .. S SEG=SEG+1
|
---|
73 | . K ^TMP("GMRCRFR",$J)
|
---|
74 | . Q
|
---|
75 | S ^TMP("HLS",$J,SEG)=$$OBXPD^GMRCISG1(GMRCDA) ; build prov DX in OBX
|
---|
76 | S SEG=SEG+1
|
---|
77 | S ^TMP("HLS",$J,SEG)=$$OBXTZ^GMRCISEG ;always send local time zone
|
---|
78 | S HLL("LINKS",1)=$$ROUTE(GMRCDA) I '$L(HLL("LINKS",1)) D Q ;log error
|
---|
79 | . D LOGMSG^GMRCIUTL(IEN,ACTN,"",903)
|
---|
80 | D GENERATE^HLMA("GMRC IFC ORM EVENT","GM",1,.GMRC773)
|
---|
81 | N ERR S ERR=$S($P(GMRC773,U,2):904,1:"")
|
---|
82 | D LOGMSG^GMRCIUTL(GMRCDA,1,+GMRC773,ERR)
|
---|
83 | Q
|
---|
84 | ;
|
---|
85 | GENUPD(GMRCDA,GMRCACT) ;build msg and send upon REC, SC or ADD CMT event
|
---|
86 | N HL,HLL,SEG,GMRC773,GMRCIQT
|
---|
87 | S SEG=1
|
---|
88 | K ^TMP("HLS",$J)
|
---|
89 | D INIT^HLFNC2("GMRC IFC ORM EVENT",.HL)
|
---|
90 | I $G(HL) D Q ; if HL array can't be built, log it with an error
|
---|
91 | . D LOGMSG^GMRCIUTL(GMRCDA,GMRCACT,,904)
|
---|
92 | D I $D(GMRCIQT) D NOMPI(GMRCDA,GMRCACT) Q ;build PID seg if nat'l ICN
|
---|
93 | . N GMRCDFN S GMRCDFN=$P(^GMR(123,+GMRCDA,0),U,2)
|
---|
94 | . I '$G(GMRCDFN) S GMRCIQT=1 Q
|
---|
95 | . I $$GETICN^MPIF001(GMRCDFN)<1 S GMRCIQT=1 Q
|
---|
96 | . I $$IFLOCAL^MPIF001(GMRCDFN) S GMRCIQT=1 Q
|
---|
97 | . S ^TMP("HLS",$J,SEG)=$$EN^VAFCPID(GMRCDFN,"1,2,3,4,5,7,8,19")
|
---|
98 | . S SEG=SEG+1
|
---|
99 | . Q
|
---|
100 | D ;build ORC seg based on GMRCACT
|
---|
101 | . N ACTVT,OC,OS
|
---|
102 | . S ACTVT=$P(^GMR(123,GMRCDA,40,GMRCACT,0),U,2) ; get activity
|
---|
103 | . ;set order control for ORC seg:
|
---|
104 | . ; v-- IP=cmt RE=adm comp OD=DC OC=cancel SC=sch or receive
|
---|
105 | . S OC=$S(ACTVT=20:"IP",ACTVT=10:"RE",ACTVT=6:"OD",ACTVT=19:"OC",1:"SC")
|
---|
106 | . ;set order status for ORC seg:
|
---|
107 | . ; v-- SC=sch RE=adm comp DC=DC CA=cancel IP=cmt or receive
|
---|
108 | . S OS=$S(ACTVT=8:"SC",ACTVT=10:"CM",ACTVT=6:"DC",ACTVT=19:"CA",1:"IP")
|
---|
109 | . S ^TMP("HLS",$J,SEG)=$$ORC^GMRCISEG(GMRCDA,OC,OS,GMRCACT)
|
---|
110 | . S SEG=SEG+1
|
---|
111 | . Q
|
---|
112 | I $L($P(^GMR(123,GMRCDA,0),U,19)) D ;send sig findings
|
---|
113 | . S ^TMP("HLS",$J,SEG)=$$OBXSF^GMRCISEG(GMRCDA)
|
---|
114 | . S SEG=SEG+1
|
---|
115 | I $O(^GMR(123,GMRCDA,40,GMRCACT,1,0)) D ;load up a comment if there
|
---|
116 | . N I
|
---|
117 | . K ^TMP("GMRCMT",$J)
|
---|
118 | . I $P(^TMP("HLS",$J,SEG-1),"|",2)'["O" D
|
---|
119 | .. D OBXWP^GMRCISEG(GMRCDA,"",GMRCACT,$NA(^TMP("GMRCMT",$J)))
|
---|
120 | . I $P(^TMP("HLS",$J,SEG-1),"|",2)["O" D
|
---|
121 | .. N GMRCMT
|
---|
122 | .. D NTE^GMRCISEG(GMRCDA,GMRCACT,.GMRCMT)
|
---|
123 | .. I $D(GMRCMT) M ^TMP("GMRCMT",$J)=GMRCMT
|
---|
124 | . Q:'$O(^TMP("GMRCMT",$J,0))
|
---|
125 | . S I=0 F S I=$O(^TMP("GMRCMT",$J,I)) Q:'I D
|
---|
126 | .. S ^TMP("HLS",$J,SEG)=^TMP("GMRCMT",$J,I)
|
---|
127 | .. S SEG=SEG+1
|
---|
128 | . K ^TMP("GMRCMT",$J)
|
---|
129 | . Q
|
---|
130 | S ^TMP("HLS",$J,SEG)=$$OBXTZ^GMRCISEG ;always include local time zone
|
---|
131 | S HLL("LINKS",1)=$$ROUTE(GMRCDA) I '$L(HLL("LINKS",1)) D Q ;log error
|
---|
132 | . D LOGMSG^GMRCIUTL(IEN,ACTN,"",903)
|
---|
133 | D GENERATE^HLMA("GMRC IFC ORM EVENT","GM",1,.GMRC773)
|
---|
134 | N ERR S ERR=$S($P(GMRC773,U,2):904,1:"") ; if err from HL7, log it
|
---|
135 | D LOGMSG^GMRCIUTL(GMRCDA,GMRCACT,+GMRC773,ERR)
|
---|
136 | Q
|
---|
137 | ;
|
---|
138 | RSLT(GMRCDA,GMRCACT) ;attach or dis-associate results and update
|
---|
139 | N HL,HLL,SEG,GMRC773,GMRCIQT
|
---|
140 | S SEG=1
|
---|
141 | K ^TMP("HLS",$J)
|
---|
142 | D INIT^HLFNC2("GMRC IFC ORM EVENT",.HL)
|
---|
143 | I $G(HL) D Q ; if HL array can't be built, log it with an error
|
---|
144 | . D LOGMSG^GMRCIUTL(GMRCDA,GMRCACT,,904)
|
---|
145 | D I $D(GMRCIQT) D NOMPI(GMRCDA,GMRCACT) Q ;build PID seg if nat'l ICN
|
---|
146 | . N GMRCDFN S GMRCDFN=$P(^GMR(123,+GMRCDA,0),U,2)
|
---|
147 | . I '$G(GMRCDFN) S GMRCIQT=1 Q
|
---|
148 | . I $$GETICN^MPIF001(GMRCDFN)<1 S GMRCIQT=1 Q
|
---|
149 | . I $$IFLOCAL^MPIF001(GMRCDFN) S GMRCIQT=1 Q
|
---|
150 | . S ^TMP("HLS",$J,SEG)=$$EN^VAFCPID(GMRCDFN,"1,2,3,4,5,7,8,19")
|
---|
151 | . S SEG=SEG+1
|
---|
152 | . Q
|
---|
153 | D ;build ORC seg based on GMRCACT
|
---|
154 | . N ACTVT,OC,OS
|
---|
155 | . S ACTVT=$P(^GMR(123,GMRCDA,40,GMRCACT,0),U,2) ; get activity
|
---|
156 | . S OC="RE"
|
---|
157 | . S OS=$S(ACTVT=9:"A",ACTVT=12:"IP",1:"CM") ; A=part res CM=comp IP=dis
|
---|
158 | . S ^TMP("HLS",$J,SEG)=$$ORC^GMRCISEG(GMRCDA,OC,OS,GMRCACT)
|
---|
159 | . S SEG=SEG+1
|
---|
160 | I $P(^GMR(123,GMRCDA,40,GMRCACT,0),U,2)'=99 D
|
---|
161 | . S ^TMP("HLS",$J,SEG)=$$OBXRSLT^GMRCISEG(GMRCDA,GMRCACT)
|
---|
162 | . S SEG=SEG+1
|
---|
163 | S ^TMP("HLS",$J,SEG)=$$OBXTZ^GMRCISEG ;always include local time zone
|
---|
164 | S HLL("LINKS",1)=$$ROUTE(GMRCDA) I '$L(HLL("LINKS",1)) D Q ;log error
|
---|
165 | . D LOGMSG^GMRCIUTL(IEN,ACTN,"",903)
|
---|
166 | D GENERATE^HLMA("GMRC IFC ORM EVENT","GM",1,.GMRC773)
|
---|
167 | N ERR S ERR=$S($P(GMRC773,U,2):904,1:"") ; if err from HL7, log it
|
---|
168 | D LOGMSG^GMRCIUTL(GMRCDA,GMRCACT,+GMRC773,ERR)
|
---|
169 | Q
|
---|
170 | ;
|
---|
171 | NOMPI(GMRCIEN,GMRCACTV) ;process MPI exception
|
---|
172 | N GMRCDFN
|
---|
173 | S GMRCDFN=$P(^GMR(123,GMRCIEN,0),U,2)
|
---|
174 | D PTMPIER^GMRCIERR(GMRCDFN) ; send msg to local group for ICN problem
|
---|
175 | D LOGMSG^GMRCIUTL(GMRCIEN,GMRCACTV,,202) ;put inc. entry in MSG log
|
---|
176 | Q
|
---|
177 | ;
|
---|
178 | ROUTE(GMRCDA) ; determine correct routing for IFC msg
|
---|
179 | ; Input:
|
---|
180 | ; GMRCDA = ien from file 123
|
---|
181 | ;
|
---|
182 | ; Output:
|
---|
183 | ; the logical link to send the message to in format
|
---|
184 | ; "GMRC IFC SUBSC^VHAHIN"
|
---|
185 | ;
|
---|
186 | N SITE,GMRCLINK,STA
|
---|
187 | S SITE=$P(^GMR(123,GMRCDA,0),U,23) I 'SITE Q "" ;no ROUTING FACILITY
|
---|
188 | S STA=$$STA^XUAF4(SITE)
|
---|
189 | I '$L(STA) Q "" ;can't find station num for that site
|
---|
190 | D LINK^HLUTIL3(STA,.GMRCLINK,"I")
|
---|
191 | S GMRCLINK=$O(GMRCLINK(0)) I 'GMRCLINK Q "" ; no link for that site
|
---|
192 | S GMRCLINK=GMRCLINK(GMRCLINK) I '$L(GMRCLINK) Q "" ;no link name
|
---|
193 | Q "GMRC IFC SUBSC^"_GMRCLINK
|
---|