1 | TMGPUTN0 ;TMG/kst/TIU Document Upload look-up function ;03/25/06; 5/2/10
|
---|
2 | ;;1.0;TMG-LIB;**1**;04/25/04
|
---|
3 |
|
---|
4 | ;"TIU Document Upload look-up function
|
---|
5 |
|
---|
6 | ;"Kevin Toppenberg MD
|
---|
7 | ;"GNU General Public License (GPL) applies
|
---|
8 | ;"4-25-2004
|
---|
9 |
|
---|
10 |
|
---|
11 | LOOKUP(DocTitle,Autosign) ;
|
---|
12 | ;"-----------------------------------------------------------------------------------
|
---|
13 | ;"Upload look-up function
|
---|
14 | ;"by Kevin Toppenberg
|
---|
15 | ;"4-25-2004
|
---|
16 | ;"
|
---|
17 | ;"PURPOSE:
|
---|
18 | ;"This code is used as look-up code by the TIU document upload routines.
|
---|
19 | ;"It has a very specific purpose. It was written for uploading documents
|
---|
20 | ;" from a Medic EMR system. Notes had been dumped out of that system, and
|
---|
21 | ;" were to be ported into VistA
|
---|
22 | ;"Each note has a header with patient name, dob, ssnum, chart#, provider
|
---|
23 | ;"Addendum -- this code will also work with less extensive patient data.
|
---|
24 | ;"
|
---|
25 | ;"INPUT
|
---|
26 | ;" The variable (with global scope) listed below are expected as input.
|
---|
27 | ;" Not all will be required every time, however.
|
---|
28 | ;" DocTitle -- this is the type of document type. i.e. 'OFFICE VISIT'
|
---|
29 | ;" This will be used so that this code can service multiple
|
---|
30 | ;" types, i.e. NOTE, PRESCRIPTION CALL IN, etc.
|
---|
31 | ;" Autosign -- [OPTIONAL] if value=1 then document will be created as SIGNED
|
---|
32 | ;"Results: Document number that uploaded code should be put into is returned in variable Y
|
---|
33 | ;"
|
---|
34 | ;"
|
---|
35 | ;"*How it works*:
|
---|
36 | ;"A remote computer connects to the server running VistA. This remote computer must be
|
---|
37 | ;" able to upload a file using kermit. The only way I know to do this is to be on a PC
|
---|
38 | ;" using a terminal emulator program that has kermit upload ability.
|
---|
39 | ;"From this remote session, get into the TIU menu system and navigate to the option to
|
---|
40 | ;" upload a document. Note, one's upload parameters must be set up for this to work.
|
---|
41 | ;"The remote user will see a #N3, and use this que to acutally upload the file.
|
---|
42 | ;"After the file is uploaded, it is then processed. Each document specifies what 'type' it is
|
---|
43 | ;" for example 'OFFICE VISIT'
|
---|
44 | ;"The server then loads up the parameters for OFFICE VISIT and processes each item in the header.
|
---|
45 | ;"Here is an example progress note that this file can process
|
---|
46 | ;"--------------------------------------
|
---|
47 | ;"[NewDict]: OFFICE VISIT
|
---|
48 | ;"Name: JONES,BASKETBALL
|
---|
49 | ;"Alias: JONES,BOB
|
---|
50 | ;"DOB: 4/13/71
|
---|
51 | ;"Sex: MALE
|
---|
52 | ;"SSNumber: 555 11 9999
|
---|
53 | ;"ChartNumber: 10034
|
---|
54 | ;"Date: 7/22/2002
|
---|
55 | ;"Location: Peds_Office
|
---|
56 | ;"Provider: KEVIN TOPPENBERG MD
|
---|
57 | ;"[TEXT]
|
---|
58 | ;"
|
---|
59 | ;" CHIEF COMPLAINT: Follow up blood clot.
|
---|
60 | ;"
|
---|
61 | ;" HPI:
|
---|
62 | ;" 1. BJ was in the emergency room 3 days ago. He was being
|
---|
63 | ;" evaluated for left lower extremity pain. He said that they did
|
---|
64 | ;" radiographic studies and told him that he had a blood clot in
|
---|
65 | ;" .... (snip)
|
---|
66 | ;"
|
---|
67 | ;"[END]
|
---|
68 | ;"--------------------------------------
|
---|
69 | ;"[NewDic] tells the system that a document header is starting
|
---|
70 | ;"'Name' is a CAPTION, and the value for this caption is 'JONES,BASKETBALL'
|
---|
71 | ;"The upload system will put this value into a variable. In this case, I specified
|
---|
72 | ;" that the variable name TMGNAME to be used.
|
---|
73 | ;"
|
---|
74 | ;"Here are each caption and its cooresponding Variable:
|
---|
75 | ;"Name <--> TMGNAME
|
---|
76 | ;"DOB <--> TMGDOB
|
---|
77 | ;"Sex <--> TMGSEX
|
---|
78 | ;"SSNumber <--> TMGSSNUM
|
---|
79 | ;"ChartNumber <--> TMGPTNUM
|
---|
80 | ;"Date <--> TIUVDT
|
---|
81 | ;"Provider <--> PERSON
|
---|
82 | ;"Alias <--> TMGALIAS
|
---|
83 | ;"Location: <--> TIULOC
|
---|
84 | ;"
|
---|
85 | ;"Document Title is passed to function as 'DocTitle'
|
---|
86 | ;"
|
---|
87 | ;"After the note has been processed and all the above variables have been set, the server
|
---|
88 | ;"calls a 'look-up' function. This function is supposed to return the document number where the
|
---|
89 | ;"text is supposed to be put (the number should be put in Y)
|
---|
90 | ;"
|
---|
91 | ;"This look-up function has an extra twist. I am using it to register patients on the fly
|
---|
92 | ;" if needed. I am doing this because I had about 30,000 patients in my database to transfer,
|
---|
93 | ;" and I had difficulty getting a separate file with just demographics etc. So, if a patient
|
---|
94 | ;" is not already in the database, they are registered here.
|
---|
95 | ;"
|
---|
96 | ;"Extra note:
|
---|
97 | ;"When this function is called, the TIU upload process has already set up some variables.
|
---|
98 | ;"DA = the IEN in 8925.2, i.e. ^TIU(8925.2,DA,"TEXT",0) that the uploaded text was temporarily store in.
|
---|
99 | ;" In other words, here DA = the serial index number of the document to be uploaded
|
---|
100 | ;" i.e. 1 for the first, 2 for the second etc.
|
---|
101 | ;"TIUI = the line index of the beginning of the report to be processed (i.e. the line
|
---|
102 | ;" that starts with [TEXT]
|
---|
103 | ;"DUZ = Current user number.
|
---|
104 | ;"TIUHSIG = [NewDict] .. or whatever it has been set to by user in upload params
|
---|
105 | ;"TIUBGN = [TEXT] ... or whatever is has be set to by user in upload params.
|
---|
106 |
|
---|
107 | write "+-------------------------------------+",!
|
---|
108 | write "| Starting upload code... |",!
|
---|
109 | write "+-------------------------------------+",!
|
---|
110 |
|
---|
111 | set BuffNum=$get(DA) ;"Store which upload buffer we are working on.
|
---|
112 | set BuffIdx=$get(TIUI) ;"Store line number (in upload buffer) we are starting with.
|
---|
113 | new cMaxNoteWidth set cMaxNoteWidth=60
|
---|
114 |
|
---|
115 | ;"Field (f) constants
|
---|
116 | new fPatient set fPatient=.02 ;"field .02 = PATIENT
|
---|
117 | new fVisit set fVisit=.03 ;"field .03 = VISIT
|
---|
118 | new fParentDoc set fParentDoc=.04 ;"field .04 = PARENT DOCUMENT TYPE
|
---|
119 | new fStatus set fStatus=.05 ;"field .05 = STATUS
|
---|
120 | new fParent set fParent=.06 ;"field .06 = PARENT
|
---|
121 | new fStartDate set fStartDate=.07 ;"EPISODE BEGIN DATE/TIME (field .07)
|
---|
122 | new fEndDate set fEndDate=.08 ;"EPISODE END DATE/TIME (field .08)
|
---|
123 | new fEntryDate set fEntryDate=1201 ;"field 1201 = ENTRY DATE/TIME
|
---|
124 | new fAuthor set fAuthor=1202 ;"field 1202 = PERSON/DICTATOR
|
---|
125 | new fExpSigner set fExpSigner=1204 ;"field 1204 = expected Signer
|
---|
126 | new fHospLoc set fHospLoc=1205 ;"field 1205 = HOSPITAL LOCATION
|
---|
127 | new fExpCosign set fExpCosign=1208 ;"field 1208 = expected cosigner
|
---|
128 | new fAttending set fAttending=1209 ;"field 1209 = ATTENDING
|
---|
129 | new fVisitLoc set fVisitLoc=1211 ;"field 1211 = VISIT LOCATION
|
---|
130 | new fRefDate set fRefDate=1301 ;"field 1301 = REFERENCE DATE
|
---|
131 | new fEnteredBy set fEnteredBy=1302 ;"field 1302 = ENTERED BY (a pointer to file 200)
|
---|
132 | new fCapMethod set fCapMethod=1303 ;"field 1303 = CAPTURE METHOD; U-->'upload'
|
---|
133 | new fService set fService=1404 ;"field 1404 = SERVICE
|
---|
134 | new fSignedBy set fSignedBy=1502 ;"field 1502 = signed by
|
---|
135 | new fNeedCosign set fNeedCosign=1506 ;"field 1506 = cosigniture expected.
|
---|
136 | new fCharTrans set fCharTrans=22711 ;"field 22711 = CHAR COUNT -- TRANSCRIPTIONIST
|
---|
137 | new fLineCount set fLineCout=.1 ;"field .1 = LINE COUNT
|
---|
138 |
|
---|
139 | ;" Piece (p) constants
|
---|
140 | new pPatient set pPatient=2 ;"Node 0,piece 2 = PATIENT (field .02)
|
---|
141 | new pVisit set pVisit=3 ;"Node 0,piece 3 = VISIT (field .03)
|
---|
142 | new pStrtDate set pStrtDate=7 ;"Node 0,piece 7 = EPISODE BEGIN DATE/TIME (field .07)
|
---|
143 | new pEndDate set pEndDate=8 ;"Node 0,piece 8 = EPISODE END DATE/TIME (field .08)
|
---|
144 | new pExpSigner set pExpSigner=4 ;"Node 12,piece 4 = EXPECTED SIGNER (field 1204)
|
---|
145 | new pHospLoc set pHospLoc=5 ;"Node 12,piece 5 = HOSPITAL LOCATION (field 1205)
|
---|
146 | new pExpCosign set pExpCosign=8 ;"Node 12,piece 8 = EXPECTED COSIGNER (field 1210)
|
---|
147 | new pAttending set pAttending=9 ;"Node 12,piece 9 = ATTENDING PHYSICIAN (field 1209)
|
---|
148 | new pService set pService=4 ;"Node 14,piece 4 = SERVICE (field 1404)
|
---|
149 |
|
---|
150 | if $data(cAbort)#10=0 new cAbort set cAbort=0
|
---|
151 |
|
---|
152 | new DBIndent,PriorErrorFound
|
---|
153 | new Patient
|
---|
154 | new DocIEN set DocIEN=-1
|
---|
155 | new Document
|
---|
156 | new NewDoc set NewDoc=0
|
---|
157 | new result set result=1 ;"cOKToCont
|
---|
158 |
|
---|
159 | do PtArrayCreate(.Patient) ;"Load upload info into Patient array
|
---|
160 | set result=$$DocArrayCreate(.Document) ;"Load upload document info into Document array
|
---|
161 | if result=cAbort goto LUDone
|
---|
162 | set Document("DFN")=$$GetDFN^TMGGDFN(.Patient) ;"Store DFN of patient.
|
---|
163 | if Document("DFN")'>0 set result=cAbort goto LUDone ;"Abort.
|
---|
164 | set Document("AUTO SIGN")=$get(Autosign,1) ;"default to YES auto-signing
|
---|
165 | ;"06-19-05 Changed to disable autosigning. If document is
|
---|
166 | ;" autosigned here, then no prompt for printing elsewhere.
|
---|
167 | ;"9-1-05 Resuming autosigning. Currently the outside transcriptionists are already
|
---|
168 | ;" printing the notes before giving them to us for upload.
|
---|
169 | ;" Changed default to be YES autosign
|
---|
170 | ;"set Document("AUTO SIGN")=0 ;"override setting passed in...
|
---|
171 |
|
---|
172 | set Document("CHARACTER COUNT - TRANSCRIPTIONIST'S")=$$BuffCharCount() ;"Count character prior to any wrapping/merging etc.
|
---|
173 | set result=$$PrepUploadBuf() ;"Do any word-wrapping etc needed in upload buffer
|
---|
174 | if result=cAbort goto LUDone
|
---|
175 | set DocIEN=$$PrepDoc(.Document,.NewDoc) ;"Prepair a document to put upload into. Credits transcription
|
---|
176 |
|
---|
177 | set Y=DocIEN
|
---|
178 | merge TMGDOC=Document ;"Create a global -- will kill after followup code
|
---|
179 | LUDone
|
---|
180 | ;"put result into Y. TIU filing system looks for results in Yi
|
---|
181 | if result=cAbort set Y=-1
|
---|
182 |
|
---|
183 | quit
|
---|
184 |
|
---|
185 |
|
---|
186 |
|
---|
187 | ;"-----------------------------------------------------------------------------------------------
|
---|
188 | ;"==============================================================================================-
|
---|
189 | ;" S U B R O U T I N E S
|
---|
190 | ;"==============================================================================================-
|
---|
191 | ;"-----------------------------------------------------------------------------------------------
|
---|
192 | ;"PtArrayCreate(Array)
|
---|
193 | ;"DocArrayCreate(Document)
|
---|
194 | ;"PrepDoc(Document,NewDoc);
|
---|
195 | ;"GetDocTIEN(Title)
|
---|
196 | ;"GetLocIEN(Location)
|
---|
197 | ;"GetService(IEN)
|
---|
198 | ;"GetProvIEN(Provider)
|
---|
199 | ;"GetRecord(Document,NewDoc,AskOK,Editable)
|
---|
200 | ;"DocExists(Document)
|
---|
201 | ;"BuffCharCount()
|
---|
202 | ;"PrepUploadBuf()
|
---|
203 |
|
---|
204 | ;"NeedsReformat(MaxWidth)
|
---|
205 | ;"CutNote(Array)
|
---|
206 | ;"PasteNote(Array,NextNoteI)
|
---|
207 | ;"CompToBuff(ExistingIEN,UplTIEN,UplDate)
|
---|
208 | ;"CreateRec(Document) ;
|
---|
209 | ;"StuffRec(Document,PARENT)
|
---|
210 | ;"MakeVisit(Document)
|
---|
211 | ;"FOLLOWUP(DocIEN) ;Post-filing code for PROGRESS NOTES
|
---|
212 |
|
---|
213 |
|
---|
214 | PtArrayCreate(Array)
|
---|
215 | ;"SCOPE: Private
|
---|
216 | ;"Purpose: To put global scope vars (i.e. TMGNAME,TMGSSNUM etc) into
|
---|
217 | ;" an array for easier portability
|
---|
218 | ;"Input: Array, must be passed by reference
|
---|
219 | ;" The global-scope variables setup by the upload system, and are used here:
|
---|
220 | ;" TMGPTNUM,TMGSSNUM,TMGSSNUM,TMGNAME,TMGDOB,TMGSEX
|
---|
221 | ;"Output: Array is loaded with info, like this:
|
---|
222 | ;" set Array("SSNUM")="123-45-6789"
|
---|
223 | ;" set Array("NAME")="DOE,JOHN"
|
---|
224 | ;" set Array("DOB")=TMGDOB
|
---|
225 | ;" set Array("PATIENTNUM")="12345677"
|
---|
226 | ;" set Array("SEX")="M"
|
---|
227 | ;" set Array("ALIAS")="DOE,JOHNNY"
|
---|
228 | ;"Results: none
|
---|
229 |
|
---|
230 | if $data(TMGPTNUM)#10'=0 do
|
---|
231 | . set TMGPTNUM=$translate(TMGPTNUM,"PWCI*","") ;"Clean off alpha characters -- not needed.
|
---|
232 | . ;"set TMGPTNUM=$$Trim^TMGSTUTL(TMGPTNUM)
|
---|
233 | . set TMGPTNUM=$$FORMAT^DPTNAME(.TMGPTNUM,3,30) ;"Use same input transform as for .01 field of PATIENT file
|
---|
234 | . set Array("PATIENTNUM")=TMGPTNUM
|
---|
235 |
|
---|
236 | if $data(TMGSSNUM)#10'=0 do
|
---|
237 | . set TMGSSNUM=$translate(TMGSSNUM," /-","") ;"Clean delimiters
|
---|
238 | . if +TMGSSNUM=0 set TMGSSNUM="" ;was ... "P"
|
---|
239 | . if (TMGSSNUM="P")!(+TMGSSNUM>0) set Array("SSNUM")=TMGSSNUM
|
---|
240 |
|
---|
241 | set Array("NAME")=$$FormatName^TMGMISC(.TMGNAME)
|
---|
242 |
|
---|
243 | if $data(TMGALIAS)#10'=0 do
|
---|
244 | . set TMGALIAS=$translate(TMGALIAS,"*","")
|
---|
245 | . set TMGALIAS=$$FORMAT^DPTNAME(TMGALIAS,3,30) ;"convert to 'internal' format (strip .'s etc)
|
---|
246 | . set Array("ALIAS")=TMGALIAS
|
---|
247 |
|
---|
248 | if $data(TMGSEX)#10'=0 do
|
---|
249 | . set TMGSEX=$$UP^XLFSTR($get(TMGSEX))
|
---|
250 | . if TMGSEX="M" set TMGSEX="MALE"
|
---|
251 | . else if TMGSEX="F" set TMGSEX="FEMALE"
|
---|
252 | . set Array("SEX")=TMGSEX
|
---|
253 |
|
---|
254 | if $data(TMGDOB)#10'=0 do
|
---|
255 | . if +TMGDOB>0 set Array("DOB")=TMGDOB
|
---|
256 | . else quit
|
---|
257 | . new CurDate,CurYr
|
---|
258 | . do DT^DILF("E","T",.CurDate)
|
---|
259 | . set CurDate=$get(CurDate(0))
|
---|
260 | . if CurDate="" quit
|
---|
261 | . set CurYr=$piece(CurDate,", ",2)
|
---|
262 | . new DOBYr
|
---|
263 | . set DOBYr=$piece(TMGDOB,"/",3)
|
---|
264 | . if DOBYr>CurYr do ;"we have a Y2K problem
|
---|
265 | . . set DOBYr=DOBYr-100
|
---|
266 | . . if DOBYr'>0 quit
|
---|
267 | . . set TMGDOB=$piece(TMGDOB,"/",1,2)_"/"_DOBYr
|
---|
268 | . . set Array("DOB")=TMGDOB
|
---|
269 |
|
---|
270 | quit
|
---|
271 |
|
---|
272 |
|
---|
273 |
|
---|
274 | DocArrayCreate(Document)
|
---|
275 | ;"SCOPE: Private
|
---|
276 | ;"Purpose: To put TIUVDT etc. etc into an array for easier portibility
|
---|
277 | ;"Input: Document -- OUT parameter, must be passed by reference
|
---|
278 | ;" The global-scope variables setup by the upload system are used:
|
---|
279 | ;" TIUVDT,PERSON,TIULOC, (and also DocTitle)
|
---|
280 | ;"Output: Document is loaded with info.
|
---|
281 | ;"Results: 1=OKToCont, or cAbort
|
---|
282 |
|
---|
283 | new result set result=1 ;"cOKToCont
|
---|
284 |
|
---|
285 | set Document("PROVIDER")=$get(PERSON)
|
---|
286 | if Document("PROVIDER")="" do goto DACDone
|
---|
287 | . set result=cAbort
|
---|
288 | set Document("PROVIDER IEN")=$$GetProvIEN(Document("PROVIDER"))
|
---|
289 | set Document("LOCATION")=$get(TIULOC,"Main_Office")
|
---|
290 | set Document("DATE")=$get(TIUVDT)
|
---|
291 | set Document("TITLE")=$get(DocTitle,"NOTE")
|
---|
292 |
|
---|
293 | ;"Decide which transcriptionist is. This will be used for crediting productivity.
|
---|
294 | ;"If transcriptionist not specified, current user (DUZ) is assumed.
|
---|
295 | if $data(TMGTRANS)#10=0 set TMGTRANS=$piece($get(^VA(200,DUZ,0)),"^",1)
|
---|
296 | set Document("TRANSCRIPTIONIST")=$$FormatName^TMGMISC(TMGTRANS)
|
---|
297 |
|
---|
298 | if (Document("DATE")="")!(Document("DATE")="00/00/00") do goto DACDone
|
---|
299 | . set result=cAbort
|
---|
300 |
|
---|
301 | DACDone
|
---|
302 | quit result
|
---|
303 |
|
---|
304 |
|
---|
305 |
|
---|
306 | PrepDoc(Document,NewDoc);
|
---|
307 | ;"Scope: PRIVATE.
|
---|
308 | ;" Addendum 7/25/07. Will be called by RPC call BLANKTIU^TMGRPC1
|
---|
309 | ;" to return a blank document
|
---|
310 | ;"Purpose: Prepair a document to put upload into.
|
---|
311 | ;"Input: Document -- an array as follows:
|
---|
312 | ;" Document("DFN")=DFN, the record number of the patient.
|
---|
313 | ;" Document("PROVIDER IEN")= the IEN of the provider
|
---|
314 | ;" Document("LOCATION")= the location of the visit
|
---|
315 | ;" Document("DATE")= the date of the visit.
|
---|
316 | ;" Document("TITLE")= the title of the note
|
---|
317 | ;" Document(cVisitStr) an OUT PARAMETER
|
---|
318 | ;" Document("TRANSCRIPTIONIST") -- the name of the transcriptionist
|
---|
319 | ;" Document("CHARACTER COUNT - TRANSCRIPTIONIST'S") -- the char count creditable to transcriptionist
|
---|
320 | ;" NewDoc: OPTIONAL flag, passed back with
|
---|
321 | ;" NewDoc = 1 if returned docmt is new
|
---|
322 | ;" NewDoc = 0 if returned docmt already existed, timeout, etc
|
---|
323 | ;"Results: returns record number (IEN) ready to accept upload (or -1 if failure)
|
---|
324 | ;" Also Document("DOC IEN") will have this same IEN
|
---|
325 | ;" NOTE: if result is -1 then errors are passed back in
|
---|
326 | ;" Document("ERROR") node
|
---|
327 | ;" Document("ERROR",n)="ERROR.. Stuffing new document."
|
---|
328 | ;" Document("ERROR","NUM")=n
|
---|
329 | ;" Document("ERROR","FM INFO")=merge with DIERR array
|
---|
330 |
|
---|
331 | ;" PIEN = patient internal entry number
|
---|
332 | ;" Global-Scope variables expected:
|
---|
333 | ;" PERSON, TMGSSNUM etc. defined above
|
---|
334 | ;" TIUVDT expected
|
---|
335 | ;" TIULOC is also expected (i.e. 'LAUGHLIN_OFFICE')
|
---|
336 | ;"
|
---|
337 | ;"Output: will return document number, or -1 if failure.
|
---|
338 | ;"NOTES: This originated from ^TIUPUTPN
|
---|
339 | ;"
|
---|
340 | ;" Look-up code used by router/filer
|
---|
341 | ;" Required variables: TMGSSNUM, TIUVDT
|
---|
342 | ;" i.e., TMGSSNUM (Pt SS-Number) and TIUVDT (visit date) must be set prior to call.
|
---|
343 | ;"
|
---|
344 |
|
---|
345 | new cStartDate set cStartDate="EDT"
|
---|
346 | new cEndDate set cEndDate="LDT"
|
---|
347 | new cService set cService="SVC"
|
---|
348 | new cDocType set cDocType="TYPE"
|
---|
349 | new cDocTIEN set cDocTIEN="TYPE IEN"
|
---|
350 | new cHspLocIEN set cHspLocIEN="LOC"
|
---|
351 | new cVstLocIEN set cVstLocIEN="VLOC"
|
---|
352 | new cVisitStr set cVisitStr="VSTR"
|
---|
353 | new cVisitIEN set cVisitIEN="VISIT"
|
---|
354 | new cStopCode set cStopCode="STOP"
|
---|
355 |
|
---|
356 | new TMG,DFN
|
---|
357 | new TIUDAD,TIUEDIT
|
---|
358 | new TIULDT,TIUXCRP,DocTIEN
|
---|
359 | new LocIEN
|
---|
360 | new result set result=-1
|
---|
361 | set NewDoc=0
|
---|
362 |
|
---|
363 | set Document(cStartDate)=$$IDATE^TIULC(Document("DATE")) ;"Convert date into internal format
|
---|
364 | set Document(cEndDate)=Document(cStartDate) ;"For office notes, begin and end dates will be the same.
|
---|
365 |
|
---|
366 | ;"Setup DocTIEN -- to be used below as [MAS Movement event type]
|
---|
367 | ;"Convert Document title into IEN, i.e. OFFICE VISIT --> 128
|
---|
368 | set DocTIEN=$$GetDocTIEN(Document("TITLE"))
|
---|
369 | if +DocTIEN'>0 do goto PrepDocX
|
---|
370 | . set Document("ERROR",1)="ERROR: Unable to determine note type from title: "_Document("TITLE")
|
---|
371 | . set Document("ERROR","NUM")=1
|
---|
372 |
|
---|
373 | ;"Purpose: setup Document(cDocType) -- used below as: Title info variable of form:
|
---|
374 | ;" Setup string in form of: 1^title IEN^title Name
|
---|
375 | ;" e.g.: 1^128^OFFICE VISIT^OFFICE VISIT
|
---|
376 | set Document(cDocTIEN)=DocTIEN
|
---|
377 | set Document(cDocType)=1_"^"_DocTIEN_"^"_$$PNAME^TIULC1(DocTIEN)
|
---|
378 |
|
---|
379 | ;"do MAIN^TIUVSIT(.TIU,.DFN,TMGSSNUM,Document(cStartDate),Document(cEndDate),"LAST",0,Document("LOCATION"))
|
---|
380 |
|
---|
381 | ;" setup LocIEN from HOSPITAL LOCATION file (#44)
|
---|
382 | ;" This contains entries like 'Laughlin_Office'
|
---|
383 | set LocIEN=+$$GetLocIEN(Document("LOCATION"))
|
---|
384 | if '$data(^SC(LocIEN,0)) do goto PrepDocX ;"^SC(*) is file 44, Hospital Location
|
---|
385 | . set Document("ERROR",1)="ERROR: Unable to process location: "_Document("LOCATION")
|
---|
386 | . set Document("ERROR","NUM")=1
|
---|
387 |
|
---|
388 | set Document(cService)=$$GetService(Document("PROVIDER IEN")) ;"i.e. FAMILY PRACTICE
|
---|
389 | set Document(cVisitStr)="x;x;"_DocTIEN ;"LOC;VDT;VTYP
|
---|
390 | set Document(cVisitIEN)=0 ;"Visit File IFN
|
---|
391 | set Document(cHspLocIEN)=LocIEN
|
---|
392 | set Document(cVstLocIEN)=LocIEN
|
---|
393 | set Document(cStopCode)=0 ;"0=FALSE, don't worry about stop codes.
|
---|
394 |
|
---|
395 | set result=$$GetRecord(.Document,.NewDoc,0)
|
---|
396 | if result'>0 do goto PrepDocX
|
---|
397 | . new n set n=+$get(Document("ERROR","NUM"))+1
|
---|
398 | . set Document("ERROR",n)="ERROR.. after creating new document."
|
---|
399 | . set Document("ERROR","NUM")=n
|
---|
400 |
|
---|
401 | ;"At this point, any merging has been done (once implemented)
|
---|
402 | ;"So a character count of now will be a total/combined character count
|
---|
403 | set Document("CHAR COUNT - TOTAL")=$$BuffCharCount ;"Count character after any wrapping/merging etc.
|
---|
404 | ;"Now, we need the standard CHARARACTERS/LINE value stored in field .03 of TIU PARAMETERS (in ^TIU(8925.99))
|
---|
405 | ;"For my setup, I have only have one record for in this file, so I'll use IEN=1.
|
---|
406 | new CharsPerLine set CharsPerLine=$piece($get(^TIU(8925.99,1,0)),"^",3)
|
---|
407 | if CharsPerLine'=0 do
|
---|
408 | . new IntLC,LC,Delta
|
---|
409 | . set LC=Document("CHAR COUNT - TOTAL")\CharsPerLine
|
---|
410 | . set IntLC=Document("CHAR COUNT - TOTAL")\CharsPerLine ;" \ is integer divide
|
---|
411 | . set Delta=(LC-IntLC)*10
|
---|
412 | . if Delta>4 set IntLC=IntLC+1 ;"Round to closest integer value.
|
---|
413 | . set Document("LINE COUNT")=IntLC
|
---|
414 |
|
---|
415 | set result=$$StuffRec(.Document,0) ;"Will load Document("ERROR","FM INFO") with any FM errors
|
---|
416 | if +$get(result)'>0 do goto PrepDocX
|
---|
417 | . new n set n=+$get(Document("ERROR","NUM"))+1
|
---|
418 | . set Document("ERROR",n)="ERROR.. Stuffing new document."
|
---|
419 | . set Document("ERROR","NUM")=n
|
---|
420 |
|
---|
421 | PrepDocX
|
---|
422 | quit result ;"result is document #
|
---|
423 |
|
---|
424 |
|
---|
425 | MakeVisit(Document)
|
---|
426 | ;"Purpose -- to create a new entery in the VISIT file, based on info in Document.
|
---|
427 | ;"Input -- Document -- array with following info:
|
---|
428 | ;" Document("DFN")=DFN, the record number of the patient.
|
---|
429 | ;" Document("PROVIDER")= the provider of care for the note
|
---|
430 | ;" Document("PROVIDER IEN")= the IEN of the provider
|
---|
431 | ;" Document("LOCATION")= the location of the visit
|
---|
432 | ;" Document("DATE")= the date of the visit.
|
---|
433 | ;"Result -- returns IEN of visit entry
|
---|
434 |
|
---|
435 | ;"Note -- this function is not now being used...
|
---|
436 |
|
---|
437 | new TMGFDA
|
---|
438 | ;set TMGFDA(9000010,"?+1,",.01)= ;".01=VISIT/ADMIT DATE&TIME
|
---|
439 | ;set TMGFDA(9000010,"?+1,",.02)= ;".02=DATE VISIT CREATED
|
---|
440 | ;set TMGFDA(9000010,"?+1,",.03)="O" ;".02=VISIT TYPE -- O=Other
|
---|
441 | ;set TMGFDA(9000010,"?+1,",.05)= ;".05=PATIENT NAME
|
---|
442 | ;set TMGFDA(9000010,"?+1,",15001)="10C1-TEST" ;"15001=VISIT ID
|
---|
443 | ;LOCATION NAME --> Medical Group of Greeneville
|
---|
444 | ;SERVICE CATEGORY: A --> AMBULATORY
|
---|
445 | ;DSS ID: PRIMARY CARE/MEDICINE
|
---|
446 | ;HOSPITAL LOCATION: Laughlin_Office
|
---|
447 | ;Created by user: DUZ
|
---|
448 | quit
|
---|
449 |
|
---|
450 |
|
---|
451 | GetDocTIEN(Title)
|
---|
452 | ;"Purpose: To return IEN for document *type defination* / Identify document title
|
---|
453 | ;"Input Title -- the Text Title to look up
|
---|
454 | ;"Results: Returns the document definition IFN (i.e. Y)
|
---|
455 |
|
---|
456 | new DIC,Y,X
|
---|
457 | new TIUFPRIV set TIUFPRIV=1
|
---|
458 |
|
---|
459 | set DIC=8925.1
|
---|
460 | set DIC(0)="M"
|
---|
461 | set DIC("S")="IF $PIECE(^TIU(8925.1,+Y,0),""^"",4)=""DOC"""
|
---|
462 | set X=Title
|
---|
463 | do ^DIC
|
---|
464 | kill DIC("S")
|
---|
465 | if $find(Y,"^")>0 set Y=$piece(Y,"^",1)
|
---|
466 |
|
---|
467 | quit Y
|
---|
468 |
|
---|
469 |
|
---|
470 | GetLocIEN(Location)
|
---|
471 | ;"Scope: PRIVATE
|
---|
472 | ;"Purpose: To return IEN for location
|
---|
473 | ;"Input: Location -- the Location to look up.
|
---|
474 | ;"Results: returns LocationIEN (i.e. Y)
|
---|
475 |
|
---|
476 | new DIC,X,Y
|
---|
477 | set DIC=44 ;"file 44 is HOSPITAL LOCATION
|
---|
478 | set DIC(0)="M"
|
---|
479 | set X=Location
|
---|
480 | do ^DIC ;" do a , value is returned in Y
|
---|
481 | if $find(Y,"^")>0 set Y=$piece(Y,"^",1)
|
---|
482 |
|
---|
483 | quit Y
|
---|
484 |
|
---|
485 |
|
---|
486 | GetService(IEN)
|
---|
487 | ;"Scope: PRIVATE
|
---|
488 | ;"Purpose: Get the Service for the Provider
|
---|
489 | ;"Input: IEN -- the IEN of the Provider to look up.
|
---|
490 | ;"Results: returns the Name of the Service for provider, or "" if not found
|
---|
491 |
|
---|
492 | new result set result=""
|
---|
493 | new node,SvIEN
|
---|
494 |
|
---|
495 | if IEN=-1 goto GtSvDone
|
---|
496 | set node=$get(^VA(200,IEN,5)) ;"^VA(200, is NEW PERSON file
|
---|
497 | set SvIEN=+$piece(node,"^",1)
|
---|
498 | if SvIEN=0 goto GtSvDone
|
---|
499 | set node=$get(^DIC(49,SvIEN,0)) ;"^DIC(49, is the SERVICE/SECTION file
|
---|
500 | set result=$piece(node,"^",1)
|
---|
501 |
|
---|
502 | GtSvDone
|
---|
503 | quit result
|
---|
504 |
|
---|
505 |
|
---|
506 | GetProvIEN(Provider)
|
---|
507 | ;"Scope: PRIVATE
|
---|
508 | ;"Purpose: To return IEN for Provider
|
---|
509 | ;"Input: Provider -- the Provider to look up.
|
---|
510 | ;"Results: returns Provider's IEN (i.e. Y), or -1 if not found
|
---|
511 |
|
---|
512 | new DIC,X,Y
|
---|
513 | set DIC=200 ;"file 200 is NEW PERSON
|
---|
514 | set DIC(0)="M"
|
---|
515 | set X=Provider
|
---|
516 | do ^DIC ;" do a , value is returned in Y
|
---|
517 | if $find(Y,"^")>0 set Y=$piece(Y,"^",1)
|
---|
518 |
|
---|
519 | quit Y
|
---|
520 |
|
---|
521 |
|
---|
522 | GetRecord(Document,NewDoc,AskOK,Editable)
|
---|
523 | ;"Scope: PRIVATE
|
---|
524 | ;"PURPOSE:
|
---|
525 | ;" To get a record--either via creating a new one, or returning an existing one
|
---|
526 | ;" Note: If an existing one is returned, it will be emptied first...
|
---|
527 | ;"
|
---|
528 | ;" Note: If I want to merge part of what the doctor creates with what the
|
---|
529 | ;" transcriptionist uploads, here what I should do
|
---|
530 | ;" 1. Look for an existing document with same date as document being uploaded.
|
---|
531 | ;" 2. If found, look in existing document for merge symbols (i.e. {{1}} }
|
---|
532 | ;" 3. If found, then take code from existing document and current part
|
---|
533 | ;" of upload buffer, and create a merged document.
|
---|
534 | ;" 4. Put this merged document back into the upload buffer.
|
---|
535 | ;" 5. Empty the existing document, and return its IEN from this function
|
---|
536 | ;"
|
---|
537 | ;"INPUT: Document -- array with Document("DFN"), Document(cDocType) are REQUIRED.
|
---|
538 | ;" [Document] --> Visit info array -- SHOULD PASS BE REFERENCE.
|
---|
539 | ;" Document("DFN") = patient DFN
|
---|
540 | ;" Document(cVisitStr) = LOC;VDT;VTYP e.g. 'x;x;OFFICE VISIT'
|
---|
541 | ;" Document(cVisitIEN) = VISIT file IFN e.g. 0, used for field .03 in file 8925. Pointer to file #9000010
|
---|
542 | ;" Document(cHspLocIEN) i.e. Hospital location IEN. Used for field 1205 in 8925. Pointer to file #44
|
---|
543 | ;" Document(cVstLocIEN) i.e. visit location IEN. Used for field 1211 in 8925. Pointer to file #44
|
---|
544 | ;" Document(cStopCode) = mark to defer workload e.g. 0/FALSE=don't worry about stop codes.
|
---|
545 | ;" USED FOR: Mark record for deferred crediting of stop code (fld #.11)
|
---|
546 | ;" This boolean field (.11) indicates whether the stop code associated with a new
|
---|
547 | ;" visit should be credited when the note is completed.
|
---|
548 | ;" Note: if Document('STOP')="", then not processed.
|
---|
549 | ;" Document(cDocType)=1^title DA^title Name i.e.: 1^128^OFFICE VISIT^OFFICE VISIT
|
---|
550 | ;" Document(cDocTIEN)=DocTIEN (a.k.a. title DA) e.g. 128
|
---|
551 | ;" Document(cService) e.g.FAMILY PRACTICE
|
---|
552 | ;" Document(cStartDate) i.e. event begin time
|
---|
553 | ;" Document(cEndDate) i.e. event end time
|
---|
554 | ;" [NewDoc] --> flag, passed back with
|
---|
555 | ;" NewDoc = 1 if returned docmt is new
|
---|
556 | ;" NewDoc = 0 if returned docmt already existed, timeout, etc
|
---|
557 | ;" [AskOK] --> Ask user flag, where
|
---|
558 | ;" AskOK = 1: ask re edit/addend existing docmt
|
---|
559 | ;" (Interactive List Manager options, TRY docmt def)
|
---|
560 | ;" AskOK = 0: don't ask (Upload & GUI options)
|
---|
561 | ;" [Editable]-->flag, passed back with Editable = 1 if returned
|
---|
562 | ;" PREEXISTING docmt can be edited by Provider. If
|
---|
563 | ;" preexisting docmt returned and 'Editable, then
|
---|
564 | ;" docmt cannot be edited by Provider.
|
---|
565 | ;"
|
---|
566 | ;"Results: Returns DocIEN -- IEN of document to use, or -1 if error etc.
|
---|
567 | ;" Also, Document("DOC IEN") is set to DocIEN
|
---|
568 | ;" Errors will be returned in Document("ERROR")
|
---|
569 | ;"
|
---|
570 | ;"Note: Code originally from GETRECNM^TIUEDI3 -- KT 5/25/04
|
---|
571 |
|
---|
572 | new MultOK set MultOK=1
|
---|
573 | new DocIEN set DocIEN=-1
|
---|
574 | set NewDoc=0
|
---|
575 |
|
---|
576 | if +$get(BuffNum)'=0 set DocIEN=$$DocExists(.Document) ;"avoid error with RPC calls
|
---|
577 | else set DocIEN=0
|
---|
578 | set Document("DOC IEN")=DocIEN
|
---|
579 | if DocIEN>0 do goto GRDone ;"DocIEN>0 means that the TEXT of the report is an exact match
|
---|
580 | . kill ^TIU(8925,DocIEN,"TEXT") ;"Kill the TEXT prior report, so we can overwrite it
|
---|
581 | else do
|
---|
582 | . set DocIEN=$$CreateRec(.Document)
|
---|
583 | . set NewDoc=1
|
---|
584 |
|
---|
585 | GRDone ;
|
---|
586 | if NewDoc,DocIEN'>0 set NewDoc=0
|
---|
587 | set Document("DOC IEN")=DocIEN
|
---|
588 | quit DocIEN ;"DocIEN is document number
|
---|
589 |
|
---|
590 |
|
---|
591 | DocExists(Document)
|
---|
592 | ;"PURPOSE: To return document IEN, if it already EXISTS for the
|
---|
593 | ;" given patient, title, and visit.
|
---|
594 | ;"INPUT: Document -- see documentation of format in $$GetRecord
|
---|
595 | ;"Results: returns a value for document (i.e. DocIEN), or -1 if no prior doc is found.
|
---|
596 | ;"
|
---|
597 | ;"Note: The following documents are ignored:
|
---|
598 | ;" - docmts of status deleted or retracted
|
---|
599 | ;" - all docmts if run across a docmt w/ requesting pkg
|
---|
600 | ;" - If REQEDIT, then also ignore docmts PERSON cannot edit.
|
---|
601 | ;"Note: If there are more than one, get the smallest DA.
|
---|
602 |
|
---|
603 | new DocIEN set DocIEN=-1
|
---|
604 | new index
|
---|
605 |
|
---|
606 | if $data(^TIU(8925,"C",Document("DFN")))=0 goto DEDone
|
---|
607 | ;"Scan through all documents for patient (DFN)
|
---|
608 | set index=$order(^TIU(8925,"C",Document("DFN"),""))
|
---|
609 | if index="" goto DEDone
|
---|
610 | for do quit:(index="")
|
---|
611 | . new DocCompValue
|
---|
612 | . set DocCompValue=$$CompToBuff(index,Document(cDocTIEN),Document(cStartDate))
|
---|
613 | . if DocCompValue=2 do quit ;"i.e. documents are an exact match
|
---|
614 | . . ;"For below, the document is the same as the upload buffer.
|
---|
615 | . . ;"We have found our answer.
|
---|
616 | . . ;"
|
---|
617 | . . ;"Below is code I can use to check to see if I SHOULD be editing.
|
---|
618 | . . ;"------------------------------------------------------
|
---|
619 | . . ;"new CANEDIT,CANDel
|
---|
620 | . . ;"set CANEDIT=+$$CANDO^TIULP(index,"EDIT RECORD",Document("PROVIDER IEN"))
|
---|
621 | . . ;"set CANDel=+$$CANDO^TIULP(index,"DELETE RECORD",Document("PROVIDER IEN"))
|
---|
622 | . . ;"if +CANEDIT>0 set DocIEN=index
|
---|
623 | . . set DocIEN=index set index="" quit
|
---|
624 | . set index=$order(^TIU(8925,"C",Document("DFN"),index))
|
---|
625 |
|
---|
626 | DEDone
|
---|
627 | quit DocIEN
|
---|
628 |
|
---|
629 |
|
---|
630 | BuffCharCount()
|
---|
631 | ;"Purpose: To count the number of characters in the current upload buffer, for the
|
---|
632 | ;" current document. The upload buffer puts all the documents being uploaded
|
---|
633 | ;" into one big WP array. This function will count down until the text
|
---|
634 | ;" signal is found to start the next documnent (e.g. '[NewDict]')
|
---|
635 | ;"Input: none. However, several global-scope variables are used.
|
---|
636 | ;" By tracing through the upload code I know that
|
---|
637 | ;" the following variables are set:
|
---|
638 | ;" (I saved DA as BuffNum, and TIUI as BuffIdx)
|
---|
639 | ;" TIUHSIG = [NewDict] .. or whatever it has been set to by user in upload params
|
---|
640 | ;" TIUBGN = [TEXT] ... or whatever is has be set to by user in upload params.
|
---|
641 | ;" BuffIdx = the line index of the beginning of the report to be processed (i.e. the line
|
---|
642 | ;" that starts with [TEXT]
|
---|
643 | ;" BuffNum = the index in 8925.2, i.e. ^TIU(8925.2,BuffNum,"TEXT",0)
|
---|
644 | ;" In other words, here BuffNum = the serial index number of the document to
|
---|
645 | ;" be uploaded i.e. 1 for the first, 2 for the second etc.
|
---|
646 | ;"Notes
|
---|
647 | ;" 8925.2 is file: TIU UPLOAD BUFFER
|
---|
648 | ;" To detect the beginning of the next document, use
|
---|
649 | ;" if MyLine[TIUHSIG then abort
|
---|
650 | ;" I trim of leading and trailing white-space before counting.
|
---|
651 | ;" But, otherwise spaces will be counted
|
---|
652 | ;"
|
---|
653 | ;"Results: Returns character count, or 0 if none found.
|
---|
654 |
|
---|
655 | new index
|
---|
656 | new result set result=0
|
---|
657 | if $get(TIUHSIG)="" goto BuffCDone
|
---|
658 |
|
---|
659 | set index=$order(^TIU(8925.2,BuffNum,"TEXT",BuffIdx))
|
---|
660 | for do quit:(index="")
|
---|
661 | . if index="" quit
|
---|
662 | . new s set s=$get(^TIU(8925.2,BuffNum,"TEXT",index,0))
|
---|
663 | . if s="" set index="" quit
|
---|
664 | . if s[TIUHSIG set index="" quit
|
---|
665 | . set s=$$Trim^TMGSTUTL(.s)
|
---|
666 | . set result=result+$length(s)
|
---|
667 | . set index=$order(^TIU(8925.2,BuffNum,"TEXT",index))
|
---|
668 |
|
---|
669 | BuffCDone
|
---|
670 | quit result
|
---|
671 |
|
---|
672 |
|
---|
673 |
|
---|
674 | PrepUploadBuf()
|
---|
675 | ;"Purpose: Ensure upload buffer is ready for processing
|
---|
676 | ;"Background: Transcriptionist will upload a large document containing
|
---|
677 | ;" multiple notes for different patients etc. This entire large
|
---|
678 | ;" document is stored in the TIU UPLOAD BUFFER file (8925.2)
|
---|
679 | ;" When this filer code is called, the TIU upload process has already
|
---|
680 | ;" set up some variables.
|
---|
681 | ;" DA = the IEN in 8925.2, i.e. ^TIU(8925.2,DA,"TEXT",0) that
|
---|
682 | ;" the uploaded text was temporarily store in.
|
---|
683 | ;" (I save DA as BuffNum)
|
---|
684 | ;" TIUI = the line index of the beginning of the report to
|
---|
685 | ;" be processed (i.e. the line that starts with [TEXT])
|
---|
686 | ;" (I save TIUI as BuffIdx)
|
---|
687 | ;" TIUHSIG = [NewDict] .. or whatever it has been set to by user in upload params
|
---|
688 | ;" TIUBGN = [TEXT] ... or whatever is has be set to by user in upload params.
|
---|
689 | ;"
|
---|
690 | ;" I found that transcriptionists were using word-processors that automatically
|
---|
691 | ;" wrapped the text to a next line. Thus paragraphs were being uploaded as
|
---|
692 | ;" one very long line. Rather than try to reeducate them to consistantly hit
|
---|
693 | ;" enter at the end of every line, I chose to automatically wrap the text to
|
---|
694 | ;" a set width.
|
---|
695 | ;"
|
---|
696 | ;" A global-scope var: cMaxNoteWidth is expected to be defined/
|
---|
697 | ;"
|
---|
698 | ;" So, to prepair the upload buffer, I use these steps:
|
---|
699 | ;" 1. Scan the part of the upload buffer pertaining to the
|
---|
700 | ;" current note being processed
|
---|
701 | ;" - This starts with line BuffIdx, and ends with...
|
---|
702 | ;" - the line containing TIUHSIG (or end of buffer)
|
---|
703 | ;" See if any line is longer than cMaxNoteWidth characters.
|
---|
704 | ;" If so, mark for wrapping.
|
---|
705 | ;" 2. If wrapping needed, extract note to a temporary array
|
---|
706 | ;" 3. Perform reformatting/wrapping on temp array.
|
---|
707 | ;" 4. Put temp array back into Upload buffer
|
---|
708 | ;"
|
---|
709 | ;"Input: None, but global-scope vars used (see above)
|
---|
710 | ;"Output: Upload buffer may be changed
|
---|
711 | ;"Result: 1=OKToCont or cAbort
|
---|
712 |
|
---|
713 | new result set result=1
|
---|
714 | if $$NeedsReformat(cMaxNoteWidth) do
|
---|
715 | . new CurNote
|
---|
716 | . new NextNoteI
|
---|
717 | . new DoSpecialIndent set DoSpecialIndent=1 ;"I.e. use hanging indents.)
|
---|
718 | . set NextNoteI=$$CutNote(.CurNote)
|
---|
719 | . do WordWrapArray^TMGSTUTL(.CurNote,cMaxNoteWidth,DoSpecialIndent)
|
---|
720 | . set result=$$PasteNote(.CurNote,NextNoteI)
|
---|
721 | PULBFDone
|
---|
722 | quit result
|
---|
723 |
|
---|
724 |
|
---|
725 | NeedsReformat(MaxWidth)
|
---|
726 | ;"Purpose: To scan the single note being processed, to see if
|
---|
727 | ;" it is too wide (i.e. any line of length > MaxWidth
|
---|
728 | ;" I had to do this because transcriptionists were using
|
---|
729 | ;" a wordprocessor that wrapped lines. Then when uploaded
|
---|
730 | ;" each paragraph became one long line.
|
---|
731 | ;" Also, will fix extended ASCII characters
|
---|
732 | ;"Input: MaxWidth The max length of any line (i.e. 80 for 80 chars)
|
---|
733 | ;" Also depends on global-scope vars
|
---|
734 | ;"Result: 1= A line was found that is > MaxWidth
|
---|
735 | ;" 0= no long lines found
|
---|
736 |
|
---|
737 | new index
|
---|
738 | new result set result=0
|
---|
739 | if $get(TIUHSIG)="" goto NRFMDone
|
---|
740 | if $get(MaxWidth)'>0 goto NRFMDone
|
---|
741 |
|
---|
742 | set index=$order(^TIU(8925.2,BuffNum,"TEXT",BuffIdx))
|
---|
743 | if index'="" for do quit:(index="")
|
---|
744 | . new s
|
---|
745 | . set s=$get(^TIU(8925.2,BuffNum,"TEXT",index,0))
|
---|
746 | . if s="" set index="" quit
|
---|
747 | . ;"9/19/06 Added to remove extended ASCII characters
|
---|
748 | . ;"set s=$translate(s,$c(146)_$c(246)_$c(150)_$c(147)_$c(148),"'--""""")
|
---|
749 | . if s[TIUHSIG set index="" quit
|
---|
750 | . if $length(s)>MaxWidth do quit
|
---|
751 | . . set result=1
|
---|
752 | . . set index=""
|
---|
753 | . set index=$order(^TIU(8925.2,BuffNum,"TEXT",index))
|
---|
754 |
|
---|
755 | NRFMDone
|
---|
756 | quit result
|
---|
757 |
|
---|
758 |
|
---|
759 | CutNote(Array)
|
---|
760 | ;"Purpose: To extract the current note out of the entire upload buffer
|
---|
761 | ;"Input: Array -- MUST BE PASSED BY REFERENCE. This is an OUT parameter
|
---|
762 | ;" Array will be loaded with the note, with the first line being
|
---|
763 | ;" put into Array(1)
|
---|
764 | ;" Depends on global-scope vars BuffIdx, BuffNum, TIUHSIG, set up elsewhere.
|
---|
765 | ;"Note: This function empties the lines in TIU UPLOAD BUFFER as it cuts out note.
|
---|
766 | ;"Result: Returns:
|
---|
767 | ;" #: index of line containing start of next note.
|
---|
768 | ;" -1: Error
|
---|
769 | ;" 0: Note is the last one in the upload buffer, so no next note found
|
---|
770 |
|
---|
771 | new index
|
---|
772 | new LastI set LastI=0
|
---|
773 | new result set result=-1
|
---|
774 | kill Array
|
---|
775 | if $get(TIUHSIG)="" goto ExNDone
|
---|
776 | new ArrayI set ArrayI=0
|
---|
777 | new s
|
---|
778 | new Done set Done=0
|
---|
779 |
|
---|
780 | set index=$order(^TIU(8925.2,BuffNum,"TEXT",BuffIdx))
|
---|
781 |
|
---|
782 | if index'="" for do quit:(index="")!(Done=1)
|
---|
783 | . set s=$get(^TIU(8925.2,BuffNum,"TEXT",index,0))
|
---|
784 | . if s[TIUHSIG set Done=1 quit
|
---|
785 | . set ArrayI=ArrayI+1
|
---|
786 | . set Array(ArrayI)=s
|
---|
787 | . kill ^TIU(8925.2,BuffNum,"TEXT",index)
|
---|
788 | . set LastI=index
|
---|
789 | . set index=$order(^TIU(8925.2,BuffNum,"TEXT",index))
|
---|
790 |
|
---|
791 | set result=+index
|
---|
792 | if result=0 set result=LastI
|
---|
793 | ExNDone
|
---|
794 | quit result
|
---|
795 |
|
---|
796 |
|
---|
797 |
|
---|
798 | PasteNote(Array,NextNoteI)
|
---|
799 | ;"Purpose: To put Array back into the upload buffer, at the correct location,
|
---|
800 | ;"Input: Array -- Best if PASSED BY REFERENCE.
|
---|
801 | ;" Array is expected to be loaded with the note, with the first line Array(1)
|
---|
802 | ;" NextNoteI: This is the index, in upload buffer, of the start of the next note.
|
---|
803 | ;"Depends on global-scope vars BuffIdx, BuffNum, TIUHSIG, set up elsewhere.
|
---|
804 | ;"Result: 1=OKToCont if all OK, or cAbort if error
|
---|
805 |
|
---|
806 | new EntireBuf
|
---|
807 | new IndexInc set IndexInc=0.01 ;"WP^DIE does not require integer indexes.
|
---|
808 | new ArrayI,PasteI
|
---|
809 | new s
|
---|
810 | new Done set Done=0
|
---|
811 | new result set result=cAbort
|
---|
812 | merge EntireBuf=^TIU(8925.2,BuffNum,"TEXT")
|
---|
813 | kill EntireBuf(0) ;"remove ^^<line count>^<line count>^<fm date>^^
|
---|
814 |
|
---|
815 | set ArrayI=$order(Array(""))
|
---|
816 | set PasteI=BuffIdx+1
|
---|
817 | for do quit:((Done=1)!(ArrayI=""))
|
---|
818 | . if $data(Array(ArrayI))#10=0 set Done=1 quit
|
---|
819 | . set s=Array(ArrayI)
|
---|
820 | . set EntireBuff(PasteI,0)=s
|
---|
821 | . set PasteI=PasteI+IndexInc
|
---|
822 | . if PasteI>NextNoteI do quit
|
---|
823 | . . do ShowError^TMGDEBUG(PriorErrorFound,"Insufficient room to put note back into upload buffer.")
|
---|
824 | . . set Done=1
|
---|
825 | . set ArrayI=$order(Array(ArrayI))
|
---|
826 |
|
---|
827 | Set result=$$WriteWP^TMGDBAPI(8925.2,BuffNum,1,.EntireBuff)
|
---|
828 |
|
---|
829 | quit result
|
---|
830 |
|
---|
831 |
|
---|
832 | CompToBuff(ExistingIEN,UplTIEN,UplDate)
|
---|
833 | ;"PURPOSE: To compare the document being uploaded (i.e. in the file 8925.2, TIU upload buffer)
|
---|
834 | ;" to documents already existing in database
|
---|
835 | ;"Input: ExistingIEN -- the document IEN of a pre-existing document in the database.
|
---|
836 | ;" i.e. ^TIU(8925,ExistingIEN,*)
|
---|
837 | ;" UplTIEN=The type number of document being uploaded
|
---|
838 | ;" UplDate -- the date of the document being uploaded.
|
---|
839 | ;" NOTE: See also global-scope variables below that are REQUIRED
|
---|
840 | ;"
|
---|
841 | ;"Output: returns 0 if TEXT or Date different
|
---|
842 | ;" 1 if TEXT only is the same (Title is different)
|
---|
843 | ;" 2 if TEXT & Title are same
|
---|
844 | ;"
|
---|
845 | ;"------------------------------------------------------------------------------------
|
---|
846 | ;"Programming Note: By tracing through the upload code I know that
|
---|
847 | ;" the following variables are set:
|
---|
848 | ;" (I saved DA as BuffNum, and TIUI as BuffIdx)
|
---|
849 | ;"TIUHSIG = [NewDict] .. or whatever it has been set to by user in upload params
|
---|
850 | ;"TIUBGN = [TEXT] ... or whatever is has be set to by user in upload params.
|
---|
851 | ;"BuffIdx = the line index of the beginning of the report to be processed (i.e. the line
|
---|
852 | ;" that starts with [TEXT]
|
---|
853 | ;"BuffNum = the index in 8925.2, i.e. ^TIU(8925.2,BuffNum,"TEXT",0)
|
---|
854 | ;" In other words, here BuffNum = the serial index number of the document to be uploaded
|
---|
855 | ;" i.e. 1 for the first, 2 for the second etc.
|
---|
856 | ;" Note 8925.2 is file: TIU UPLOAD BUFFER
|
---|
857 | ;"Note
|
---|
858 | ;" To detect the beginning of the next document, use
|
---|
859 | ;" if MyLine[TIUHSIG then abort
|
---|
860 |
|
---|
861 | new MaxUplLine
|
---|
862 | new DocLine,UplLine
|
---|
863 | new DocData,UplData
|
---|
864 | new result set result=0
|
---|
865 | new MaxDocLine,CompLine
|
---|
866 | new DocType,DocName
|
---|
867 | new Break set Break=0
|
---|
868 | new DocDate
|
---|
869 |
|
---|
870 | ;"First, see if dates are the same. If not, bail out.
|
---|
871 | set DocDate=$piece(^TIU(8925,ExistingIEN,0),"^",7)
|
---|
872 | if DocDate'=UplDate goto CompExit ;"Quit with result=0
|
---|
873 |
|
---|
874 | set MaxUplLine=$piece($get(^TIU(8925.2,BuffNum,"TEXT",0)),"^",3)
|
---|
875 | if MaxUplLine="" goto CompExit
|
---|
876 | set MaxDocLine=$piece($get(^TIU(8925,ExistingIEN,"TEXT",0)),"^",3)
|
---|
877 | if MaxDocLine="" goto CompExit
|
---|
878 |
|
---|
879 | set UplLine=BuffIdx
|
---|
880 | set DocLine=0
|
---|
881 |
|
---|
882 | ;"Compare the two documents line by line.
|
---|
883 | for i=1:1:(MaxUplLine-UplLine) do if Break goto CompExit
|
---|
884 | . set UplData=$get(^TIU(8925.2,BuffNum,"TEXT",UplLine+i,0))
|
---|
885 | . set DocData=$get(^TIU(8925,ExistingIEN,"TEXT",DocLine+i,0),"x")
|
---|
886 | . if UplData[TIUHSIG set i=MaxUplLine quit
|
---|
887 | . if UplData'=DocData set Break=1 quit
|
---|
888 | . quit
|
---|
889 |
|
---|
890 | ;"If we have gotten this far, then the text is an identical match.
|
---|
891 | set result=1
|
---|
892 |
|
---|
893 | ;"Now check to see if the dictation type is the same.
|
---|
894 | set DocType=$piece($get(^TIU(8925,ExistingIEN,0)),"^",1)
|
---|
895 | if DocType=UplTIEN set result=2
|
---|
896 |
|
---|
897 | CompExit
|
---|
898 | quit result
|
---|
899 |
|
---|
900 |
|
---|
901 | ;------------------------------------------------------------------------
|
---|
902 | CreateRec(Document) ;
|
---|
903 | ;"Purpose: Create document record - Returns DA
|
---|
904 | ;"Input: Document -- an array with document info. See GetRecord for documentation
|
---|
905 | ;"Ouput: DocIEN (internal entry number) of entry created, or -1 if failure
|
---|
906 | ;" Errors (if any) returned in Document("ERROR")
|
---|
907 | ;"
|
---|
908 | ;"Note: This was originally taken from TIUEDI3
|
---|
909 |
|
---|
910 | ;"new cOKToCont set cOKToCont=1
|
---|
911 | new cAbort set cAbort=0
|
---|
912 | new result set result=1; "cOKToCont
|
---|
913 |
|
---|
914 | new DIC,DLAYGO,X,Y,DIE,DR
|
---|
915 |
|
---|
916 | new DocIEN set DocIEN=-1
|
---|
917 | new TMGFDA,RecNum,TMGMSG,Flags
|
---|
918 | set TMGFDA(8925,"+1,",.01)="`"_Document(cDocTIEN)
|
---|
919 | set Flags="E"
|
---|
920 |
|
---|
921 | ;"======================================================
|
---|
922 | ;"Call UPDATE^DIE -- add new entries in files or subfiles.
|
---|
923 | ;"======================================================
|
---|
924 | do
|
---|
925 | . new $etrap set $etrap="do ErrTrp^TMGDBAPI"
|
---|
926 | . set ^TMP("TMG",$J,"ErrorTrap")=result
|
---|
927 | . set ^TMP("TMG",$J,"Caller")="UPDATE^DIE"
|
---|
928 | . do UPDATE^DIE(Flags,"TMGFDA","RecNum","TMGMSG")
|
---|
929 | . set result=^TMP("TMG",$J,"ErrorTrap")
|
---|
930 | . kill ^TMP("TMG",$J,"ErrorTrap")
|
---|
931 | ;"======================================================
|
---|
932 | ;"======================================================
|
---|
933 |
|
---|
934 | if result'=1 goto CRDone ;"1=cOKToCont
|
---|
935 | if $data(TMGMSG("DIERR")) do goto CRDone
|
---|
936 | . do ShowDIERR^TMGDEBUG(.TMGMSG,.PriorErrorFound)
|
---|
937 | . set DocIEN=-1
|
---|
938 | . merge Document("ERROR","DIERR")=TMGMSG
|
---|
939 | do
|
---|
940 | . new index set index=$order(RecNum(""))
|
---|
941 | . if index'="" set DocIEN=+$get(RecNum(index))
|
---|
942 | if DocIEN=0 set DocIEN=-1
|
---|
943 |
|
---|
944 | CRDone
|
---|
945 | ;"Now check for failure. DocIEN will equal record number, or -1 if failure
|
---|
946 | if DocIEN'>0 do goto CRDone
|
---|
947 | . new n set n=+$get(Document("ERROR","NUM"))+1
|
---|
948 | . set Document("ERROR",n)=$piece(Document(cDocType),"^",3)_" record could not be created."
|
---|
949 | set Document("DOC IEN")=DocIEN
|
---|
950 |
|
---|
951 | quit DocIEN
|
---|
952 |
|
---|
953 |
|
---|
954 |
|
---|
955 | ;------------------------------------------------------------------------
|
---|
956 | StuffRec(Document,PARENT)
|
---|
957 | ;"Purpose: Stuff fixed field data
|
---|
958 | ;"INPUT:
|
---|
959 | ;" Document = An array containing information to put into document.
|
---|
960 | ;" The array should contain the following:
|
---|
961 | ;" Document("DOC IEN") -- the document IEN
|
---|
962 | ;" Document("PROVIDER IEN") -- the IEN of the provider
|
---|
963 | ;" Document("DFN") -- the patient IEN
|
---|
964 | ;" Document(cVisitIEN) -- a link to a visit entry
|
---|
965 | ;" Document(cStartDate) -- episode begin date/time
|
---|
966 | ;" Document(cEndDate) -- episode end date/time
|
---|
967 | ;" Document(cHspLocIEN) -- hospital location (Document(cVstLocIEN) used NULL)
|
---|
968 | ;" Document(cVstLocIEN) -- visit location.
|
---|
969 | ;" Document(cService) -- service (i.e. FAMILY PRACTICE)
|
---|
970 | ;" Document(cVisitStr)
|
---|
971 | ;" Document("TRANSCRIPTIONIST") -- the name of the transcriptionist
|
---|
972 | ;" Document("CHARACTER COUNT - TRANSCRIPTIONIST'S") -- the char count creditable to transcriptionist
|
---|
973 | ;" Document("LINE COUNT") -- Total line count
|
---|
974 | ;" PARENT: If we are working with an addendum to a document, then
|
---|
975 | ;" parent is the internal entry number of the original parent document
|
---|
976 | ;" Note:DocID can be null if not needed.
|
---|
977 | ;" Note: I don't ever pass a parent, currently
|
---|
978 | ;"
|
---|
979 | ;"NOTE: The following global-scope variables are also referenced
|
---|
980 | ;" TIUDDT
|
---|
981 | ;"Results: Passes back document IEN, or -1 if error.
|
---|
982 | ;" NOTE: if result is -1 then errors are passed back in
|
---|
983 | ;" Document("ERROR") node
|
---|
984 | ;" Document("ERROR",n)="ERROR.. Stuffing new document."
|
---|
985 | ;" Document("ERROR","NUM")=n
|
---|
986 | ;" Document("ERROR","FM INFO")=merge with DIERR array
|
---|
987 |
|
---|
988 | new TMGFDA,TMGMSG
|
---|
989 | new RefDate
|
---|
990 | new DocIEN set DocIEN=$get(Document("DOC IEN"),-1)
|
---|
991 | if DocIEN=-1 goto SfRecDone
|
---|
992 | new result set result=DocIEN ;"default to success
|
---|
993 | new ParentDocType
|
---|
994 |
|
---|
995 | ;"Field (f) constants
|
---|
996 | new fPatient set fPatient=.02 ;"field .02 = PATIENT
|
---|
997 | new fVisit set fVisit=.03 ;"field .03 = VISIT
|
---|
998 | new fParentDoc set fParentDoc=.04 ;"field .04 = PARENT DOCUMENT TYPE
|
---|
999 | new fStatus set fStatus=.05 ;"field .05 = STATUS
|
---|
1000 | new fParent set fParent=.06 ;"field .06 = PARENT
|
---|
1001 | new fStartDate set fStartDate=.07 ;"EPISODE BEGIN DATE/TIME (field .07)
|
---|
1002 | new fEndDate set fEndDate=.08 ;"EPISODE END DATE/TIME (field .08)
|
---|
1003 | new fEntryDate set fEntryDate=1201 ;"field 1201 = ENTRY DATE/TIME
|
---|
1004 | new fAuthor set fAuthor=1202 ;"field 1202 = PERSON/DICTATOR
|
---|
1005 | new fExpSigner set fExpSigner=1204 ;"field 1204 = expected Signer
|
---|
1006 | new fHospLoc set fHospLoc=1205 ;"field 1205 = HOSPITAL LOCATION
|
---|
1007 | new fExpCosign set fExpCosign=1208 ;"field 1208 = expected cosigner
|
---|
1008 | new fAttending set fAttending=1209 ;"field 1209 = ATTENDING
|
---|
1009 | new fVisitLoc set fVisitLoc=1211 ;"field 1211 = VISIT LOCATION
|
---|
1010 | new fRefDate set fRefDate=1301 ;"field 1301 = REFERENCE DATE
|
---|
1011 | new fEnteredBy set fEnteredBy=1302 ;"field 1302 = ENTERED BY (a pointer to file 200)
|
---|
1012 | new fCapMethod set fCapMethod=1303 ;"field 1303 = CAPTURE METHOD; U-->'upload'
|
---|
1013 | new fService set fService=1404 ;"field 1404 = SERVICE
|
---|
1014 | new fSignedBy set fSignedBy=1502 ;"field 1502 = signed by
|
---|
1015 | new fNeedCosign set fNeedCosign=1506 ;"field 1506 = cosigniture expected.
|
---|
1016 | new fCharTrans set fCharTrans=22711 ;"field 22711 = CHAR COUNT -- TRANSCRIPTIONIST
|
---|
1017 | new fLineCount set fLineCount=.1 ;"field .1 = LINE COUNT
|
---|
1018 |
|
---|
1019 | ;"8925=TIU DOCUMENT, the file we will edit
|
---|
1020 | ;"do Set8925Value(.TMGFDA,Document("DFN"),fPatient,1) ;"Will file separatedly below.
|
---|
1021 | do Set8925Value(.TMGFDA,Document(cVisitIEN),fVisit,1)
|
---|
1022 | do Set8925Value(.TMGFDA,Document("PROVIDER IEN"),fAuthor,1)
|
---|
1023 | do Set8925Value(.TMGFDA,Document("PROVIDER IEN"),fExpSigner,1)
|
---|
1024 | do Set8925Value(.TMGFDA,Document("PROVIDER IEN"),fAttending,1)
|
---|
1025 | do Set8925Value(.TMGFDA,Document(cHspLocIEN),fHospLoc,1)
|
---|
1026 | do Set8925Value(.TMGFDA,Document(cVstLocIEN),fVisitLoc,1)
|
---|
1027 | do Set8925Value(.TMGFDA,Document("TRANSCRIPTIONIST"),fEnteredBy,0) ;"VA transcriptionist field
|
---|
1028 | do Set8925Value(.TMGFDA,Document("CHARACTER COUNT - TRANSCRIPTIONIST'S"),fCharTrans,0)
|
---|
1029 |
|
---|
1030 | if $data(Document("LINE COUNT")) do
|
---|
1031 | . do Set8925Value(.TMGFDA,Document("LINE COUNT"),fLineCount,0)
|
---|
1032 |
|
---|
1033 | set ParentDocType=$$DOCCLASS^TIULC1(+$piece(DocIEN,"^",2))
|
---|
1034 | if +ParentDocType>0 do Set8925Value(.TMGFDA,ParentDocType,fParentDoc,1)
|
---|
1035 |
|
---|
1036 | if $get(Document("AUTO SIGN"))=1 do
|
---|
1037 | . do Set8925Value(.TMGFDA,"COMPLETED",fStatus,0)
|
---|
1038 | . do Set8925Value(.TMGFDA,Document("PROVIDER IEN"),fSignedBy,1)
|
---|
1039 | else do
|
---|
1040 | . do Set8925Value(.TMGFDA,"UNSIGNED",fStatus,0)
|
---|
1041 |
|
---|
1042 | if +$get(PARENT)'>0 do
|
---|
1043 | . ;"do Set8925Value(.TMGFDA,Document("DFN"),fPatient,1)
|
---|
1044 | . do Set8925Value(.TMGFDA,Document(cVisitIEN),fVisit,1)
|
---|
1045 | . do Set8925Value(.TMGFDA,Document(cStartDate),fStartDate,0)
|
---|
1046 | . do Set8925Value(.TMGFDA,Document(cEndDate),fEndDate,0)
|
---|
1047 | . do Set8925Value(.TMGFDA,Document(cService),fService,0)
|
---|
1048 | if +$get(PARENT)>0 do
|
---|
1049 | . new NodeZero set NodeZero=$get(^TIU(8925,+PARENT,0))
|
---|
1050 | . new Node12 set Node12=$get(^TIU(8925,+PARENT,12))
|
---|
1051 | . new Node14 set Node14=$get(^TIU(8925,+PARENT,14))
|
---|
1052 | . ;"
|
---|
1053 | . do Set8925Value(.TMGFDA,PARENT,fParent,1)
|
---|
1054 | . do Set8925Value(.TMGFDA,$piece(NodeZero,"^",pPatient),fPatient,1)
|
---|
1055 | . do Set8925Value(.TMGFDA,$piece(NodeZero,"^",pVisit),fVisit,1)
|
---|
1056 | . do Set8925Value(.TMGFDA,$piece(NodeZero,"^",pStrtDate),fStartDate,0)
|
---|
1057 | . do Set8925Value(.TMGFDA,$piece(NodeZero,"^",pEndDate),fEndDate,0)
|
---|
1058 | . do Set8925Value(.TMGFDA,$piece(Node12,"^",pHospLoc),fHospLoc,1)
|
---|
1059 | . do Set8925Value(.TMGFDA,$piece(Node14,"^",pService),fService,0)
|
---|
1060 |
|
---|
1061 | do Set8925Value(.TMGFDA,$$NOW^TIULC,fEntryDate,0)
|
---|
1062 | do Set8925Value(.TMGFDA,Document(cHspLocIEN),fHospLoc,1)
|
---|
1063 | do Set8925Value(.TMGFDA,Document(cVstLocIEN),fVisitLoc,1)
|
---|
1064 | do Set8925Value(.TMGFDA,Document(cStartDate),fRefDate,0)
|
---|
1065 | do Set8925Value(.TMGFDA,"U",fCapMethod,0) ;" U-->'upload'
|
---|
1066 | ;"do Set8925Value(.TMGFDA,3,fStatus,0)
|
---|
1067 |
|
---|
1068 | kill ^TMG("TMP","EDDIE")
|
---|
1069 | ;"merge ^TMG("TMP","EDDIE","INSIDE DOCUMENT")=Document ;"TEMP!!
|
---|
1070 | merge ^TMG("TMP","EDDIE","FDA")=TMGFDA ;"TEMP!!
|
---|
1071 |
|
---|
1072 | do FILE^DIE("EK","TMGFDA","TMGMSG")
|
---|
1073 | if $data(TMGMSG("DIERR")) do goto SfRecDone
|
---|
1074 | . set result=-1
|
---|
1075 | . merge Document("ERROR","FM INFO")=TMGMSG("DIERR")
|
---|
1076 |
|
---|
1077 | ;" -- [Mark record for deferred crediting of stop code (fld #.11)]: --
|
---|
1078 | if +$get(Document("STOP")) do
|
---|
1079 | . do DEFER^TIUVSIT(DocIEN,+$get(Document("STOP")))
|
---|
1080 |
|
---|
1081 | ;"Try storing .02 field separately to avoid weird filing error
|
---|
1082 | kill TMGFDA
|
---|
1083 | kill ^TMG("TMP","EDDIE")
|
---|
1084 | new PtDFN set PtDFN=Document("DFN")
|
---|
1085 | if (+PtDFN'=PtDFN),(PtDFN["`") set PtDFN=$piece(PtDFN,"`",2)
|
---|
1086 | if +PtDFN>0 do
|
---|
1087 | . set TMGFDA(8925,DocIEN_",",.02)=PtDFN
|
---|
1088 | . merge ^TMG("TMP","EDDIE","FDA")=TMGFDA ;"TEMP!!
|
---|
1089 | . do FILE^DIE("K","TMGFDA","TMGMSG")
|
---|
1090 | . if $data(TMGMSG("DIERR")) do
|
---|
1091 | . . set result=-1
|
---|
1092 | . . merge Document("ERROR","FM INFO")=TMGMSG("DIERR")
|
---|
1093 |
|
---|
1094 | SfRecDone
|
---|
1095 | quit result
|
---|
1096 |
|
---|
1097 |
|
---|
1098 | Set8925Value(TMGFDA,Value,Field,IsIEN)
|
---|
1099 | ;"Purpose: To provide a clean means of loading values into fields, into TMGFDA(8925,DOCIEN)
|
---|
1100 | ;"Input: TMGFDA -- The array to fill
|
---|
1101 | ;" Value -- the value to load
|
---|
1102 | ;" Field -- the field
|
---|
1103 | ;" IsIEN = 1 if value is an IEN
|
---|
1104 | ;"Note: DEPENDS ON GLOBAL-SCOPE VARIABLES: DocIEN,Document
|
---|
1105 |
|
---|
1106 | if ($get(Value)'="")&($data(Field)>0) do
|
---|
1107 | . if $get(IsIEN)>0,$extract(Value,1)'="`" set Value="`"_+Value
|
---|
1108 | . if Value'="`0" set TMGFDA(8925,DocIEN_",",Field)=Value
|
---|
1109 | quit
|
---|
1110 |
|
---|
1111 |
|
---|
1112 |
|
---|
1113 | ;"-----------------------------------------------------------------------------------------------
|
---|
1114 | ;"==============================================================================================-
|
---|
1115 | ;" F O L L O W - U P C O D E
|
---|
1116 | ;"==============================================================================================-
|
---|
1117 | ;"-----------------------------------------------------------------------------------------------
|
---|
1118 |
|
---|
1119 | FOLLOWUP(DocIEN) ;" Post-filing code for PROGRESS NOTES
|
---|
1120 | ;"PURPOSE:
|
---|
1121 | ;" This function is called by the TIU upload document facilities.
|
---|
1122 | ;" it is called after the text has been put into the document
|
---|
1123 | ;"
|
---|
1124 | ;"INPUT:
|
---|
1125 | ;" DocIEN -- is passed a value held in TIUREC("#"), i.e.
|
---|
1126 | ;" do FOLLOWUP^TIUPUTN1(TIUREC("#")).
|
---|
1127 |
|
---|
1128 | write !
|
---|
1129 | write "+-------------------------------------+",!
|
---|
1130 | write "| Starting Follow-up code... |",!
|
---|
1131 | write "+-------------------------------------+",!
|
---|
1132 |
|
---|
1133 | if $data(cOKToCont)#10=0 new cOKToCont set cOKToCont=1
|
---|
1134 | if $data(cAbort)#10=0 new cAbort set cAbort=0
|
---|
1135 |
|
---|
1136 | new DBIndent,PriorErrorFound
|
---|
1137 | new result set result=1 ;" 1=cOKToCont
|
---|
1138 |
|
---|
1139 | new Document merge Document=TMGDOC
|
---|
1140 |
|
---|
1141 | new cStartDate set cStartDate="EDT"
|
---|
1142 | new cEndDate set cEndDate="LDT"
|
---|
1143 | new cService set cService="SVC"
|
---|
1144 | new cDocType set cDocType="TYPE"
|
---|
1145 | new cDocTIEN set cDocTIEN="TYPE IEN"
|
---|
1146 | ;"new cDocIEN set cDocIEN="DOC IEN"
|
---|
1147 | ;"new cPatIEN set cPatIEN="DFN" ;"DFN = Patient IEN
|
---|
1148 | new cHspLocIEN set cHspLocIEN="LOC"
|
---|
1149 | new cVstLocIEN set cVstLocIEN="VLOC"
|
---|
1150 | new cVisitStr set cVisitStr="VSTR"
|
---|
1151 | new cVisitIEN set cVisitIEN="VISIT"
|
---|
1152 | new cStopCode set cStopCode="STOP"
|
---|
1153 |
|
---|
1154 | ;" 'p constants
|
---|
1155 | new pPatient set pPatient=2 ;"Node 0,piece 2 = PATIENT (field .02)
|
---|
1156 | new pVisit set pVisit=3 ;"Node 0,piece 3 = VISIT (field .03)
|
---|
1157 | new pStrtDate set pStrtDate=7 ;"Node 0,piece 7 = EPISODE BEGIN DATE/TIME (field .07)
|
---|
1158 | new pEndDate set pEndDate=8 ;"Node 0,piece 8 = EPISODE END DATE/TIME (field .08)
|
---|
1159 |
|
---|
1160 | new pAuthor set pAuthor=2 ;"Node 12,piece 2 = AUTHOR/DICTATOR (field 1202)
|
---|
1161 | new pExpSigner set pExpSigner=4 ;"Node 12,piece 4 = EXPECTED SIGNER (field 1204)
|
---|
1162 | new pHospLoc set pHospLoc=5 ;"Node 12,piece 5 = field 1205 = HOSPITAL LOCATION
|
---|
1163 | new pAttending set pAttending=9 ;"Node 12,piece 9 = ATTENDING PHYSICIAN (field 1209)
|
---|
1164 | new pExpCosign set pExpCosign=8 ;"Node 12,piece 8 = EXPECTED COSIGNER (field 1210)
|
---|
1165 | new pVstLoc set pVstLoc=11 ;"Node 12,piece 11 = field 1211 = VISIT LOCATION
|
---|
1166 |
|
---|
1167 | ;"Field (f) constants
|
---|
1168 | new fPatient set fPatient=.02 ;"field .02 = PATIENT
|
---|
1169 | new fVisit set fVisit=.03 ;"field .03 = VISIT
|
---|
1170 | new fParentDoc set fParentDoc=.04 ;"field .04 = PARENT DOCUMENT TYPE
|
---|
1171 | new fStatus set fStatus=.05 ;"field .05 = STATUS
|
---|
1172 | new fParent set fParent=.06 ;"field .06 = PARENT
|
---|
1173 | new fStartDate set fStartDate=.07 ;"EPISODE BEGIN DATE/TIME (field .07)
|
---|
1174 | new fEndDate set fEndDate=.08 ;"EPISODE END DATE/TIME (field .08)
|
---|
1175 | new fEntryDate set fEntryDate=1201 ;"field 1201 = ENTRY DATE/TIME
|
---|
1176 | new fAuthor set fAuthor=1202 ;"field 1202 = AUTHOR/DICTATOR
|
---|
1177 | new fExpSigner set fExpSigner=1204 ;"field 1204 = expected Signer
|
---|
1178 | new fHospLoc set fHospLoc=1205 ;"field 1205 = HOSPITAL LOCATION
|
---|
1179 | new fExpCosign set fExpCosign=1208 ;"field 1208 = expected cosigner
|
---|
1180 | new fVisitLoc set fVisitLoc=1211 ;"field 1211 = VISIT LOCATION
|
---|
1181 | new fRefDate set fRefDate=1301 ;"field 1301 = REFERENCE DATE
|
---|
1182 | new fCapMethod set fCapMethod=1303 ;"field 1303 = CAPTURE METHOD; U-->'upload'
|
---|
1183 | new fService set fService=1404 ;"field 1404 = SERVICE
|
---|
1184 | new fNeedCosign set fNeedCosign=1506 ;"field 1506 = cosigniture expected.
|
---|
1185 | new fSignedBy set fSignedBy=1502 ;"field 1502 = signed by
|
---|
1186 |
|
---|
1187 | new TMGFDA,TMGMSG
|
---|
1188 | new DFN
|
---|
1189 | new Attending,ExpSigner,ExpCosign,Author
|
---|
1190 | new BailOut set BailOut=0
|
---|
1191 | new Node12 set Node12=$get(^TIU(8925,DocIEN,12))
|
---|
1192 | new NodeZero set NodeZero=$get(^TIU(8925,DocIEN,0))
|
---|
1193 | if $data(Document)=0 new Document
|
---|
1194 |
|
---|
1195 | set Author=+$piece(Node12,"^",pAuthor)
|
---|
1196 | set Attending=+$piece(Node12,"^",pAttending)
|
---|
1197 | set ExpCosign=+$piece(Node12,"^",pExpCosign)
|
---|
1198 | set ExpSigner=+$piece(Node12,"^",pExpSigner)
|
---|
1199 |
|
---|
1200 | do
|
---|
1201 | . new Signer set Signer=$$WHOSIGNS^TIULC1(DocIEN)
|
---|
1202 | . do Set8925Value(.TMGFDA,$$WHOSIGNS^TIULC1(DocIEN),fExpSigner,1)
|
---|
1203 |
|
---|
1204 | if (Attending>0)&(ExpCosign=0) do
|
---|
1205 | . do Set8925Value(.TMGFDA,$$WHOCOSIG^TIULC1(DocIEN),fExpCosign,1)
|
---|
1206 |
|
---|
1207 | if (ExpCosign>0)&(ExpSigner'=ExpCosign) do
|
---|
1208 | . do Set8925Value(.TMGFDA,1,fNeedCosign,0)
|
---|
1209 |
|
---|
1210 | set result=$$dbWrite^TMGDBAPI(.TMGFDA,1)
|
---|
1211 | if result=-1 goto FUDone
|
---|
1212 |
|
---|
1213 | do RELEASE^TIUT(DocIEN,1) ;"Call function to 'Release Document from transcription'
|
---|
1214 | do AUDIT^TIUEDI1(DocIEN,0,$$CHKSUM^TIULC("^TIU(8925,"_+DocIEN_",""TEXT"")")) ;"Update audit trail
|
---|
1215 |
|
---|
1216 | if '$data(Document) do if (BailOut=1) goto FUDone
|
---|
1217 | . new VstLocIEN,HspLocIEN,StartDate,EndDate
|
---|
1218 | . if $data(NodeZero)#10=0 do quit
|
---|
1219 | . . set BailOut=1
|
---|
1220 | . set DFN=+$piece(NodeZero,"^",pPatient)
|
---|
1221 | . set StartDate=+$piece(NodeZero,"^",pStrtDate)
|
---|
1222 | . set EndDate=$$FMADD^XLFDT(StartDate,1)
|
---|
1223 | . set Document(cHspLocIEN)=+$piece(Node12,"^",pHospLoc)
|
---|
1224 | . set Document(cVstLocIEN)=+$piece(Node12,"^",pVstLoc)
|
---|
1225 | . set VstLocIEN=Document(cVstLocIEN)
|
---|
1226 | . if VstLocIEN'>0 set VstLocIEN=Document(cHspLocIEN)
|
---|
1227 | . if (DFN>0)&(StartDate>0)&(EndDate>0)&(VstLocIEN>0) do
|
---|
1228 | . . ;"This is an interactive visit ....
|
---|
1229 | . . do MAIN^TIUVSIT(.Document,DFN,"",StartDate,EndDate,"LAST",0,VstLocIEN)
|
---|
1230 |
|
---|
1231 | if $data(Document)=0 goto FUDone
|
---|
1232 | if $data(Document(cVisitStr))#10=0 goto FUDone
|
---|
1233 | if $data(DFN)=0 set DFN=$get(Document("DFN")) if DFN="" goto FUDone
|
---|
1234 |
|
---|
1235 | ;"Note: reviewing the code for ENQ^TIUPXAP1, it appears the following is expected:
|
---|
1236 | ;" .TIU array
|
---|
1237 | ;" DFN -- the patient IEN
|
---|
1238 | ;" DA -- the IEN of the document to work on.
|
---|
1239 | ;" TIUDA -- the doc IEN that was passed to this function.
|
---|
1240 | ;" Note, I'm not sure how DA and TIUDA are used differently.
|
---|
1241 | ;" In fact, if $data(TIUDA)=0, then function uses DA.
|
---|
1242 | ;" Unless I kill TIUDA (which might cause other problems), I don't
|
---|
1243 | ;" know if TIUDA will hold an abherent value. So I'll set to DA
|
---|
1244 | do
|
---|
1245 | . new TIUDA set TIUDA=DocIEN
|
---|
1246 | . new DA set DA=DocIEN
|
---|
1247 | . new TIU merge TIU=Document
|
---|
1248 | . do ENQ^TIUPXAP1 ;" Get/file VISIT
|
---|
1249 |
|
---|
1250 | FUDone ;
|
---|
1251 | kill TMGDOC
|
---|
1252 | quit
|
---|
1253 |
|
---|
1254 |
|
---|
1255 | ;"-----------------------------------------------------------------------------------------------
|
---|
1256 | ;"==============================================================================================-
|
---|
1257 | ;" R E - F I L I N G C O D E
|
---|
1258 | ;"==============================================================================================-
|
---|
1259 | ;"-----------------------------------------------------------------------------------------------
|
---|
1260 |
|
---|
1261 | REFILE
|
---|
1262 | ;"Purpose: Somtimes the upload process fails because of an error in the
|
---|
1263 | ;" upload filing code. Rather than require a re-upload of the file,
|
---|
1264 | ;" this function will trigger a retry of filing the TIU UPLOAD BUFFER
|
---|
1265 | ;" (file 8925.2)
|
---|
1266 | ;"This function is called by menu option TMG REFILE UPLOAD
|
---|
1267 |
|
---|
1268 | new TIUDA set TIUDA=""
|
---|
1269 | new job
|
---|
1270 | new DoRetry set DoRetry=""
|
---|
1271 | new Abort set Abort=0
|
---|
1272 | new Found set Found=0
|
---|
1273 |
|
---|
1274 | write !,!
|
---|
1275 | write "------------------------------------------------",!
|
---|
1276 | write " Refiler for failed uploads (i.e. a second try.)",!
|
---|
1277 | write "------------------------------------------------",!,!
|
---|
1278 |
|
---|
1279 | write "Here are all the failed uploads:",!,!
|
---|
1280 | set job=$order(^TIU(8925.2,"B",""))
|
---|
1281 | for do quit:(job="")
|
---|
1282 | . new Buff,NextBuff
|
---|
1283 | . if job="" quit
|
---|
1284 | . set Buff=$order(^TIU(8925.2,"B",job,""))
|
---|
1285 | . for do quit:(Buff="")
|
---|
1286 | . . if Buff="" quit
|
---|
1287 | . . write "Buffer #"_Buff_" (created by process #"_job_")",!
|
---|
1288 | . . set Found=1
|
---|
1289 | . . set Buff=$order(^TIU(8925.2,"B",job,Buff))
|
---|
1290 | . set job=$order(^TIU(8925.2,"B",job))
|
---|
1291 |
|
---|
1292 | if Found=0 write "(There are no failed uploads to process... Great!)",!
|
---|
1293 | else write "------------------------------------------------",!
|
---|
1294 |
|
---|
1295 | set job=$order(^TIU(8925.2,"B",""))
|
---|
1296 | for do quit:(job="")!(Abort=1)
|
---|
1297 | . new Buff,NextBuff
|
---|
1298 | . if job="" quit
|
---|
1299 | . set Buff=$order(^TIU(8925.2,"B",job,""))
|
---|
1300 | . for do quit:(Buff="")!(Abort=1)
|
---|
1301 | . . if Buff="" quit
|
---|
1302 | . . if DoRetry'="all" do
|
---|
1303 | . . . write !,"Refile upload buffer #"_Buff_" (created by process #"_job_")? (y/n/all/^) "
|
---|
1304 | . . . read DoRetry:$get(DTIME,300),!
|
---|
1305 | . . else do
|
---|
1306 | . . . new GetKey
|
---|
1307 | . . . read *GetKey:0
|
---|
1308 | . . . if $get(GetKey)=27 set DoRetry="n"
|
---|
1309 | . . . else write !,!,"Processing upload buffer #",Buff,!
|
---|
1310 | . . if DoRetry="^" set Abort=1 quit
|
---|
1311 | . . if (DoRetry["y")!(DoRetry["Y")!(DoRetry="all") do
|
---|
1312 | . . . set TIUDA=Buff
|
---|
1313 | . . . ;"These is an edited form of MAIN^TIUUPLD
|
---|
1314 | . . . N EOM,TIUERR,TIUHDR,TIULN,TIUSRC,X
|
---|
1315 | . . . I '$D(TIUPRM0)!'$D(TIUPRM1) D SETPARM^TIULE
|
---|
1316 | . . . S TIUSRC=$P($G(TIUPRM0),U,9),EOM=$P($G(TIUPRM0),U,11)
|
---|
1317 | . . . I EOM']"",($P(TIUPRM0,U,17)'="k") do quit
|
---|
1318 | . . . . W !,$C(7),$C(7),$C(7),"No End of Message Signal Defined - Contact IRM.",!
|
---|
1319 | . . . S:TIUSRC']"" TIUSRC="R"
|
---|
1320 | . . . S TIUHDR=$P(TIUPRM0,U,10)
|
---|
1321 | . . . I TIUHDR']"" do quit
|
---|
1322 | . . . . W $C(7),$C(7),$C(7),"No Record Header Signal Defined - Contact IRM.",!
|
---|
1323 | . . . new temp set temp=$order(^TIU(8925.2,TIUDA,"TEXT",0))
|
---|
1324 | . . . write "First line of TEXT=",temp,!
|
---|
1325 | . . . I +$O(^TIU(8925.2,TIUDA,"TEXT",0))>0 do
|
---|
1326 | . . . . write "Calling FILE^TIUUPLD("_TIUDA_")",!
|
---|
1327 | . . . . D FILE^TIUUPLD(TIUDA)
|
---|
1328 | . . . I +$O(^TIU(8925.2,TIUDA,"TEXT",0))'>0 D BUFPURGE^TIUPUTC(TIUDA)
|
---|
1329 | . . set Buff=$order(^TIU(8925.2,"B",job,Buff))
|
---|
1330 | . set job=$order(^TIU(8925.2,"B",job))
|
---|
1331 |
|
---|
1332 | write !,"------------------------------------------------",!
|
---|
1333 | write " All done with Refiler",!
|
---|
1334 | write "------------------------------------------------",!,!
|
---|
1335 |
|
---|
1336 | RFDone
|
---|
1337 | Q
|
---|
1338 |
|
---|
1339 |
|
---|
1340 |
|
---|
1341 |
|
---|