1 | IBCEP9 ;ALB/TMP - MASS UPDATE OF PROVIDER ID FROM FILE OR MANUAL ;08-NOV-00
|
---|
2 | ;;2.0;INTEGRATED BILLING;**137,200,320,348,349**;21-MAR-94;Build 46
|
---|
3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | EN ; Get parameters and mass input provider id by ins co
|
---|
6 | N A,DA,DIC,DIE,DIK,DIR,DR,POP,Q,Q0,X,Y,Y3,Z,Z0
|
---|
7 | N IBCND,IBCU,IBCT,IBDELIM,IBFILE,IBFILEN,IBFILEP,IBFORMAT
|
---|
8 | N IBFT,IBINFILE,IBINS,IBL,IBN,IBOK,IBOPEN,IBPOS,IBPT,IBQUIT
|
---|
9 | N IBQUIT1,IBQUOTES,IBRA,IBS,IBSA,IBSTART,IBSRC,IBVERIFY,IBVNAME
|
---|
10 | K ^TMP("IBPID_IN",$J),^TMP("IBPID-ERR",$J),^TMP("IBPID",$J)
|
---|
11 | S IBQUIT=0
|
---|
12 | 1 ; Select INSURANCE COMPANY NAME:
|
---|
13 | G:IBQUIT ENQ
|
---|
14 | S IBQUIT1=0
|
---|
15 | S DIC("S")="I $P($G(^DIC(36,+Y,3)),U,13)'=""C"""
|
---|
16 | S DIC(0)="AEMQ",DIC="^DIC(36," D ^DIC
|
---|
17 | I Y'>0 G ENQ
|
---|
18 | S IBINS=+Y
|
---|
19 | S IBQUIT=$$LOCK^IBCEP9B(IBINS)
|
---|
20 | I IBQUIT,$G(IBINS) D G 1
|
---|
21 | . D UNLOCK^IBCEP9B(IBINS)
|
---|
22 | . S IBINS="",IBQUIT=0
|
---|
23 | . W !!,"Unable to lock all associated insurance companies.",!,"Please try again later.",!!
|
---|
24 | ;
|
---|
25 | 2 ; get data source
|
---|
26 | S IBQUIT1=0
|
---|
27 | S DIR(0)="SA^M:Manual Entry;F:Entry from file"
|
---|
28 | S DIR("A")="PROVIDER ID DATA SOURCE: ",DIR("B")="Manual Entry"
|
---|
29 | S Y=$$DIR(.DIR,.IBQUIT,.IBQUIT1)
|
---|
30 | I Y=""!("FM"'[Y)!IBQUIT1 D UNLOCK^IBCEP9B(IBINS) G 1
|
---|
31 | S IBSRC=Y,IBVERIFY=0
|
---|
32 | S IBVERIFY=(Y="M")
|
---|
33 | I 'IBVERIFY D G:IBQUIT ENQ G:IBQUIT 2
|
---|
34 | . S DIR(0)="YA",DIR("A")="DO YOU WANT TO VIEW/VERIFY EACH ENTRY BEFORE IT GETS UPDATED?: "
|
---|
35 | . S Y=$$DIR(.DIR,.IBQUIT,.IBQUIT1)
|
---|
36 | . I Y=1 S IBVERIFY=1
|
---|
37 | ;
|
---|
38 | G:IBSRC="M" 4
|
---|
39 | 21 ; get parameters for file type
|
---|
40 | G:IBQUIT ENQ
|
---|
41 | S IBQUIT1=0
|
---|
42 | S DIR(0)="SA^D:DELIMITED;F:FIXED LENGTH",DIR("B")="D",DIR("A")="SELECT FILE FORMAT: "
|
---|
43 | S Y=$$DIR(.DIR,.IBQUIT,.IBQUIT1)
|
---|
44 | I IBQUIT1 G 2
|
---|
45 | S IBPOS=Y
|
---|
46 | I IBPOS="D" D G:IBQUIT1 21
|
---|
47 | . S DIR(0)="FA^1:1",DIR("B")=",",DIR("A")="DELIMITER CHARACTER: "
|
---|
48 | . S Y=$$DIR(.DIR,.IBQUIT,.IBQUIT1)
|
---|
49 | . Q:IBQUIT1
|
---|
50 | . S $P(IBPOS,U,2)=Y
|
---|
51 | . S DIR(0)="YA",DIR("B")="NO",DIR("A")="ARE QUOTES WITHIN A FIELD DOUBLE QUOTED?: "
|
---|
52 | . S Y=$$DIR(.DIR,.IBQUIT,.IBQUIT1,,,1)
|
---|
53 | . Q:IBQUIT1
|
---|
54 | . S $P(IBPOS,U,3)=Y
|
---|
55 | 3 ; select external file name
|
---|
56 | G:IBQUIT ENQ
|
---|
57 | S IBQUIT1=0
|
---|
58 | G:IBSRC="M" 2
|
---|
59 | S DIR(0)="FA^1:60"
|
---|
60 | S DIR("A")="FILE NAME PATH: ",DIR("B")=$$PWD^%ZISH
|
---|
61 | S Y=$$DIR(.DIR,.IBQUIT,.IBQUIT1)
|
---|
62 | G:IBQUIT1 2
|
---|
63 | S IBFILEP=$P(Y,U)
|
---|
64 | S DIR(0)="FA^1:60"
|
---|
65 | S DIR("A")="FILE NAME: "
|
---|
66 | S IBSA("*")=""
|
---|
67 | S DIR("?")="^S Y3=$$LIST^%ZISH(IBFILEP,""IBSA"",""IBRA"") I Y3=1 S Y3="""" F S Y3=$O(IBRA(Y3)) Q:Y3="""" W !,Y3"
|
---|
68 | S Y=$$DIR(.DIR,.IBQUIT,.IBQUIT1,,,1)
|
---|
69 | G:IBQUIT1 2
|
---|
70 | S IBFILEN=$P(Y,U)
|
---|
71 | K ^TMP($J),IBRA,Y3
|
---|
72 | N Y S Y=$$FTG^%ZISH(IBFILEP,IBFILEN,$NA(^TMP($J,1)),2)
|
---|
73 | I Y=0 W !,"FILE ",IBFILEP,IBFILEN," COULD NOT BE FOUND OR COULD NOT BE OPENED",! G 3
|
---|
74 | S IBFILE=IO
|
---|
75 | 4 ; select Provider ID Type
|
---|
76 | G:IBQUIT ENQ
|
---|
77 | S IBQUIT1=0
|
---|
78 | S DIR(0)="355.9,.06"
|
---|
79 | I IBSRC="M" S Z=$P($G(^IBE(355.97,+$$PPTYP^IBCEP0(IBINS),0)),U) S:Z'="" DIR("B")=Z
|
---|
80 | S Y=$$DIR(.DIR,.IBQUIT,.IBQUIT1)
|
---|
81 | G:Y=""!IBQUIT1 3
|
---|
82 | S IBPTYP=$P(Y,U)
|
---|
83 | 5 ; select Forms Type
|
---|
84 | G:IBQUIT ENQ
|
---|
85 | S IBQUIT1=0
|
---|
86 | S DIR(0)="355.9,.04r",DIR("B")="BOTH UB-04 AND CMS-1500 FORMS"
|
---|
87 | S Y=$$DIR(.DIR,.IBQUIT,.IBQUIT1)
|
---|
88 | G:IBQUIT1 4
|
---|
89 | I Y=""!("012"'[Y) G 5
|
---|
90 | S IBFT=$P(Y,U)
|
---|
91 | 6 ; select Bill Care Type
|
---|
92 | G:IBQUIT ENQ
|
---|
93 | S IBQUIT1=0
|
---|
94 | S DIR(0)="355.9,.05r",DIR("B")="BOTH INPATIENT AND OUTPATIENT"
|
---|
95 | S Y=$$DIR(.DIR,.IBQUIT,.IBQUIT1)
|
---|
96 | G:IBQUIT1 5
|
---|
97 | I Y=""!("0123"'[$P(Y,U)) G 6
|
---|
98 | S IBCT=$P(Y,U)
|
---|
99 | ;
|
---|
100 | S IBCND=$$CAREUN^IBCEP3(IBINS,IBPTYP,IBFT,IBCT,IBCT=3)
|
---|
101 | 7 ; get Care Unit
|
---|
102 | G:IBQUIT ENQ
|
---|
103 | S IBQUIT1=0
|
---|
104 | I IBCND D G:IBQUIT1 6
|
---|
105 | . S DIR(0)="355.9,.03O"
|
---|
106 | . S Y=$$DIR(.DIR,.IBQUIT,.IBQUIT1)
|
---|
107 | . Q:IBQUIT1
|
---|
108 | . S IBCU=$P(Y,U)
|
---|
109 | . I IBCU="" W !!,$J("",22),"***** WARNING *****",!," YOU WILL NEED TO MANUALLY ENTER THE CARE UNIT FOR EACH PROVIDER",!!
|
---|
110 | ;
|
---|
111 | ; Manual entry to get providers from VistA
|
---|
112 | I IBSRC="M" D MANUAL^IBCEP9B G:IBQUIT1 6
|
---|
113 | ; For 'OTHER' files ask position/length or delimiter/piece for data
|
---|
114 | I IBSRC="F" D I IBQUIT1 G:'IBCND 6 G 7
|
---|
115 | . F Z="PROV. SSN^SSN^15^1","PROV. NAME^NAM^30","PROV. 1500 ID^PROF_ID^15","PROV. UB-04 ID^INST_ID^15" D Q:IBQUIT1
|
---|
116 | .. I $P(IBPOS,U)'="D" D
|
---|
117 | ... N X
|
---|
118 | ... I IBFT=0!(IBFT=1) Q:Z["PROF_ID" I Z["INST_ID" S $P(Z,U)="PROV. ID"
|
---|
119 | ... I IBFT=2 Q:Z["INST_ID"
|
---|
120 | ... S DIR("A")="START POSITION OF "_$P(Z,U)_" FIELD: "
|
---|
121 | ... S DIR(0)="NA"_$S($P(Z,U,4)!($P(Z,U)["PROV. ID")!($P(Z,U)["_ID"):"",1:"O")_"^1:250"
|
---|
122 | ... W ! S X=$$DIR1^IBCEP9B(.DIR,Z,.IBQUIT,.IBQUIT1)
|
---|
123 | ... Q:IBQUIT1
|
---|
124 | ... I X>0 D
|
---|
125 | .... S IBPOS($P(Z,U,2))=X
|
---|
126 | .... S DIR("A")="LENGTH OF "_$P(Z,U)_" FIELD: "
|
---|
127 | .... S DIR(0)="NA"_$S($P(Z,U,3):"^1:"_$P(Z,U,3),1:"")
|
---|
128 | .... S X=$$DIR1^IBCEP9B(.DIR,Z,.IBQUIT,.IBQUIT1)
|
---|
129 | .... Q:IBQUIT1
|
---|
130 | .... S $P(IBPOS($P(Z,U,2)),U,2)=IBPOS($P(Z,U,2))+X-1
|
---|
131 | .. ;
|
---|
132 | .. I $P(IBPOS,U)="D" D
|
---|
133 | ... I IBFT=0!(IBFT=1) Q:Z["PROF_ID" I Z["INST_ID" S $P(Z,U)="PROV. ID"
|
---|
134 | ... I IBFT=2 Q:Z["INST_ID"
|
---|
135 | ... W ! S DIR("A")="STARTING '"_$P(IBPOS,U,2)_"' PIECE # OF "_$P(Z,U)_" FIELD: "
|
---|
136 | ... S DIR(0)="NA"_$S($P(Z,U,4)!($P(Z,U)["PROV. ID")!($P(Z,U)["_ID"):"",1:"O")
|
---|
137 | ... S X=$$DIR1^IBCEP9B(.DIR,Z,.IBQUIT,.IBQUIT1)
|
---|
138 | ... Q:IBQUIT1
|
---|
139 | ... I X>0 D
|
---|
140 | .... S (DIR("B"),IBPOS($P(Z,U,2)))=X
|
---|
141 | .... S DIR("A")="ENDING '"_$P(IBPOS,U,2)_"' PIECE # OF "_$P(Z,U)_" FIELD: "
|
---|
142 | .... S DIR(0)="NA"_$S($P(Z,U,4):"",1:"O")_U_(IBPOS($P(Z,U,2)))_":99"
|
---|
143 | .... S DIR("?")="JUST PRESS THE ENTER KEY IF THIS FIELD IS CONTAINED IN ONLY 1 PIECE"
|
---|
144 | .... S Y=$$DIR1^IBCEP9B(.DIR,Z,.IBQUIT,.IBQUIT1)
|
---|
145 | .... Q:IBQUIT1
|
---|
146 | .... W ! I Y>0,Y'=IBPOS($P(Z,U,2)) S $P(IBPOS($P(Z,U,2)),U,2)=Y
|
---|
147 | .. ;
|
---|
148 | . Q:IBQUIT1
|
---|
149 | . D READFILE^IBCEP9B
|
---|
150 | . ;
|
---|
151 | P1 ;
|
---|
152 | S Z="" F S Z=$O(^TMP("IBPID_IN",$J,Z)) Q:Z="" S Z0=0 F S Z0=$O(^TMP("IBPID_IN",$J,Z,Z0)) Q:'Z0 S Q=$G(^(Z0)) D G:IBQUIT ENQ
|
---|
153 | . ;
|
---|
154 | . I IBSRC="M" D Q
|
---|
155 | .. D DISP^IBCEP9B(Q,0,IBINS,IBPTYP,IBFT,IBCT,$G(IBCU),,IBSRC)
|
---|
156 | .. ; Manually add IDs
|
---|
157 | .. S IBN=$$DUP(+Z0_";VA(200,",IBINS,$S($G(IBCU)'="":IBCU,1:"*N/A*"),IBFT,IBCT,IBPTYP)
|
---|
158 | .. I 'IBN D Q:IBQUIT!(IBN'>0)
|
---|
159 | ... S IBN=$$ADDID^IBCEP9B(Z0,IBINS,$G(IBCU),IBFT,IBCT,IBPTYP,,.IBQUIT)
|
---|
160 | .. S DIE="^IBA(355.9,",DR=".07",DA=+IBN D ^DIE
|
---|
161 | .. I $D(Y)!($P($G(^IBA(355.9,+IBN,0)),U,7)="") D
|
---|
162 | ... I $P(IBN,U,3) S DA=+IBN,DIK="^IBA(355.9," D ^DIK
|
---|
163 | ... S DIR(0)="YA",DIR("B")="NO",DIR("A")="DO YOU WANT TO STOP ENTERING PROVIDER IDs?: "
|
---|
164 | ... S Y=$$DIR(.DIR,.IBQUIT,.IBQUIT1,,1,1)
|
---|
165 | ... I Y=1 S IBQUIT=1
|
---|
166 | .. S IBID=$P($G(^IBA(355.9,+IBN,0)),U,7)
|
---|
167 | .. S:$L(IBID) ^TMP("IBPID_IN",$J,U,Z0,"INST_ID")=IBID
|
---|
168 | .. I IBID="" K ^TMP("IBPID_IN",$J,U,Z0)
|
---|
169 | .. I IBQUIT=1 F S Z0=$O(^TMP("IBPID_IN",$J,U,Z0)) Q:Z0="" K ^TMP("IBPID_IN",$J,U,Z0) ; user wants to stop, remove all remaining names from list
|
---|
170 | . ;
|
---|
171 | . S IBOK=1
|
---|
172 | . N IBX,IBID
|
---|
173 | . M IBX=^TMP("IBPID_IN",$J,Z,Z0)
|
---|
174 | . I IBSRC="F" S IBID=$S(IBFT=0!(IBFT=1):$G(IBX("INST_ID")),1:$G(IBX("PROF_ID")))
|
---|
175 | . I $G(IBVERIFY) D ; Display record, ask OK to file id's
|
---|
176 | .. D DISP^IBCEP9B(Q,0,IBINS,IBPTYP,IBFT,IBCT,$G(IBCU),,IBSRC)
|
---|
177 | .. W !,"PROVIDER ID: ",IBID
|
---|
178 | .. S DIR("A")="OK TO FILE THIS ID FOR THIS PROVIDER?: ",DIR(0)="YA",DIR("B")="NO"
|
---|
179 | .. S Y=$$DIR(.DIR,,,,1,1)
|
---|
180 | .. I Y'=1 D Q ; Send to error array
|
---|
181 | ... S IBOK=0
|
---|
182 | ... S ^TMP("IBPID-ERR",$J,2,$P(IBX,U),$P(IBX,U,2)_" ","PROV ID")=IBID
|
---|
183 | ... S ^TMP("IBPID_IN",$J,U,Z0,0)="NO PRINT"
|
---|
184 | ... N Z1
|
---|
185 | ... S Z1="" F S Z1=$O(IBX(Z1)) Q:Z1="" I $G(IBX(Z1))'="",Z1'["_ID" S ^TMP("IBPID-ERR",$J,2,$P(IBX,U),$P(IBX,U,2)_" ",Z1)=IBX(Z1)
|
---|
186 | . I IBOK D ; Add/update the record
|
---|
187 | .. I IBSRC="F" D
|
---|
188 | ... I IBID'="" D
|
---|
189 | .... S IBN=$$ADDID^IBCEP9B(+Z0,IBINS,$G(IBCU),IBFT,IBCT,IBPTYP,,.IBQUIT)
|
---|
190 | .... I IBQUIT D:IBN>0 Q
|
---|
191 | ..... S DA=+IBN,DIK="^IBA(355.9," D ^DIK
|
---|
192 | .... I IBN>0 S DIE="^IBA(355.9,",DA=+IBN,DR=".07////"_IBID D ^DIE
|
---|
193 | .. ;
|
---|
194 | ;
|
---|
195 | ENQ ; Print report, exit
|
---|
196 | I $G(IBINS) D
|
---|
197 | . D COPY^IBCEPCID(IBINS)
|
---|
198 | . D UNLOCK^IBCEP9B(IBINS)
|
---|
199 | ;
|
---|
200 | I ($D(^TMP("IBPID-ERR",$J)))!($D(^TMP("IBPID_IN",$J))) D
|
---|
201 | . N %ZIS,ZTSAVE,ZTRTN,ZTDESC,IBDUZ
|
---|
202 | . S IBDUZ=$G(DUZ)
|
---|
203 | . S %ZIS="QM" D ^%ZIS Q:POP
|
---|
204 | . I $D(IO("Q")) K IO("Q") D D ^%ZTLOAD K ZTSK D HOME^%ZIS Q
|
---|
205 | .. S ZTRTN="PRTERR^IBCEP9B",ZTSAVE("^TMP(""IBPID-ERR"",$J,")=""
|
---|
206 | .. S ZTSAVE("^TMP(""IBPID_IN"",$J,")="",ZTSAVE("IB*")=""
|
---|
207 | .. S ZTDESC="IB - PROVIDER ID BATCH UPDATE ERROR LOG"
|
---|
208 | . U IO
|
---|
209 | . D PRTERR^IBCEP9B
|
---|
210 | K ^TMP("IBPID_IN",$J),^TMP("IBPID-ERR",$J),^TMP("IBPID",$J)
|
---|
211 | U IO(0)
|
---|
212 | Q
|
---|
213 | ;
|
---|
214 | DUP(IBPRV,IBINS,IBCU,IBFT,IBCT,IBPTYP) ; Check if provider id record already exists in file 355.9
|
---|
215 | Q +$O(^IBA(355.9,"AUNIQ",IBPRV,IBINS,IBCU,IBFT,IBCT,IBPTYP,0))
|
---|
216 | ;
|
---|
217 | ERREOF ; Traps EOF error on file read for non-DSM systems
|
---|
218 | N IBERROR S IBERROR=$$EC^%ZOSV
|
---|
219 | I IBERROR["ENDOFFILE" D CLOSE(.IBOPEN) G ENQ
|
---|
220 | D ^%ZTER
|
---|
221 | Q
|
---|
222 | ;
|
---|
223 | CLOSE(IBOPEN) ; Close file
|
---|
224 | D CLOSE^%ZISH("IBINFILE") S IBOPEN=0
|
---|
225 | Q
|
---|
226 | ;
|
---|
227 | DIR(DIR,IBQUIT,IBQUIT1,X,IBW1,IBW2) ; Standard call to ^DIR
|
---|
228 | ; Inputs DIR array
|
---|
229 | ; Returns IBQUIT,IBQUIT1,X if passed by reference
|
---|
230 | ; AND
|
---|
231 | ; FUNCTION returns the value of Y
|
---|
232 | ; IBW1 = 1 if initial write ! should be done
|
---|
233 | ; IBW2 = 1 if last write ! should be done
|
---|
234 | N DIROUT,DTOUT,DUOUT,DA
|
---|
235 | W:$G(IBW1) ! D ^DIR K DIR W:$G(IBW2) !
|
---|
236 | S (IBQUIT,IBQUIT1)=0
|
---|
237 | S DIR("?")="Enter '^' to back up one prompt or '^^' to exit the option"
|
---|
238 | I $D(DIROUT) S (IBQUIT,IBQUIT1)=1
|
---|
239 | I $D(DTOUT)!$D(DUOUT) S IBQUIT1=1
|
---|
240 | Q Y
|
---|
241 | ;
|
---|
242 | ERR ; Error list
|
---|
243 | ;; INVALID OR MISSING SSN - NO PROVIDER MATCH FOUND
|
---|
244 | ;; NO UPDATE PER USER REQUEST
|
---|
245 | ;;
|
---|