| [613] | 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 | ;; | 
|---|