[796] | 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 |
|
---|