1 | TMGSEQL2 ;TMG/kst/Interface with SequelSystems PMS (Error Hndlng) ;03/25/06
|
---|
2 | ;;1.0;TMG-LIB;**1**;01/09/06
|
---|
3 |
|
---|
4 | ;"TMG SEQUEL IMPORT ERROR-HANDLING FUNCTIONS
|
---|
5 | ;"Kevin Toppenberg MD
|
---|
6 | ;"GNU General Public License (GPL) applies
|
---|
7 | ;"1-9-2006
|
---|
8 |
|
---|
9 |
|
---|
10 | ;"=======================================================================
|
---|
11 | ;" API -- Public Functions.
|
---|
12 | ;"=======================================================================
|
---|
13 | ;"AlertError(OneLine,.PtInfo,.OneErrArray,DUZ)
|
---|
14 | ;"HANDLE
|
---|
15 |
|
---|
16 |
|
---|
17 | ;"=======================================================================
|
---|
18 | ;"PRIVATE API FUNCTIONS
|
---|
19 | ;"=======================================================================
|
---|
20 | ;"EditOneLine(LineIn,LineOut)
|
---|
21 | ;"MakeErrAlert(IEN,User,PtInfo)
|
---|
22 | ;"$$StoreError(OneLine,PtInfo,ErrArray)
|
---|
23 | ;"ErrRefile(OneLine,PtInfo,OneErrArray,DUZ)
|
---|
24 |
|
---|
25 | ;"$$FixRegProblem(PtInfo,OneLine,DelError)
|
---|
26 | ;"$$FixGenProblem(PtInfo,ErrMsg,OneLine,ErrIEN,DelError)
|
---|
27 | ;"$$FixSSNProblem(PtInfo,ErrMsg,OneLine,DelError)
|
---|
28 | ;"$$FixDOBProblem(.PtInfo,ErrMsg,.OneLine,.DelError)
|
---|
29 |
|
---|
30 | ;"$$GetSex(Name)
|
---|
31 | ;"$$SetSex(Name,Sex)
|
---|
32 | ;"$$NameError(OneErrArray)
|
---|
33 |
|
---|
34 | ;"$$IsMissingSex(ErrArray)
|
---|
35 | ;"$$GetSexMissing(PtInfo)
|
---|
36 |
|
---|
37 | ;"=======================================================================
|
---|
38 | ;"DEPENDENCIES
|
---|
39 | ;"TMGSEQL1
|
---|
40 | ;"TMGSTUTL
|
---|
41 | ;"TMGDEBUG
|
---|
42 | ;"=======================================================================
|
---|
43 | ;"=======================================================================
|
---|
44 |
|
---|
45 |
|
---|
46 | EditOneLine(LineIn,LineOut)
|
---|
47 | ;"Purpose: To allow modification of a line to allow filing.
|
---|
48 | ;"Input: LineIn -- The CSV line to modify.
|
---|
49 | ;" LineOut -- PASS BY REFERENCE, the variable to receive changes
|
---|
50 | ;"Result: 1 if changes made, 0 if no changes made, -1 if abort
|
---|
51 |
|
---|
52 | new tempArray
|
---|
53 | new done set done=0
|
---|
54 | new abort set abort=0
|
---|
55 | set LineOut=$get(LineIn)
|
---|
56 | new SavedInput set SavedInput=LineIn
|
---|
57 | new result set result=0
|
---|
58 | new temp
|
---|
59 |
|
---|
60 | if $get(LineIn)="" do goto EOLDone
|
---|
61 | . write !,"?? No data supplied to edit!",!
|
---|
62 |
|
---|
63 | for do quit:(done)!(abort)
|
---|
64 | . write !,"CSV Line Editor:",!
|
---|
65 | . write "------------------",!
|
---|
66 | . write "1. Show raw CSV line data.",!
|
---|
67 | . write "2. Show resulting parsed array from data.",!
|
---|
68 | . write "3. Modify a specified piece (part) of data.",!
|
---|
69 | . write "4. Display number of pieces, and current values.",!
|
---|
70 | . write "5. Quit.",!
|
---|
71 | . write "^. Abort changes.",!
|
---|
72 | . read !,"Enter Choice: ^// ",temp:$get(DTIME,3600),!
|
---|
73 | . if temp="" set temp="^"
|
---|
74 | . if temp=1 do
|
---|
75 | . . write OneLine,!
|
---|
76 | . else if temp=2 do
|
---|
77 | . . new Array,prsResult
|
---|
78 | . . set prsResult=$$ParseLine^TMGSEQL1(LineOut,.Array)
|
---|
79 | . . if prsResult'=0 do ArrayDump^TMGDEBUG("Array")
|
---|
80 | . . ;"else if prsResult=0 write "There was either a problem parsing this info",!
|
---|
81 | . . ;"else if prsResult-1 write "This patient is inactive, and should be ignored",!
|
---|
82 | . else if temp=3 do
|
---|
83 | . . new P,value
|
---|
84 | . . write "Which piece do you want to edit? (i.e. 1 for first CSV value, 2 for the second etc.)",!
|
---|
85 | . . read "Which piece?: ",P:$get(DTIME,3600),!
|
---|
86 | . . if P="^" set abort=1 quit
|
---|
87 | . . if +P=0 write "Please enter a numeric value.",! quit
|
---|
88 | . . write "The current value for this piece is: ",$piece(LineOut,",",P),!
|
---|
89 | . . read "Enter new value (^ to abort): ",value,!
|
---|
90 | . . if value="^" quit
|
---|
91 | . . set $piece(LineOut,",",P)=value
|
---|
92 | . . set result=1
|
---|
93 | . else if temp=4 do
|
---|
94 | . . new i for i=1:1:20 do
|
---|
95 | . . . write "Piece #",i," = ",$piece(LineOut,",",i),!
|
---|
96 | . else if temp=5 do
|
---|
97 | . . set done=1
|
---|
98 | . else if temp="^" do
|
---|
99 | . . set abort=1
|
---|
100 | . else do quit
|
---|
101 | . . write "Please enter a valid choice, or ^ to abort.",!
|
---|
102 |
|
---|
103 |
|
---|
104 | EOLDone
|
---|
105 | if abort do
|
---|
106 | . set result=-1
|
---|
107 | . set LineOut=SavedInput
|
---|
108 |
|
---|
109 | quit result
|
---|
110 |
|
---|
111 |
|
---|
112 | AlertError(OneLine,PtInfo,OneErrArray,DUZ)
|
---|
113 | ;"Purpose: To put the error information info into TMG DEMOGRAPHICS IMPORT ERRORS (22706)
|
---|
114 | ;" and to create a corresponding alert
|
---|
115 | ;"Input: OneLine -- The original CVS format data line
|
---|
116 | ;" PtInfo -- PASS BY REFERENCE. an array containing patient info, as created by ParseLine()
|
---|
117 | ;" ErrArray -- PASS BY REFERENCE. The Array containing the error information,
|
---|
118 | ;" with following format:
|
---|
119 | ;" ErrArray(0)=local message (if any)
|
---|
120 | ;" ErrArray("DIERR")=Standard fileman DIERR array.
|
---|
121 | ;" User -- the IEN in file 200 (i.e. DUZ) of user to receive alert.
|
---|
122 | ;"Output: new record is created in file 22706
|
---|
123 | ;"Result: none
|
---|
124 |
|
---|
125 | new IEN,Msg
|
---|
126 | set IEN=$$StoreError^TMGSEQL2(OneLine,.PtInfo,.OneErrArray)
|
---|
127 | set Msg=$get(OneErrArray(0),"Problem with upload of Sequel data for:")
|
---|
128 | set Msg=$piece(Msg,":",1)
|
---|
129 | set Msg=Msg_" "_$get(PtInfo("FULL NAME"))
|
---|
130 | do MakeErrAlert^TMGSEQL2(IEN,DUZ,Msg)
|
---|
131 |
|
---|
132 | quit
|
---|
133 |
|
---|
134 |
|
---|
135 | StoreError(OneLine,PtInfo,ErrArray)
|
---|
136 | ;"Purpose: To put the error information info into TMG DEMOGRAPHICS IMPORT ERRORS (22706)
|
---|
137 | ;"Input: OneLine -- The original CVS format data line
|
---|
138 | ;" PtInfo -- PASS BY REFERENCE. an array containing patient info, as created by ParseLine()
|
---|
139 | ;" ErrArray -- PASS BY REFERENCE. The Array containing the error information,
|
---|
140 | ;" with following format:
|
---|
141 | ;" ErrArray(0)=local message (if any)
|
---|
142 | ;" ErrArray("DIERR")=Standard fileman DIERR array.
|
---|
143 | ;"Output: new record is created in file 22706
|
---|
144 | ;"Result: IEN of newly created record (or 0 if error).
|
---|
145 |
|
---|
146 | new result set result=0
|
---|
147 | new TMGFDA,Name
|
---|
148 | set Name=$get(PtInfo("FULL NAME3"))
|
---|
149 | set Msg=$get(ErrArray(0))
|
---|
150 |
|
---|
151 | set TMGFDA(22706,"+1,",.01)=$get(PtInfo("SEQUEL ACCOUNT NUM")) ;".01=ACCOUNT NUMBER
|
---|
152 | set TMGFDA(22706,"+1,",.02)="NOW" ;".02=CREATION DATE
|
---|
153 | set TMGFDA(22706,"+1,",.03)=Name ;".03=PATIENT NAME
|
---|
154 | if Msg'="" set TMGFDA(22706,"+1,",1)=Msg ;"1=MESSAGE
|
---|
155 | new TMGIENA,TMGERR
|
---|
156 | do UPDATE^DIE("E","TMGFDA","TMGIENA","TMGERR")
|
---|
157 | new IEN set IEN=$get(TMGIENA(1))
|
---|
158 |
|
---|
159 | new TMGWP
|
---|
160 | new TMGDIERR merge TMGDIERR("DIERR")=ErrArray("DIERR")
|
---|
161 | new ErrStr set ErrStr=$$GetErrStr^TMGDEBUG(.TMGDIERR)
|
---|
162 | if ErrStr'="" do
|
---|
163 | . do StrToWP^TMGSTUTL(ErrStr,"TMGWP",60," ")
|
---|
164 | . if +IEN>0 do
|
---|
165 | . . do WP^DIE(22706,IEN_",",3,,"TMGWP","TMGERR") ;"3=DIERR MESSAGE
|
---|
166 | . . new PriorErrorFound set PriorErrorFound=0
|
---|
167 | . . if $data(TMGERR("DIERR")) do ShowDIERR^TMGDEBUG(.TMGERR,.PriorErrorFound)
|
---|
168 |
|
---|
169 | kill TMGWP
|
---|
170 | do StrToWP^TMGSTUTL(OneLine,"TMGWP",60,",")
|
---|
171 | if +IEN>0 do
|
---|
172 | . do WP^DIE(22706,IEN_",",2,,"TMGWP","TMGERR") ;"2=IMPORT DATA
|
---|
173 | . new PriorErrorFound set PriorErrorFound=0
|
---|
174 | . if $data(TMGERR("DIERR")) do ShowDIERR^TMGDEBUG(.TMGERR,.PriorErrorFound)
|
---|
175 |
|
---|
176 | set result=IEN
|
---|
177 |
|
---|
178 | quit result
|
---|
179 |
|
---|
180 |
|
---|
181 | MakeErrAlert(IEN,User,Message)
|
---|
182 | ;"Purpose: To create an alert regarding upload error
|
---|
183 | ;"Input: IEN -- The IEN of the error, stored in file 22706
|
---|
184 | ;" User -- the IEN in file 200 (i.e. DUZ) of user to receive alert.
|
---|
185 | ;" Message -- the Message of the alert
|
---|
186 | ;"Output: An alert will be created in send to User
|
---|
187 | ;"Result: none
|
---|
188 |
|
---|
189 | new XQA,XQAMSG,XQAID
|
---|
190 | new XQAOPT ;" ensure no residual menu option specified
|
---|
191 |
|
---|
192 | set XQA(User)=""
|
---|
193 | set XQAMSG=Message
|
---|
194 | set XQAID="TMGSQLIMPORT"
|
---|
195 | set XQADATA=IEN
|
---|
196 | set XQAROU="HANDLE^TMGSEQL2"
|
---|
197 |
|
---|
198 | do SETUP^XQALERT
|
---|
199 |
|
---|
200 | quit
|
---|
201 |
|
---|
202 | ErrRefile(OneLine,PtInfo,OneErrArray,DUZ)
|
---|
203 | ;"Purpose: A common point to process errors encountering errors on refilling
|
---|
204 | ;"Input: OneLine -- the originial CSV data line.
|
---|
205 | ;" PtInfo -- PASS BY REFERENCE -- the Patient Info array, as created by ParseLine^TMGSEQL1
|
---|
206 | ;" OneErrArray -- PASS BY REFERENCE -- The error array encountered, returned from Fileman
|
---|
207 | ;" DUZ -- the user IEN (from file 2) to recieve alert
|
---|
208 | ;"Output: A new alert will be created, and messages written to screen
|
---|
209 | ;"Result : none
|
---|
210 |
|
---|
211 | write "There is still an error:",!
|
---|
212 | zwr OneErrArray(*)
|
---|
213 | write "A new alert will be made to handle this new error.",!
|
---|
214 | set OneErrArray(0)=$$NameError(.OneErrArray)
|
---|
215 | write OneErrArray(0),!
|
---|
216 | do AlertError^TMGSEQL2(.OneLine,.PtInfo,.OneErrArray,DUZ)
|
---|
217 |
|
---|
218 | quit
|
---|
219 |
|
---|
220 | HANDLE
|
---|
221 | ;"Purpose: This is called by the alert system to handle the error alert
|
---|
222 | ;"Input: All the inputs are via variables with global scope. Details below
|
---|
223 | ;" XQADATA-- the IEN in file 22706
|
---|
224 | ;" XQAKILL-- 1 --> kill when done. To alter behavior, this function can change
|
---|
225 | ;" (to prevent deletion when done, then KILL XQAKILL)
|
---|
226 | ;"Output: Allows user to edit data and reattempt filing of data
|
---|
227 | ;"Result: none.
|
---|
228 |
|
---|
229 |
|
---|
230 | new Fixed set Fixed=0
|
---|
231 |
|
---|
232 | new OneLine,PtInfo
|
---|
233 | new TMGWP,TMGMSG
|
---|
234 | new tempResult
|
---|
235 | new ErrIEN
|
---|
236 | new DelError set DelError=0
|
---|
237 |
|
---|
238 | if $get(XQADATA)'>0 do goto HndDone
|
---|
239 | . write !!,"No value in XQADATA, so quitting.",!
|
---|
240 | . write "(Deleting alert.)",!
|
---|
241 | . set Fixed=1,DelError=1
|
---|
242 | set ErrIEN=XQADATA
|
---|
243 |
|
---|
244 | write !!,"Problem with upload of Sequel data. ",!
|
---|
245 |
|
---|
246 | ;"temp
|
---|
247 | write "IEN in file# 22706=",ErrIEN,!
|
---|
248 |
|
---|
249 | new x set x=$$GET1^DIQ(22706,ErrIEN_",",2,"","TMGWP","TMGMSG")
|
---|
250 | if $data(TMGMSG("DIERR"))'=0 do goto HndDone
|
---|
251 | . new PriorErrorFound
|
---|
252 | . do ShowDIERR^TMGDEBUG(.TMGMSG,.PriorErrorFound)
|
---|
253 | . set Fixed=1,DelError=1
|
---|
254 | set OneLine=$$WPToStr^TMGSTUTL("TMGWP","")
|
---|
255 | if $$ParseLine^TMGSEQL1(OneLine,.PtInfo)=0 do goto HndDone
|
---|
256 | . write "Error parsing Alert data into patient data.",!
|
---|
257 | write $get(PtInfo("FULL NAME")),!
|
---|
258 |
|
---|
259 | new ErrMsg set ErrMsg=$$GET1^DIQ(22706,ErrIEN_",",1)
|
---|
260 | write ErrMsg,!
|
---|
261 |
|
---|
262 | kill TMGWP,TMGMSG
|
---|
263 | new x set x=$$GET1^DIQ(22706,ErrIEN_",",3,"","TMGWP","TMGMSG")
|
---|
264 | if $data(TMGMSG("DIERR"))'=0 do goto HndDone
|
---|
265 | . new PriorErrorFound
|
---|
266 | . do ShowDIERR^TMGDEBUG(.TMGMsg,.PriorErrorFound)
|
---|
267 | . set Fixed=1,DelError=1
|
---|
268 | if $data(TMGWP) do
|
---|
269 | . do WriteWP^TMGSTUTL("TMGWP")
|
---|
270 |
|
---|
271 | if ErrMsg["PATIENT NOT IN DATABASE" do
|
---|
272 | . set Fixed=$$FixRegProblem(.PtInfo,.OneLine,.DelError)
|
---|
273 | else if ErrMsg["INVALID/MISSING GENDER" do
|
---|
274 | . set Fixed=$$FixRegProblem(.PtInfo,.OneLine,.DelError)
|
---|
275 | else if ErrMsg["CONFLICTING SS-NUMBERS" do
|
---|
276 | . set Fixed=$$FixSSNProblem(.PtInfo,ErrMsg,.OneLine,.DelError)
|
---|
277 | else if ErrMsg["INVALID DOB ERROR" do
|
---|
278 | . write "Date of birth (DOB) is incorrect for this patient.",!
|
---|
279 | . write "Note: The recommended method of correcting this problem is",!
|
---|
280 | . write " to fix the problem in Sequel, not here. Otherwise",!
|
---|
281 | . write " the same error will be encountered with each demographics",!
|
---|
282 | . write " upload.",!!
|
---|
283 | . set Fixed=$$FixGenProblem(.PtInfo,ErrMsg,.OneLine,.DelError)
|
---|
284 | else do
|
---|
285 | . set Fixed=$$FixGenProblem(.PtInfo,ErrMsg,.OneLine,.DelError,ErrIEN)
|
---|
286 |
|
---|
287 | if DelError=1 do
|
---|
288 | . new temp,ErrArray
|
---|
289 | . set temp=$$DelIEN^TMGDBAPI(22706,ErrIEN,.ErrArray) ;"success, so kill error entry in 22706
|
---|
290 |
|
---|
291 | HndDone
|
---|
292 | ;"if Fixed=1 write !,"SUCCESS!"
|
---|
293 |
|
---|
294 | if (Fixed=0)!(DelError=0) do ;"<------------- this logic may be off...
|
---|
295 | . kill XQAKILL ;"--> don't delete alert
|
---|
296 | . write "(Saving alert...)",!
|
---|
297 |
|
---|
298 | quit
|
---|
299 |
|
---|
300 |
|
---|
301 | FixRegProblem(PtInfo,OneLine,DelError)
|
---|
302 | ;"Purpose: To fix problems where patient couldn't be added to the database
|
---|
303 | ;"Input: PtInfo -- PASS BY REFERENCE -- the Patient Info array, as created by ParseLine^TMGSEQL1
|
---|
304 | ;" OneLine -- the originial CSV data line. Passed to this function in case a new Alert
|
---|
305 | ;" must be created, in which case it is stored in the new error message.
|
---|
306 | ;" DelError -- and OUT parameter. Set to 1 will signal the deletion of the error
|
---|
307 | ;" record in file 22706
|
---|
308 | ;"Output: Patient may be added to FILE 2, or file updated. If succesfull, record of error
|
---|
309 | ;" in file 22706 will deleted
|
---|
310 | ;"Result: 1=problem fixed, 0=not fixed.
|
---|
311 |
|
---|
312 | new Fixed set Fixed=0
|
---|
313 | set DelError=0
|
---|
314 | new TMGRemSex,InitRemSex
|
---|
315 | set TMGRemSex=+$$GET1^DIQ(22711,"1,","PICK GENDER FROM NAME?","I")
|
---|
316 | set InitRemSex=TMGRemSex
|
---|
317 |
|
---|
318 | new AutoRegister set AutoRegister=1 ;"automatically add patient to database if not found
|
---|
319 | new OneErrArray,ChgLog
|
---|
320 | new done set done=0
|
---|
321 | for do quit:(done=1)
|
---|
322 | . kill OneErrArray,ChgLog
|
---|
323 | . new tempResult
|
---|
324 | . set tempResult=$$UpdateDB^TMGSEQL1(.PtInfo,AutoRegister,.OneErrArray,.ChgLog) ;"0=error
|
---|
325 | . set DelError=1
|
---|
326 | . set Fixed=1
|
---|
327 | . set done=1
|
---|
328 | . if tempResult=0 do
|
---|
329 | . . if $$IsMissingSex(.OneErrArray)=1 do
|
---|
330 | . . . if $$GetSexMissing(.PtInfo,.TMGRemSex)=0 do
|
---|
331 | . . . . set done=1 ;"0=failed
|
---|
332 | . . . . set Fixed=0
|
---|
333 | . . else do
|
---|
334 | . . . write "There is still an error:",!
|
---|
335 | . . . ;"zwr OneErrArray(*)
|
---|
336 | . . . write "A new alert will be made to handle this new error.",!
|
---|
337 | . . . do ErrRefile(.OneLine,.PtInfo,.OneErrArray,DUZ)
|
---|
338 | . . . ;"set OneErrArray(0)=$$NameError(.OneErrArray)
|
---|
339 | . . . ;"write OneErrArray(0),!
|
---|
340 | . . . ;"do AlertError^TMGSEQL2(.OneLine,.PtInfo,.OneErrArray,DUZ)
|
---|
341 |
|
---|
342 | if TMGRemSex'=InitRemSex do ;"if status of auto-pick gender was changed in GetSexMissing, store in settings.
|
---|
343 | . new TMGFDA,TMGMSG
|
---|
344 | . set TMGFDA(22711,"1,",6)=TMGRemSex ;"field# 6='PICK GENDER FROM NAME?'
|
---|
345 | . do FILE^DIE("E","TMGFDA","TMGMSG") ;"note TMGMSG is ignored here...
|
---|
346 |
|
---|
347 | quit Fixed
|
---|
348 |
|
---|
349 | IsMissingSex(ErrArray)
|
---|
350 | ;"Purpose: To analyze a Fileman error array and see if field .02 (SEX) is missing, causing problem
|
---|
351 | ;"Input: ErrArray -- PASS BY REFERENCE, an error message, as created by Fileman while adding patient.
|
---|
352 | ;"Result: 1=missing sex (.02 field), other 0
|
---|
353 | ;"Note: this only reviews error #1 (ignores other errors, if present. So, if missing sex error
|
---|
354 | ;" was in position #2, this function WOULD RETURN AN ERRORONEOUS ANSWER.
|
---|
355 |
|
---|
356 | new result set result=0
|
---|
357 |
|
---|
358 | if $data(ErrArray("DIERR","E",311,1)) do ;"311=The record lacks some required identifiers.
|
---|
359 | . if $get(ErrArray("DIERR",1,"PARAM","FIELD"))'=.02 quit
|
---|
360 | . if $get(ErrArray("DIERR",1,"PARAM","FILE"))'=2 quit
|
---|
361 | . set result=1
|
---|
362 |
|
---|
363 | quit result
|
---|
364 |
|
---|
365 |
|
---|
366 |
|
---|
367 |
|
---|
368 | GetSexMissing(PtInfo,TMGRemSex)
|
---|
369 | ;"Purpose: To correct the PtInfo Array so that SEX is supplied answer.
|
---|
370 | ;"Input: PtInfo -- PASS BY REFERENCE -- the Patient Info array, as created by ParseLine^TMGSEQL1
|
---|
371 | ;" TMGRemSex --PASS BY REFERENCE -- 1 if OK to automatically pick sex based on gender of name
|
---|
372 | ;"Output: PtInfo should be filled with SEX of patient
|
---|
373 | ;"Result: 1=OK to continue, 0=failed to get SEX
|
---|
374 |
|
---|
375 | new result set result=0 ;"default to failure
|
---|
376 | new temp set temp=""
|
---|
377 | new Abort set Abort=0
|
---|
378 |
|
---|
379 | if $get(PtInfo("SEX"))'="" set result=1 goto GSMDone
|
---|
380 | if $get(PtInfo("FULL NAME"))="" goto GSMDone
|
---|
381 | new FName set FName=$get(PtInfo("FIRST NAME"))
|
---|
382 | if FName="" goto GSMDone
|
---|
383 |
|
---|
384 | for do quit:(temp'="")!(Abort=1)
|
---|
385 | . new presumedSex,RemName
|
---|
386 | . set CurrentSex=""
|
---|
387 | . set TMGRemSex=$get(TMGRemSex,0)
|
---|
388 | . write "Trying to determine the SEX of: ",PtInfo("FULL NAME"),!!
|
---|
389 | . write "OPTIONS:",!
|
---|
390 | . write "-----------------",!
|
---|
391 | . write "M or MALE --> Name is MALE",!
|
---|
392 | . write "M! or MALE! --> ALWAYS consider this name as MALE",!
|
---|
393 | . write "F or FEMALE --> Name is FEMALE",!
|
---|
394 | . write "F! or FEMALE! --> ALWAYS consider this name as FEMALE",!
|
---|
395 | . write "AUTO --> Turn auto-pick-gender: ",$select(TMGRemSex=1:"OFF",1:"ON"),!
|
---|
396 | . write "^ Abort",!
|
---|
397 | . set presumedSex=$$GetSex(FName)
|
---|
398 | . write "Is ",FName," MALE or FEMALE? ",presumedSex,"//"
|
---|
399 | . if (TMGRemSex=1)&(presumedSex'="") set temp=presumedSex
|
---|
400 | . else read temp:$get(DTIME,3600)
|
---|
401 | . if temp="" set temp=presumedSex
|
---|
402 | . set RemName=(temp["!")
|
---|
403 | . set temp=$translate(temp,"!","")
|
---|
404 | . set temp=$$UP^XLFSTR(temp)
|
---|
405 | . if (temp="M")!(temp="MALE") set CurrentSex="MALE"
|
---|
406 | . else if (temp="F")!(temp="FEMALE") set CurrentSex="FEMALE"
|
---|
407 | . else if temp="^" do quit
|
---|
408 | . . write "aborting..",!
|
---|
409 | . . set Abort=1
|
---|
410 | . else if temp="AUTO" do
|
---|
411 | . . set TMGRemSex='(TMGRemSex)
|
---|
412 | . if CurrentSex'="" do quit
|
---|
413 | . . write " ",CurrentSex,!
|
---|
414 | . . set PtInfo("SEX")=CurrentSex
|
---|
415 | . . set result=1
|
---|
416 | . . if RemName do
|
---|
417 | . . . new temp set temp=$$SetSex(FName,CurrentSex)
|
---|
418 | . set temp="" ;" a signal to try again.
|
---|
419 |
|
---|
420 | GSMDone
|
---|
421 | quit result
|
---|
422 |
|
---|
423 |
|
---|
424 | FixSSNProblem(PtInfo,ErrMsg,OneLine,DelError)
|
---|
425 | ;"Purpose: To fix problems of conflicting SS numbers
|
---|
426 | ;"Input: PtInfo -- PASS BY REFERENCE -- the Patient Info array, as created by ParseLine^TMGSEQL1
|
---|
427 | ;" ErrMsg -- the message that holds the conflicting SSNums
|
---|
428 | ;" OneLine -- the originial CSV data line. Passed to this function in case a new Alert
|
---|
429 | ;" must be created, in which case it is stored in the new error message.
|
---|
430 | ;" DelError -- and OUT parameter. Set to 1 will signal the deletion of the error
|
---|
431 | ;" record in file 22706
|
---|
432 | ;"Output: Patient may be added to FILE 2, or file updated. If succesfull, record of error
|
---|
433 | ;" in file 22706 will deleted
|
---|
434 | ;"Result: 1=problem fixed, 0=not fixed.
|
---|
435 |
|
---|
436 | new sqSSNum,vSSNum
|
---|
437 | new Fixed set Fixed=0
|
---|
438 | new done set done=0
|
---|
439 | set DelError=0
|
---|
440 |
|
---|
441 | if $get(ErrMsg)="" goto FSNPDone
|
---|
442 |
|
---|
443 | if ErrMsg["(Sequel#)" do ;"old format
|
---|
444 | . set sqSSN=$piece(ErrMsg,"SS-NUMBERS: ",2)
|
---|
445 | . set sqSSN=$piece(sqSSN," ",1)
|
---|
446 | . set vSSN=$piece(ErrMsg,"vs. ",2)
|
---|
447 | . set vSSN=$piece(vSSN," ",1)
|
---|
448 | else do
|
---|
449 | . set sqSSN=$piece(ErrMsg,"Sequel#=",2)
|
---|
450 | . set sqSSN=$piece(sqSSN," ",1)
|
---|
451 | . set vSSN=$piece(ErrMsg,"VistA#=",2)
|
---|
452 | . set vSSN=$piece(vSSN," ",1)
|
---|
453 |
|
---|
454 | new vFullName
|
---|
455 | do ;"get actual full name & DOB for VistA SSN
|
---|
456 | . new vName,vDOB
|
---|
457 | . new tempDFN set tempDFN=$$SSNumLookup^TMGGDFN(vSSN)
|
---|
458 | . new TMGMSG,TMGERR,IENS
|
---|
459 | . set IENS=+tempDFN_","
|
---|
460 | . do GETS^DIQ(2,IENS,".01;.03","E","TMGMSG","TMGERR")
|
---|
461 | . if $data(TMGERR("DIERR")) do
|
---|
462 | . . new PriorErrorFound
|
---|
463 | . . do ShowDIERR^TMGDEBUG(.TMGMSG,.PriorErrorFound)
|
---|
464 | . set vName=$get(TMGMSG(2,IENS,.01,"E"))
|
---|
465 | . set vDOB=$get(TMGMSG(2,IENS,.03,"E"))
|
---|
466 | . set vFullName=vName_" ("_vDOB_")"
|
---|
467 |
|
---|
468 | write !
|
---|
469 |
|
---|
470 | for do quit:(done=1)
|
---|
471 | . write "There is a conflict between Social Security Numbers (SSN):",!
|
---|
472 | . write "1. ",sqSSN," is the Sequel SSN for: ",$get(PtInfo("FULL NAME2")),!
|
---|
473 | . write "2. ",vSSN," is the VistA SSN for: ",$get(vFullName),!
|
---|
474 | . write "3. (Don't change either one, but remove alert)",!
|
---|
475 | . write !,"Which SSN is correct? (1, 2, 3, or ^ to abort)? // "
|
---|
476 | . new temp read temp:$get(DTIME,3600),!
|
---|
477 | . if temp="^" set done=1 quit ;"quit, error unfixed.
|
---|
478 | . if temp=3 do quit ;"keep both
|
---|
479 | . . write "OK, no data changes made. Will delete alert.",!
|
---|
480 | . . set Fixed=1,done=1
|
---|
481 | . if temp=2 do quit ;"keep VistA, advice manual fix in Sequel database, delete alert.
|
---|
482 | . . write "OK. Please manually alter the SSN in the Sequel Database. This should then be",!
|
---|
483 | . . write "reflected in the next demographic data upload cycle.",!
|
---|
484 | . . set Fixed=1 ;"This will signal the deletion of the alert
|
---|
485 | . . set done=1
|
---|
486 | . if temp=1 do ;"keep Sequel, delete VistA SSN
|
---|
487 | . . set done=1
|
---|
488 | . . set Fixed=1
|
---|
489 | . . set DelError=1
|
---|
490 | . . new DFN set DFN=$$GetDFN^TMGSEQL1(.PtInfo)
|
---|
491 | . . new TMGFDA,TMGMSG,tempResult
|
---|
492 | . . set TMGFDA(2,DFN_",",.09)="@" ;"delete .09 field (SSN)
|
---|
493 | . . set tempResult=$$dbWrite^TMGDBAPI(.TMGFDA,1,,,.TMGMSG)
|
---|
494 | . . if tempResult=0 quit ;"error found, so quit
|
---|
495 | . . ;"Now try filing again.
|
---|
496 | . . new OneErrErray,ChgLog
|
---|
497 | . . new AutoRegister set AutoRegister=0 ;"should need to add patient, as must exist to confilict in first place!
|
---|
498 | . . set tempResult=$$UpdateDB^TMGSEQL1(.PtInfo,AutoRegister,.OneErrArray,.ChgLog) ;"0=error
|
---|
499 | . . if tempResult=0 do
|
---|
500 | . . . do ErrRefile(.OneLine,.PtInfo,.OneErrArray,DUZ)
|
---|
501 | . . . ;"write "There is still an error:",!
|
---|
502 | . . . ;"zwr OneErrArray(*)
|
---|
503 | . . . ;"write "A new alert will be made to handle this new error.",!
|
---|
504 | . . . ;"set OneErrArray(0)=$$NameError(.OneErrArray)
|
---|
505 | . . . ;"write OneErrArray(0),!
|
---|
506 | . . . ;"do AlertError^TMGSEQL2(.OneLine,.PtInfo,.OneErrArray,DUZ)
|
---|
507 |
|
---|
508 | FSNPDone
|
---|
509 | quit Fixed
|
---|
510 |
|
---|
511 |
|
---|
512 |
|
---|
513 | GetSex(Name)
|
---|
514 | ;"Purpose: To return gender of Name, as stored in file 22707
|
---|
515 | ;"Input: Name - a FIRST name
|
---|
516 | ;"Result: Returns MALE, FEMALE, or "" if not found
|
---|
517 |
|
---|
518 | new result set result=""
|
---|
519 | if $get(Name)="" goto GSDone
|
---|
520 | new DIC,X,Y
|
---|
521 | set DIC=22707
|
---|
522 | set DIC(0)="M"
|
---|
523 | set X=Name
|
---|
524 | do ^DIC
|
---|
525 | if +Y'>0 goto GSDone
|
---|
526 | set result=$$GET1^DIQ(22707,+Y_",",1)
|
---|
527 |
|
---|
528 | GSDone
|
---|
529 | quit result
|
---|
530 |
|
---|
531 |
|
---|
532 |
|
---|
533 | SetSex(Name,Sex)
|
---|
534 | ;"Purpose: To create a new record in file 22707 to store gender of name
|
---|
535 | ;"Input: Name -- a FIRST name to store gender for
|
---|
536 | ;" Sex -- should be "MALE", or "FEMALE"
|
---|
537 | ;"Note: Will not do anything if a record for name already exists
|
---|
538 | ;"Result: 1=OK to continue 0=some error
|
---|
539 |
|
---|
540 | new result set result=1
|
---|
541 | if '$data(Name)!'$data(Sex) goto SSxDone
|
---|
542 | if $$GetSex(Name)'="" goto SSxDone
|
---|
543 | new TMGFDA
|
---|
544 | set TMGFDA(22707,"+1,",.01)=Name
|
---|
545 | set TMGFDA(22707,"+1,",1)=Sex
|
---|
546 | set result=$$dbWrite^TMGDBAPI(.TMGFDA,0)
|
---|
547 |
|
---|
548 | SSxDone
|
---|
549 | quit result
|
---|
550 |
|
---|
551 |
|
---|
552 | NameError(OneErrArray)
|
---|
553 | ;"Purpose: to review a fileman "DIERR" array and pick out common problems
|
---|
554 | ;"Input: OneErrArray -- a fileman array containing "DIERR" message
|
---|
555 | ;"Result: return a name for error
|
---|
556 |
|
---|
557 | new result set result=""
|
---|
558 |
|
---|
559 | new Array
|
---|
560 | if $data(OneErrArray("DIERR"))>1 do
|
---|
561 | . merge Array=OneErrArray("DIERR")
|
---|
562 | else do
|
---|
563 | . merge Array=OneErrArray
|
---|
564 |
|
---|
565 | new field set field=$get(Array(1,"PARAM","FIELD"))
|
---|
566 |
|
---|
567 | if $data(Array)>0 do
|
---|
568 | . new FileNum set FileNum=+$get(Array(1,"PARAM","FILE"))
|
---|
569 | . if (FileNum>0)&(FileNum'=2) quit
|
---|
570 | . if field>0 set result="FILEMAN ERROR:"
|
---|
571 | . if field=.03 do
|
---|
572 | . . set result="INVALID DOB ERROR:"
|
---|
573 | . if field=.02 do
|
---|
574 | . . set result="INVALID/MISSING GENDER:"
|
---|
575 | . if $data(Array(1,"TEXT")) do
|
---|
576 | . . new s set s=$get(Array(1,"TEXT",1))
|
---|
577 | . . set result=result_$extract(s,1,80)_"..."
|
---|
578 | . if result["CONFLICTING SS-NUMBERS" do
|
---|
579 | . . set result="CONFLICTING SS-NUMBERS: "
|
---|
580 |
|
---|
581 | if result="" set result=$get(Array(0),"Sequel Import Error:")
|
---|
582 |
|
---|
583 | quit result
|
---|
584 |
|
---|
585 |
|
---|
586 | FixGenProblem(PtInfo,ErrMsg,OneLine,DelError,ErrIEN)
|
---|
587 | ;"Purpose: To fix a generic (no specified) error
|
---|
588 | ;"Input: PtInfo -- PASS BY REFERENCE -- the Patient Info array, as created by ParseLine^TMGSEQL1
|
---|
589 | ;" ErrMsg -- the message that holds the conflicting SSNums
|
---|
590 | ;" OneLine -- the originial CSV data line. Passed to this function in case a new Alert
|
---|
591 | ;" must be created, in which case it is stored in the new error message.
|
---|
592 | ;" DelError -- and OUT parameter. Set to 1 will signal the deletion of the error
|
---|
593 | ;" record in file 22706
|
---|
594 | ;" ErrIEN -- the IEN in file 22706 containing full error info.
|
---|
595 | ;"Output: Patient may be added to FILE 2, or file updated. If succesfull, record of error
|
---|
596 | ;" in file 22706 will deleted
|
---|
597 | ;"Result: 1=problem fixed, 0=not fixed.
|
---|
598 |
|
---|
599 | new Fixed set Fixed=0
|
---|
600 | new done set done=0
|
---|
601 | set DelError=0
|
---|
602 | new done set done=0
|
---|
603 | new AutoRegister set AutoRegister=1 ;"automatically add patient to database if not found
|
---|
604 |
|
---|
605 | new temp
|
---|
606 | set temp="?"
|
---|
607 | for do quit:(done=1)
|
---|
608 | . if temp="?" do quit
|
---|
609 | . . write "Options:",!
|
---|
610 | . . write "-----------------",!
|
---|
611 | . . write "D Show the data line from the other computer (Sequel)",!
|
---|
612 | . . write "E Edit data line.",!
|
---|
613 | . . write "R Retry filing data into database to get more information.",!
|
---|
614 | . . write "S Show parsed patient information.",!
|
---|
615 | . . write "X Delete this Alert.",!
|
---|
616 | . . write "Q Query the database to see existing entries.",!
|
---|
617 | . . write "^ Abort.",!
|
---|
618 | . . set temp=""
|
---|
619 | . else if temp="Q" do quit
|
---|
620 | . . new DIC set DIC=2
|
---|
621 | . . set DIC(0)="AEQM"
|
---|
622 | . . do ^DIC
|
---|
623 | . . set temp=""
|
---|
624 | . else if temp="D" do quit
|
---|
625 | . . write !,OneLine,!
|
---|
626 | . . set temp=""
|
---|
627 | . else if temp="S" do quit
|
---|
628 | . . zwr PtInfo(*)
|
---|
629 | . . set temp=""
|
---|
630 | . else if temp="E" do quit
|
---|
631 | . . new r,NewLine
|
---|
632 | . . set r=$$EditOneLine(OneLine,.NewLine)
|
---|
633 | . . if r=1 set OneLine=NewLine ;"NOTE: later I will save old line to keep from having to process each update cycle
|
---|
634 | . . kill PtInfo
|
---|
635 | . . if $$ParseLine^TMGSEQL1(OneLine,.PtInfo)=0 do quit
|
---|
636 | . . . write "There was a problem processing this line after your edit. Sorry!",!
|
---|
637 | . . write "OK, now try refilling data into database.",!
|
---|
638 | . . set temp="?"
|
---|
639 | . else if temp="^" do quit
|
---|
640 | . . write "aborting..",!
|
---|
641 | . . set done=1
|
---|
642 | . else if temp="X" do quit
|
---|
643 | . . write "OK, will delete this alert.",!
|
---|
644 | . . ;"Note: do something to delete alert.
|
---|
645 | . . set done=1,DelError=1,Fixed=1
|
---|
646 | . else if temp="R" do quit
|
---|
647 | . . new OneErrErray,ChgLog
|
---|
648 | . . set tempResult=$$UpdateDB^TMGSEQL1(.PtInfo,AutoRegister,.OneErrArray,.ChgLog) ;"0=error
|
---|
649 | . . set DelError=1
|
---|
650 | . . set Fixed=1 ;"consider 'fixed' so alert will be deleted
|
---|
651 | . . set done=1
|
---|
652 | . . if tempResult=0 do
|
---|
653 | . . . do ErrRefile(.OneLine,.PtInfo,.OneErrArray,DUZ)
|
---|
654 | . . . ;"write "There is still an error:",!
|
---|
655 | . . . ;"zwr OneErrArray(*)
|
---|
656 | . . . ;"write "A new alert will be made to handle this new error.",!
|
---|
657 | . . . ;"set OneErrArray(0)=$$NameError(.OneErrArray)
|
---|
658 | . . . ;"write OneErrArray(0),!
|
---|
659 | . . . ;"do AlertError^TMGSEQL2(.OneLine,.PtInfo,.OneErrArray,DUZ)
|
---|
660 | . read !,"Enter Option: ?//",temp:$get(DTIME,3600),!
|
---|
661 | . if temp="" set temp="?"
|
---|
662 | . set temp=$$UP^XLFSTR(temp)
|
---|
663 | . quit
|
---|
664 |
|
---|
665 | FGPDone
|
---|
666 | quit Fixed
|
---|
667 |
|
---|
668 |
|
---|
669 |
|
---|