1 | DVBHQD1 ;ISC-ALBANY/PKE/PHH- HINQ receiver ; 5/15/06 10:58am
|
---|
2 | ;;4.0;HINQ;**3,12,16,22,23,32,34,40,46,49,57,56**; 03/25/92
|
---|
3 | ;
|
---|
4 | S:'$D(DTIME) DTIME=300 S DVBTIME=DTIME
|
---|
5 | EN S:$G(IO(0))="" IO(0)=$I S (C,DVBTSK,DVBABORT)=0,DVBXM=1,DTIME=30 U IO(0)
|
---|
6 | ;
|
---|
7 | SEL S (DVBRTC,DVBTRY)=1,DVBNRT="Y"
|
---|
8 | R !!," Select Input: (P)atient File, or (D)irect P//",X:DTIME I '$T!(X["^") G HINQ
|
---|
9 | I "Pp"[$E(X) S DVBPRGM="TM^DVBHIQD" G ASK
|
---|
10 | I "Dd"[$E(X_1) S DVBPRGM="EN^DVBHQDE" G ASK
|
---|
11 | I X["?" D HP^DVBHQAT G SEL
|
---|
12 | G SEL
|
---|
13 | ASK S:$G(IO(0))="" IO(0)=$I W ! S Y=0,DVBIO=IO D @DVBPRGM
|
---|
14 | ASK1 I Y'<0,$D(DVBP),$L(DVBP)=4 S IO=DVBIO D STUFF^DVBHQAT:$D(DFN),MES
|
---|
15 | I $D(DVBMISS) K DVBMISS D:DVBTRY>3 RETRY^DVBHQD2 G:DVBNRT="N" LOAD2^DVBHQD2 I DVBTRY<4&(DVBRTC<4) S DVBTRY=DVBTRY+1 U IO(0) W ?35,"Retrying Request." G ASK1
|
---|
16 | S IO=DVBIO U IO(0) K DVBP S DVBABORT=0
|
---|
17 | I '$D(Y) G ASK
|
---|
18 | I Y>0 G ASK
|
---|
19 | ;
|
---|
20 | HINQ U IO(0) W !!,"Do you wish to continue" S %=2 D YN^DICN G:'% HINQ I %=1 W ! G EN
|
---|
21 | EX S DTIME=$S($D(DVBTIME):DVBTIME,1:300)
|
---|
22 | Q
|
---|
23 | MES ;
|
---|
24 | S:$G(IO(0))="" IO(0)=$I S E=$L(DVBZ) I '$D(DVBDXX),($E(DVBZ,E-7,E-4)'=DVBNUM) S DVBZ=$E(DVBZ,1,E-4)_DVBNUM_$E(DVBZ,E-3,999)
|
---|
25 | K E H 1 S DVBEND="NNNN" S:'$D(DVBXM) DVBXM=0 S:'$D(C) C=0
|
---|
26 | ;
|
---|
27 | TOTIMS S TRY=0,CN=$F(DVBZ,"/CN",24),DVBZ0=DVBZ
|
---|
28 | I $S('$D(DFN):1,DFN:0,1:1) S CN=0 D SEND^DVBHQD2,KTO^DVBHQD2 Q
|
---|
29 | I 'CN D CNLKUP^DVBHQAT
|
---|
30 | DO D SEND^DVBHQD2 I TRY DO I TRY H 1 D SEND^DVBHQD2
|
---|
31 | .I CN,'TRY S DVBZ0=$E(DVBZ,1,23)_$E(DVBZ,24,CN-3)_$E(DVBZ,CN+9,999) Q
|
---|
32 | .I CN,TRY S DVBZ1=$E(DVBZ,1,23)_$E(DVBZ,CN-2,999) Q
|
---|
33 | .I 'CN S DVBZ0=DVBZ,TRY=0 Q
|
---|
34 | I $D(DVBMISS)&($D(DVBPRGM)) I (DVBPRGM["TM") K DVBMISS D:DVBTRY>3 RETRY^DVBHQD2 G:DVBNRT="N" LOAD^DVBHQD2 I DVBTRY<4&(DVBRTC<4) S DVBTRY=DVBTRY+1 U IO(0) W ?35,"Retrying Request." G MES
|
---|
35 | G KTO^DVBHQD2
|
---|
36 | ;
|
---|
37 | ;z1 is first x(),z9 is last x()
|
---|
38 | OK ;I 'DVBTSK DO
|
---|
39 | ;. U IO(0) W !!?3 S Z1=0 F S Z1=$O(X(Z1)) Q:'Z1 S LX=$G(LX)+$L(X(Z1)) W Z1," ",$L(X(Z1))," "
|
---|
40 | ;. W !?9,LX,! K LX H 3 U IO
|
---|
41 | S:$G(IO(0))="" IO(0)=$I S Z1=$O(X(0)) F Q:$E(X(Z1))'=$C(10) S X(Z1)=$E(X(Z1),2,999)
|
---|
42 | I $G(X(Z1))["HINQ" S X(Z1)="HINQ"_$P(X(Z1),"HINQ",2)
|
---|
43 | E K X(Z1) DO
|
---|
44 | . S Z1=$O(X(0)) I Z1="" S Z1=0,X(0)=""
|
---|
45 | . I $G(X(Z1))["HINQ" S X(Z1)="HINQ"_$P(X(Z1),"HINQ",2)
|
---|
46 | I $L(X(Z1))>25 S DVBLEN=+$E(X(Z1),22,25)
|
---|
47 | I $L(X(Z1))'>25 D
|
---|
48 | . I $D(X(Z1+1)) DO
|
---|
49 | . . S DVBLEN=+$E($E(X(Z1),1,99)_$E(X(Z1+1),1,30),22,25)
|
---|
50 | . I '$D(X(Z1+1)) D
|
---|
51 | . . S DVBLEN=$L(X(Z1)) ;DVB*4*49 - error response may be < 25 chars
|
---|
52 | I '$D(DVBLEN) S DVBABORT=DVBABORT+1 U IO(0) W:'DVBTSK !,"Missing string" U IO Q
|
---|
53 | ;
|
---|
54 | I $D(F3) S DVBLEN=DVBLEN-F3 K F3
|
---|
55 | I "456789ABCDUVWNMXYZ"'[$E(X(Z1),5) S DVBLEN=DVBLEN-2
|
---|
56 | ;
|
---|
57 | S (Z,Z9,F2)=0 F S Z=$O(X(Z)) Q:'Z S Z9=Z,F2=F2+$L(X(Z))
|
---|
58 | ;
|
---|
59 | I DVBLEN'=F2,X(Z9)[$C(10) S DVBABORT=DVBABORT+1 U IO(0) W:'DVBTSK !,"Missing character" S DVBMISS="" Q
|
---|
60 | I $E(X(Z1),5)'=2 S F2=F2+1
|
---|
61 | ;
|
---|
62 | I DVBLEN'=F2-1,X(Z9)'[$C(10),$S('$D(X(Z9-1)):1,1:$S(X(Z9-1)'[$C(10):1,1:0)) S DVBABORT=DVBABORT+1 U IO(0) W:'DVBTSK !,"Missing character" S DVBMISS="" Q
|
---|
63 | ;trim,e will pack back to x(1)
|
---|
64 | I Z9 S:$D(X) DVBSOX=X D TRIM,E^DVBHQAT S:$D(DVBSOX) X=DVBSOX K DVBSOX I $E(X(1),1,4)["HINQ","AXY69"'[$E($E(X(1),5)_1) D ALLM Q
|
---|
65 | ;
|
---|
66 | S DVBABORT=DVBABORT+1 Q:$E(X(1),1,4)'="HINQ"
|
---|
67 | I $E(X(1),5)="A" U IO(0) W:'DVBTSK !,"VBA File not Available" U IO H 2 D ALL QUIT
|
---|
68 | ;
|
---|
69 | I DVBTSK,"69XY"[$E($E(X(1),5)_1) S DVBBADP="" D ALL QUIT
|
---|
70 | I 'Z9 Q
|
---|
71 | ;
|
---|
72 | ALL I 'DVBXM,$D(DFN),+DFN K:C ^TMP("DVBHINQ",$J,DFN) S Z=0 F S Z=$O(X(Z)) Q:'Z S ^TMP("DVBHINQ",$J,DFN,Z)=X(Z)
|
---|
73 | E I DVBXM D K DVBTX Q
|
---|
74 | . N DVBQT
|
---|
75 | . D RS,A^DVBHIQR
|
---|
76 | . I $G(DFN)>1,('DVBTSK),($E(X(1),5)=2),('$D(DVBERCS)) D CHKID I DVBQT D Q
|
---|
77 | . . N DVBTMP1,DVBTMP2
|
---|
78 | . . S DVBTMP1=$G(DVBNOALR)
|
---|
79 | . . S DVBTMP2=$G(DVBJ2)
|
---|
80 | . . S DVBNOALR=";4///c;5////"_DUZ_";6///N",DVBJ2=1
|
---|
81 | . . D FILE^DVBHQUP
|
---|
82 | . . S DVBNOALR=DVBTMP1
|
---|
83 | . . S DVBJ2=DVBTMP2
|
---|
84 | . D RECMAL^DVBHQD2
|
---|
85 | . D IALERT^DVBHT2,EN^DVBHIQM H 1 D WRT
|
---|
86 | I DVBABORT=3!($D(DVBBADP)) S DFN=0
|
---|
87 | Q
|
---|
88 | ; do all if no error or retrying
|
---|
89 | ALLM I "BC"'[$E($E(X(1),5)_1) D ALL Q
|
---|
90 | I CN,'TRY S TRY=1 D:DVBXM DCN Q
|
---|
91 | I 'CN D ALL Q
|
---|
92 | S X(1)=X(1)_"[TRY]1" D ALL Q
|
---|
93 | ;
|
---|
94 | DCN S:$G(IO(0))="" IO(0)=$I U IO(0) W !,"..Name, SSN didn't work ....retrying using Claim Number",! U IO Q
|
---|
95 | ;
|
---|
96 | RS Q:'$D(DFN) Q:'DFN Q:'$D(^DVB(395.5,DFN,0)) S DVBDFN=DFN,DVBCS=0
|
---|
97 | F DVBSZ=0:0 S DVBSZ=$O(X(DVBSZ)) D SC^DVBHQST Q:'DVBSZ D ST^DVBHQDB
|
---|
98 | K DVBSZ,DVBDFN Q
|
---|
99 | ;
|
---|
100 | TRIM Q:F1=999
|
---|
101 | I '$D(F1) S F1=$F(X(Z9),DVBEND)
|
---|
102 | I $E(X(Z9),F1-F4)=$C(10) S F1=F1-1
|
---|
103 | S X(Z9)=$E(X(Z9),1,F1-F4)
|
---|
104 | K F1 Q
|
---|
105 | ;
|
---|
106 | WRT S:$G(IO(0))="" IO(0)=$I S DVBJIO=IO(0)
|
---|
107 | WRT1 S:$G(DVBJIO)="" DVBJIO=$I S:'$D(DVBIOSL) DVBIOSL=IOSL S:'$D(DVBIOST) DVBIOST=IOST S:'$D(DVBIOF) DVBIOF=IOF
|
---|
108 | S X="" U DVBJIO W !!! D CODE^DVBHQUS W !! S Y0=$Y F Z=0:0 S Z=$O(^TMP($J,Z)) Q:'Z I $D(^(Z,0)) W ^(0),! D:$Y-Y0>(DVBIOSL-4) SROLL^DVBHQD2 Q:X="^" D:$Y<Y0 ABS^DVBHQD2
|
---|
109 | Q:X="^" K DVBJIO D SROLL^DVBHQD2 Q
|
---|
110 | ;
|
---|
111 | CH S F1=0
|
---|
112 | I X(W)=$C(10)_"NNNN" K X(W) S F1=999 Q
|
---|
113 | I $L(X(W))>4!($L(X(W))<1) Q
|
---|
114 | F A=$L(X(W)):-1:1 Q:$E(X(W),A)'="N"
|
---|
115 | I A=1,$E(X(W),A)="N" S F1=$L(X(W-1))+1,F3=$L(X(W)),F4=5-$L(X(W)) K X(W)
|
---|
116 | Q
|
---|
117 | CHKID ;checks 4 critical identifier fields
|
---|
118 | ;fields are name, DOB, SSN and sex.
|
---|
119 | ;DVBQT 0 to continue, 1 to stop processing
|
---|
120 | N DA,DIC,DIQ,DIR,DR,X,Y
|
---|
121 | N DVBBIRTH,DVBCNT,DVBNAM,DVBNM,DVBSEX,DVBSOCL,DVBSSN
|
---|
122 | N DVBDIQ
|
---|
123 | S DVBCNT=0
|
---|
124 | S DVBQT=0
|
---|
125 | S DIC="^DPT(",DA=DFN,DIQ(0)="E",DIQ="DVBDIQ("
|
---|
126 | S DR=".01;.02;.03;.09"
|
---|
127 | D EN^DIQ1
|
---|
128 | S DVBNAM=$S($D(DVBADR(1)):DVBADR(1),$D(DVBNAME):$E(DVBNAME,1,30),1:"")
|
---|
129 | S DVBSEX=""
|
---|
130 | I $D(DVBVET),$P(DVBVET,U)="A" S DVBSEX=$S($P(DVBVET,U,3)="M":"MALE",$P(DVBVET,U,3)="F":"FEMALE",1:"")
|
---|
131 | I '$D(DVBVET),($D(DVBBIR)) S DVBSEX=$S($P(DVBBIR,U,25)="M":"MALE",$P(DVBBIR,U,25)="F":"FEMALE",1:"")
|
---|
132 | S DVBSOCL=""
|
---|
133 | I $D(DVBREF),($P(DVBREF,U)?9N) S DVBSOCL=$P(DVBREF,U)
|
---|
134 | I $P($G(DVBREF),U)'?9N I $D(DVBSSN),(DVBSSN?9N) S DVBSOCL=DVBSSN
|
---|
135 | S DVBBIRTH=""
|
---|
136 | ;change date of birth to match the Patient file ext value (DVBBIRTH)
|
---|
137 | I $D(DVBDOB),(DVBDOB?8N) S DVBBIRTH=$E(DVBDOB,1,2)_"/"_$E(DVBDOB,3,4)_"/"_$E(DVBDOB,5,8)
|
---|
138 | ;change ext Patient file value for name to HINQ name format
|
---|
139 | I '$$NAME(DVBDIQ(2,DFN,.01,"E")) S DVBCNT=DVBCNT+1
|
---|
140 | I $G(DVBSEX)'=$G(DVBDIQ(2,DFN,.02,"E")) S DVBCNT=DVBCNT+1
|
---|
141 | I $G(DVBBIRTH)'=$G(DVBDIQ(2,DFN,.03,"E")) S DVBCNT=DVBCNT+1
|
---|
142 | I $G(DVBSOCL)'=$G(DVBDIQ(2,DFN,.09,"E")) S DVBCNT=DVBCNT+1
|
---|
143 | I DVBCNT>0 D WARN
|
---|
144 | Q
|
---|
145 | WARN ;warns user if there are any discrepancies between HINQ and VistA for
|
---|
146 | ;4 critical identifier fields - name, DOB, SSN and sex.
|
---|
147 | N DIRUT,DUOUT
|
---|
148 | U IO(0)
|
---|
149 | H 1
|
---|
150 | D TEXT
|
---|
151 | D DISPL
|
---|
152 | S DVBQT=1
|
---|
153 | N DIR
|
---|
154 | S DIR(0)="N^1:3:0",DIR("A")="Do you want to process the HINQ on "_DVBDIQ(2,DFN,.01,"E")_"? ",DIR("B")="NO"
|
---|
155 | W !!
|
---|
156 | S DIR("A",1)="Check displayed data before proceeding."
|
---|
157 | S DIR("A",2)=""
|
---|
158 | S DIR("A",3)="Choose one of the following:"
|
---|
159 | S DIR("A",4)=" 1. Update this record."
|
---|
160 | S DIR("A",5)=" 2. Take no action at this time."
|
---|
161 | S DIR("A",6)=" 3. Delete this record from the SUSPENSE file."
|
---|
162 | S DIR("A",7)=""
|
---|
163 | S DIR("?")=" Select 1 - 3"
|
---|
164 | S DIR("?",1)=" If you want to continue processing this HINQ enter 1."
|
---|
165 | S DIR("?",3)=" If you cannot process this patient data at this time enter 2."
|
---|
166 | S DIR("?",2)=" If the HINQ data is for the wrong patient, enter 3."
|
---|
167 | S DIR("B")=2
|
---|
168 | D ^DIR
|
---|
169 | W !!
|
---|
170 | I Y=1 S DVBQT=0 Q ;update
|
---|
171 | I Y=2 Q ;ignore
|
---|
172 | I Y="^"!($G(DIRUT)=1)!($G(DUOUT)=1) S DVBOUT="^" Q ;"^" out of option
|
---|
173 | N DA,DIK ;delete
|
---|
174 | S DA=DFN
|
---|
175 | S DIK="^DVB(395.5,"
|
---|
176 | D ^DIK
|
---|
177 | Q
|
---|
178 | TEXT ;warning text
|
---|
179 | W @IOF
|
---|
180 | W !!!!
|
---|
181 | W ?2,"*********************************************************************"
|
---|
182 | W !?2,"* NOTE: IDENTIFYING DATA FROM HINQ AND VISTA DOES NOT MATCH *"
|
---|
183 | W !?2,"* PATIENT FROM HINQ RESPONSE MAY NOT BE THE PATIENT REQUESTED *"
|
---|
184 | W !?2,"*********************************************************************"
|
---|
185 | Q
|
---|
186 | DISPL ;display ID data
|
---|
187 | W !!?17,"Patient File data",?45,"HINQ Data"
|
---|
188 | W !?17,"-----------------",?45,"---------"
|
---|
189 | W !?11,"Name: "_$G(DVBDIQ(2,DFN,.01,"E")),?45,$G(DVBNAM)
|
---|
190 | W !?12,"Sex: "_$G(DVBDIQ(2,DFN,.02,"E")),?45,$G(DVBSEX)
|
---|
191 | W !?2,"Date of Birth: "_$G(DVBDIQ(2,DFN,.03,"E")),?45,$G(DVBBIRTH)
|
---|
192 | W !?12,"SSN: "_$G(DVBDIQ(2,DFN,.09,"E")),?45,$G(DVBSOCL)
|
---|
193 | Q
|
---|
194 | NAME(DVBNM) ;set local variables to hold the VistA and HINQ formats of the
|
---|
195 | ;patient name so they can be compared, DVB*4*56
|
---|
196 | ;first check for the HINQ name on the first address line
|
---|
197 | N DVBARR,DVBHFRST,DVBHLST,DVBHMID,DVBOK,DVBSTUB,DVBVFRST,DVBVLST,DVBVMID
|
---|
198 | S (DVBARR,DVBOK,DVBSTUB)=0
|
---|
199 | ;set variable with HINQ name parts
|
---|
200 | I $G(DVBADR(1))]"" D
|
---|
201 | . S DVBARR=1
|
---|
202 | . S DVBHFRST=$P(DVBADR(1)," ") ;first name
|
---|
203 | . S DVBHMID=$P(DVBADR(1)," ",2) ;middle name, if there is one
|
---|
204 | . S DVBHLST=$P(DVBADR(1)," ",3) ;last name, if there was a middle name
|
---|
205 | ;then check for the HINQ 7 character name stub
|
---|
206 | I DVBARR=0,($G(DVBNAME)]"") S DVBSTUB=1
|
---|
207 | ;get VistA name parts
|
---|
208 | N DVBREST
|
---|
209 | S DVBVLST=$P(DVBNM,",")
|
---|
210 | S DVBREST=$P(DVBNM,",",2,3)
|
---|
211 | S DVBVFRST=$P(DVBREST," ")
|
---|
212 | S DVBVMID=$P(DVBREST," ",2)
|
---|
213 | ;now compare
|
---|
214 | I DVBARR=1 D Q DVBOK
|
---|
215 | . N DVBOK1,DVBOK2,DVBOK3
|
---|
216 | . S (DVBOK1,DVBOK2,DVBOK3)=0
|
---|
217 | . ;if name is long, HINQ first name may have been truncated to 1 char
|
---|
218 | . I $L(DVBHFRST)=1 S DVBVFRST=$E(DVBVFRST)
|
---|
219 | . ;if last name is > 16 chars, it may be truncated
|
---|
220 | . I $L(DVBVLST)>16 S DVBVLST=$E(DVBVLST,1,$L(DVBHLST))
|
---|
221 | . ;if name is long, HINQ middle name may have been truncated to 1 char
|
---|
222 | . ;but, if there is no HINQ middle name, do not try to compare
|
---|
223 | . I $G(DVBHMID)']"" S DVBOK3=1
|
---|
224 | . I DVBOK3=0 D
|
---|
225 | . . I $L(DVBHMID)=1 S DVBVMID=$E(DVBVMID)
|
---|
226 | . . I DVBVMID=DVBHMID S DVBOK3=1
|
---|
227 | . I DVBVFRST=DVBHFRST S DVBOK1=1
|
---|
228 | . I DVBVLST=DVBHLST S DVBOK2=1
|
---|
229 | . I DVBOK1=1,(DVBOK2=1),(DVBOK3=1) S DVBOK=1 Q
|
---|
230 | ;if the first line of the address array is not populated, compare
|
---|
231 | ;DVBNAME which is a HINQ stub name to the equivalent patient file stub
|
---|
232 | I DVBARR=0,(DVBSTUB=1) D
|
---|
233 | . N DVBVSTUB
|
---|
234 | . I DVBVMID']"" S DVBVMID=" "
|
---|
235 | . S DVBVSTUB=$E(DVBVFRST)_$E(DVBVMID)_$E(DVBVLST,1,5)
|
---|
236 | . I DVBVSTUB=DVBNAME S DVBOK=1
|
---|
237 | Q DVBOK
|
---|