1 | TMGRPC4B ;TMG/kst/Support Functions for DxLink ;11/16/08
|
---|
2 | ;;1.0;TMG-LIB;**1**;11/16/08
|
---|
3 | ;
|
---|
4 | ;"TMG RPC FUNCTIONS for a DxLinkprogram
|
---|
5 | ;
|
---|
6 | ;"Kevin Toppenberg MD
|
---|
7 | ;"GNU Lessor General Public License (LGPL) applies
|
---|
8 | ;"7/20/08
|
---|
9 | ;
|
---|
10 | ;"=======================================================================
|
---|
11 | ;" RPC -- Public Functions.
|
---|
12 | ;"=======================================================================
|
---|
13 | ;" <none>
|
---|
14 | ;"=======================================================================
|
---|
15 | ;"PRIVATE API FUNCTIONS
|
---|
16 | ;"=======================================================================
|
---|
17 | ;"LOOKUPAT(TMGOUT,TMGPARAMS) -- find a patient that is already registered, using exact search
|
---|
18 | ;"ENSURVST(TMGOUT,TMGPARAMS)--ensure that a Visit entry exists for appt info
|
---|
19 | ;
|
---|
20 | ;"=======================================================================
|
---|
21 | ;"Dependencies:
|
---|
22 | ;" TMGRPC3*,TMGRPC4*
|
---|
23 | ;" TMGGDFN
|
---|
24 | ;
|
---|
25 | ;"=======================================================================
|
---|
26 | ;
|
---|
27 | LOOKUPAT(TMGOUT,TMGPARAMS) ;"LOOKUP PATIENT
|
---|
28 | ;"Purpose: To find a patient that is already registered, using exact search
|
---|
29 | ;"Input: TMGOUT -- an OUT PARAMETER, PASS BY REFERENCE.
|
---|
30 | ;" TMGPARAMS -- LNAME,FName^DOB^SequelPMSAccount#
|
---|
31 | ;"Output: TMGOUT is filled as follows:
|
---|
32 | ;" TMGOUT(0)="1^Success" or "-1^Message"
|
---|
33 | ;" TMGOUT(1)=DFN (or 0 if not found)
|
---|
34 | ;"Results: None
|
---|
35 | ;
|
---|
36 | NEW TMGA,TMGDFN
|
---|
37 | SET TMGA(.01)=$PIECE(TMGPARAMS,"^",1)
|
---|
38 | IF TMGA(.01)[", " DO
|
---|
39 | . NEW SPEC SET SPEC(", ")=","
|
---|
40 | . SET TMGA(.01)=$$REPLACE^XLFSTR(TMGA(.01),.SPEC)
|
---|
41 | SET TMGA(.03)=$PIECE(TMGPARAMS,"^",2)
|
---|
42 | SET TMGA(22701)=$PIECE(TMGPARAMS,"^",3)
|
---|
43 | SET TMGOUT(1)=$$GetDFN2^TMGGDFN(.TMGA,0)
|
---|
44 | IF TMGOUT(1)>0 SET TMGOUT(0)="1^Success"
|
---|
45 | ELSE SET TEMGOUT(0)="-1^Patient not found: "_TMGPARAMS
|
---|
46 | ;
|
---|
47 | QUIT
|
---|
48 | ;
|
---|
49 | ENSURVST(TMGOUT,TMGPARAMS) ;"ENSURE VISIT
|
---|
50 | ;"Purpose: To ensure that a Visit entry exists for appt info
|
---|
51 | ;"Input: TMGOUT -- an OUT PARAMETER, PASS BY REFERENCE.
|
---|
52 | ;" TMGPARAMS -- DFN^Date@Time^DurationMins^Reason^Location^Provider^Comments
|
---|
53 | ;" Notes: DFN -- patient IEN
|
---|
54 | ;" Date@Time -- time of appt
|
---|
55 | ;" DurationMinutes -- duration of appt.
|
---|
56 | ;" Reason -- text reason for purpose of appt.
|
---|
57 | ;" Location -- clinic name as stored in Fileman
|
---|
58 | ;" Provider -- Sequel ShortName for appt provider
|
---|
59 | ;" Comments -- misc free text.
|
---|
60 | ;"Output: TMGOUT is filled as follows:
|
---|
61 | ;" TMGOUT(0)="1^Success" or "-1^Message"
|
---|
62 | ;" TMGOUT(1)=IEN (or 0 if not found)
|
---|
63 | ;"Results: None
|
---|
64 | ;"Note: I have added a custom XRef on the HOSPITAL LOCATION file, and a
|
---|
65 | ;" new field (22700, PMS NAME), that allows the location to be
|
---|
66 | ;" looked up by the name provided by the PMS.
|
---|
67 | ;" ** If this were to be used in another site, this would need to be
|
---|
68 | ;" addressed. A value would need to be put into that 22700 field etc.
|
---|
69 | ;
|
---|
70 | SET TMGOUT(0)="1^Success" ;"set default result
|
---|
71 | SET TMGOUT(1)=0
|
---|
72 |
|
---|
73 |
|
---|
74 | if $data(^TMG("TMP","Killthis","ENSURVST")) do goto T2
|
---|
75 | . set TMGPARAMS=$get(^TMG("TMP","Killthis","ENSURVST"))
|
---|
76 |
|
---|
77 | merge ^TMG("TMP","Killthis","ENSURVST")=TMGPARAMS
|
---|
78 | goto EVSTDONE
|
---|
79 | ;
|
---|
80 |
|
---|
81 | T2
|
---|
82 | NEW TMGDFN SET TMGDFN=+$PIECE(TMGPARAMS,"^",1)
|
---|
83 | NEW TMGVDT SET TMGVDT=$PIECE(TMGPARAMS,"^",2)
|
---|
84 | NEW TMGDUR SET TMGDUR=$PIECE(TMGPARAMS,"^",3)
|
---|
85 | NEW TMGRSN SET TMGRSN=$PIECE(TMGPARAMS,"^",4)
|
---|
86 | ;"Note: TMGLOC holds a Sequl Shortname. Depends on added 'TMG' xref in file 4
|
---|
87 | NEW TMGLOC SET TMGLOC=$PIECE(TMGPARAMS,"^",5)
|
---|
88 | ;"NEW TMGDOC SET TMGDOC=$PIECE(TMGPARAMS,"^",6)
|
---|
89 | NEW TMGCOM SET TMGCOM=$PIECE(TMGPARAMS,"^",7)
|
---|
90 |
|
---|
91 | ;
|
---|
92 | IF TMGDFN'>0 DO GOTO EVSTDONE
|
---|
93 | . SET TMGOUT(0)="-1^Patient DFN > 0 not specified: "_TMGPARAMS
|
---|
94 | NEW TMGDFNIH SET TMGDFNIH=TMGDFN ;"IEN's same in file 9000001 <--> 2
|
---|
95 | ;
|
---|
96 | ;"new TMGLIEN,DIC,X,Y
|
---|
97 | ;"set DIC=4,DIC(0)="M",X=TMGLOC
|
---|
98 | ;"do ^DIC
|
---|
99 |
|
---|
100 | ;
|
---|
101 | SET TMGVDT=$TRANSLATE(TMGVDT," ","")
|
---|
102 | NEW TMGFMDT,TMGMSG
|
---|
103 | DO DT^DILF("R",TMGVDT,.TMGFMDT,,"TMGMSG")
|
---|
104 | IF (+$get(TMGFMDT)'>0)!$DATA(TMGMSG) DO GOTO EVSTDONE
|
---|
105 | . SET TMGOUT(0)="-1^Invalid Date/Time: "_TMGVDT
|
---|
106 | ;
|
---|
107 | ;"IF TMGDOC="" DO GOTO EVSTDONE
|
---|
108 | ;". SET TMGOUT(0)="-1^No provider specified: "_TMGPARAMS
|
---|
109 | ;"NEW TMGIEN2 SET TMGIEN2=$ORDER(^VA(200,"TMG",TMGDOC,""))
|
---|
110 | ;"IF TMGIEN2'>0 DO GOTO EVSTDONE
|
---|
111 | ;". SET TMGOUT(0)="-1^Unable to convert Sequel shortname '"_TMGDOC_"' to a VistA provider name"
|
---|
112 | ;"SET TMGDOC=$PIECE($GET(^VA(200,TMGIEN2,0)),"^",1)
|
---|
113 | ;
|
---|
114 | NEW TMGFDA,TMGIEN,TMGMSG,TMGIENS
|
---|
115 | ;"Look for existing visit
|
---|
116 | NEW TMGI SET TMGI=""
|
---|
117 | NEW TMGDONE SET TMGDONE=0
|
---|
118 | FOR SET TMGI=$ORDER(^AUPNVSIT("C",TMGDFNIH,TMGI)) QUIT:(+TMGI'>0)!TMGDONE DO
|
---|
119 | . NEW VDT SET VDT=$PIECE($GET(^AUPNVSIT(TMGI,0)),"^",1) ;"0;1=VISIT DATE/TIME
|
---|
120 | . NEW X1,X2,X
|
---|
121 | . SET X1=VDT,X2=TMGFMDT
|
---|
122 | . DO ^%DTC ;"Return difference in days between dates: X=X1-X2
|
---|
123 | . IF X=0 DO QUIT ;"Later could do a more strict compare, i.e. same TIME
|
---|
124 | . . SET TMGDONE=1
|
---|
125 | IF TMGI>0 DO
|
---|
126 | . SET TMGIEN=TMGI
|
---|
127 | . SET TMGIENS=TMGIEN_","
|
---|
128 | ELSE DO
|
---|
129 | . SET TMGIEN=0
|
---|
130 | . SET TMGIENS="+1,"
|
---|
131 | ;
|
---|
132 | SET TMGFDA(9000010,TMGIENS,.01)=TMGVDT ;".01-VISIT/ADMIT DATE&TIME
|
---|
133 | ;"SET TMGFDA(9000010,TMGIENS,.02)="NOW" ;".02-DATE VISIT CREATED
|
---|
134 | SET TMGFDA(9000010,TMGIENS,.03)="OTHER" ;".03-TYPE
|
---|
135 | SET TMGFDA(9000010,TMGIENS,.05)="`"_TMGDFNIH ;".05-PATIENT NAME
|
---|
136 | SET TMGFDA(9000010,TMGIENS,.06)=TMGLOC ;".06-LOC. OF ENCOUNTER
|
---|
137 | SET TMGFDA(9000010,TMGIENS,.07)="AMBULATORY" ;".07-SERVICE CATEGORY
|
---|
138 | SET TMGFDA(9000010,TMGIENS,.09)=1 ;".09-DEPENDENT ENTRY COUNT
|
---|
139 | ;"SET TMGFDA(9000010,TMGIENS,.13)="NOW" ;".13-DATE LAST MODIFIED
|
---|
140 | SET TMGFDA(9000010,TMGIENS,.22)=TMGLOC ;".22-HOSPITAL LOCATION
|
---|
141 | SET TMGFDA(9000010,TMGIENS,.23)="`"_DUZ ;".23-CREATED BY USER
|
---|
142 | SET TMGFDA(9000010,TMGIENS,.24)="TMG RPC CONTEXT DXLINK" ;".24-OPTION USED TO CREATE
|
---|
143 | SET TMGFDA(9000010,TMGIENS,15002)="OUT" ;"15002-PATIENT STATUS IN/OUT
|
---|
144 | SET TMGFDA(9000010,TMGIENS,15003)="PRIMARY" ;"15003-ENCOUNTER TYPE
|
---|
145 | SET TMGFDA(9000010,TMGIENS,81202)="TMG" ;"81202-PACKAGE (or should value be 'PCE'?)
|
---|
146 | SET TMGFDA(9000010,TMGIENS,81203)="TEXT INTEGRATION UTILITIES"
|
---|
147 | ;"?? Add field: 15001-VISIT ID : 10GJ-TEST <-- added by Visit Tracking
|
---|
148 | ;
|
---|
149 | IF TMGIEN=0 DO
|
---|
150 | . ;"Add record and return a pointer to it.
|
---|
151 | . KILL TMGIEN
|
---|
152 | . DO UPDATE^DIE("ES","TMGFDA","TMGIEN","TMGMSG")
|
---|
153 | . SET TMGOUT(1)=+$get(TMGIEN(1))
|
---|
154 | ELSE DO
|
---|
155 | . KILL TMGFDA(9000010,TMGIENS,.05) ;"FM says: 'Can't be edited'
|
---|
156 | . KILL TMGFDA(9000010,TMGIENS,81203) ;"FM says: 'Can't be edited'
|
---|
157 | . ;"Store values provided in existing record
|
---|
158 | . DO FILE^DIE("E","TMGFDA","TMGMSG")
|
---|
159 | . SET TMGOUT(1)=TMGIEN
|
---|
160 | IF $DATA(TMGMSG("DIERR")) DO
|
---|
161 | . SET TMGOUT(0)="-1^See Fileman message"
|
---|
162 | . SET TMGOUT(1)=$$GETERSTR^TMGRPC3G(.TMGMSG)
|
---|
163 | ;
|
---|
164 | EVSTDONE ;
|
---|
165 | QUIT
|
---|
166 | ;
|
---|
167 | ;
|
---|
168 | APPTLST(TMGOUT,TMGPARAMS) ;"APPT LIST
|
---|
169 | ;"Purpose: Return a list of appts for given date.
|
---|
170 | ;"Input: TMGOUT -- an OUT PARAMETER, PASS BY REFERENCE.
|
---|
171 | ;" TMGPARAMS -- Date^Location(Optional)
|
---|
172 | ;" Notes: Date -- date to look for dates. In external (user-input) format
|
---|
173 | ;" Location -- clinic name as stored in Fileman
|
---|
174 | ;"Output: TMGOUT is filled as follows:
|
---|
175 | ;" TMGOUT(0)="1^Success" or "-1^Message"
|
---|
176 | ;" TMGOUT(1)=(0 if none found)
|
---|
177 | ;" TMGOUT(1)=DateTime^PatientName^DFN^DOB^SeqHRN^Location(Sequel ShortName)^CPTList^ICD9List
|
---|
178 | ;" CPTList format: 'Code#|CodeName;Code#|CodeName;Code#|CodeName...;'
|
---|
179 | ;" ICD9List format: 'Code#|CodeName;Code#|CodeName;Code#|CodeName...;'
|
---|
180 | ;"Results: None
|
---|
181 | ;"Note: I have added a custom XRef on the HOSPITAL LOCATION file, and a
|
---|
182 | ;" new field (22700, PMS NAME), that allows the location to be
|
---|
183 | ;" looked up by the name provided by the PMS.
|
---|
184 | ;" ** If this were to be used in another site, this would need to be
|
---|
185 | ;" addressed. A value would need to be put into that 22700 field etc.
|
---|
186 | ;
|
---|
187 | SET TMGOUT(0)="1^Success" ;"set default result
|
---|
188 | SET TMGOUT(1)=0
|
---|
189 | ;
|
---|
190 | NEW TMGVDT SET TMGVDT=$PIECE(TMGPARAMS,"^",1)
|
---|
191 | NEW TMGLOC SET TMGLOC=$PIECE(TMGPARAMS,"^",2)
|
---|
192 | ;
|
---|
193 | NEW TMGLIEN SET TMGLIEN=0
|
---|
194 | IF TMGLOC="" GOTO AL2
|
---|
195 | NEW X,Y,DIC
|
---|
196 | SET DIC=44,DIC(0)="M",X=TMGLOC
|
---|
197 | DO ^DIC
|
---|
198 | IF Y'>0 DO GOTO APLDONE
|
---|
199 | . SET TMGOUT(0)="-1^Invalid location name: '"_TMGLOC_"'"
|
---|
200 | SET TMGLIEN=+Y
|
---|
201 | AL2 ;
|
---|
202 | SET TMGVDT=$TRANSLATE(TMGVDT," ","")
|
---|
203 | NEW TMGFMDT,TMGMSG
|
---|
204 | DO DT^DILF("X",TMGVDT,.TMGFMDT,,"TMGMSG")
|
---|
205 | IF (+$get(TMGFMDT)'>0)!$DATA(TMGMSG) DO GOTO APLDONE
|
---|
206 | . SET TMGOUT(0)="-1^Invalid Date/Time: "_TMGVDT
|
---|
207 | ;
|
---|
208 | NEW TMGARRAY,TMGS
|
---|
209 | NEW TMGCOUNT SET TMGCOUNT=1
|
---|
210 | NEW TMG1DT SET TMG1DT=TMGFMDT
|
---|
211 | FOR SET TMG1DT=$ORDER(^AUPNVSIT("B",TMG1DT)) Q:(TMG1DT'>0)!(TMG1DT>(TMGFMDT+1)) DO
|
---|
212 | . NEW IEN SET IEN=""
|
---|
213 | . FOR SET IEN=$ORDER(^AUPNVSIT("B",TMG1DT,IEN)) Q:(IEN'>0) DO
|
---|
214 | . . NEW LOC SET LOC=+$P($G(^AUPNVSIT(IEN,0)),U,22)
|
---|
215 | . . IF (TMGLIEN>0)&(LOC'=TMGLIEN) QUIT
|
---|
216 | . . NEW DFN SET DFN=+$P($G(^AUPNVSIT(IEN,0)),U,5) Q:(DFN'>0)
|
---|
217 | . . NEW Y SET Y=+$P($G(^AUPNVSIT(IEN,0)),U,1)
|
---|
218 | . . DO DD^%DT
|
---|
219 | . . SET TMGS=Y_"^"
|
---|
220 | . . SET TMGS=TMGS_$P($G(^DPT(DFN,0)),U,1)_"^"_DFN_"^"
|
---|
221 | . . SET Y=$P($G(^DPT(DFN,0)),U,3) DO DD^%DT SET TMGS=TMGS_Y_"^"
|
---|
222 | . . NEW SHRN SET SHRN=$P($G(^DPT(DFN,"TMG")),U,2)
|
---|
223 | . . SET TMGS=TMGS_SHRN_"^"
|
---|
224 | . . SET TMGS=TMGS_$PIECE($GET(^SC(LOC,"TMG")),U,1)_"^" ;"Custom field 22700
|
---|
225 | . . SET TMGS=TMGS_$$CPTLIST(IEN)_"^"
|
---|
226 | . . SET TMGS=TMGS_$$ICDLIST(IEN)_"^"
|
---|
227 | . . SET TMGOUT(TMGCOUNT)=TMGS
|
---|
228 | . . SET TMGCOUNT=TMGCOUNT+1
|
---|
229 | ;
|
---|
230 | APLDONE ;
|
---|
231 | QUIT
|
---|
232 | ;
|
---|
233 | CPTLIST(VSTIEN) ;
|
---|
234 | ;"Purpose: To return a list of CPT's associated with given visit.
|
---|
235 | ;"Input: VSTIEN -- IEN in VISIT file (9000010)
|
---|
236 | ;"Results: 'Code#|CodeName;Code#|CodeName;Code#|CodeName...;' , or '' if none found
|
---|
237 | NEW RESULT SET RESULT=""
|
---|
238 | NEW IEN SET IEN=""
|
---|
239 | FOR SET IEN=$ORDER(^AUPNVCPT("AD",VSTIEN,IEN)) QUIT:(IEN="") DO
|
---|
240 | . NEW CPTIEN SET CPTIEN=$P($G(^AUPNVCPT(IEN,0)),U,1) ;"0;1=CPT Name
|
---|
241 | . NEW CODESTR SET CODESTR=$P($G(^ICPT(CPTIEN,0)),U,1)
|
---|
242 | . NEW DESCR SET DESCR=$P($G(^ICPT(CPTIEN,0)),U,2)
|
---|
243 | . IF (CODESTR="")&(DESCR="") QUIT
|
---|
244 | . SET RESULT=RESULT_CODESTR_"|"_DESCR_";"
|
---|
245 | QUIT RESULT
|
---|
246 | ;
|
---|
247 | ICDLIST(VSTIEN) ;
|
---|
248 | ;"Purpose: To return a list of ICD9 codes associated with given visit.
|
---|
249 | ;"Input: VSTIEN -- IEN in VISIT file (9000010)
|
---|
250 | ;"Results: 'Code#|CodeName;Code#|CodeName;Code#|CodeName...;' , or '' if none found
|
---|
251 | NEW RESULT SET RESULT=""
|
---|
252 | NEW IEN SET IEN=""
|
---|
253 | FOR SET IEN=$ORDER(^AUPNVPOV("AD",VSTIEN,IEN)) QUIT:(IEN="") DO
|
---|
254 | . NEW ICDIEN SET ICDIEN=$P($G(^AUPNVPOV(IEN,0)),U,1) ;"0;1=POV
|
---|
255 | . NEW CODESTR SET CODESTR=$P($G(^ICD9(ICDIEN,0)),U,1)
|
---|
256 | . NEW DESCR SET DESCR=$P($G(^ICD9(ICDIEN,0)),U,3)
|
---|
257 | . IF (CODESTR="")&(DESCR="") QUIT
|
---|
258 | . SET RESULT=RESULT_CODESTR_"|"_DESCR_";"
|
---|
259 | QUIT RESULT
|
---|