| [613] | 1 | IBCU1 ;ALB/MRL - BILLING UTILITY ROUTINE (CONTINUED) ;01 JUN 88 12:00 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**27,52,106,138,51,182,210,266,309,320,347**;21-MAR-94;Build 24 | 
|---|
|  | 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ;MAP TO DGCRU1 | 
|---|
|  | 6 | ; | 
|---|
|  | 7 | ;procedure doesn't appear to be used (6/4/93), if it is used, what for?? | 
|---|
|  | 8 | ;where would multiple provider numbers comde from?  ARH | 
|---|
|  | 9 | ;BCH    ;Blue Cross/Shield Help | 
|---|
|  | 10 | W ! S IB01=$P($G(^IBE(350.9,1,1)),"^",6) | 
|---|
|  | 11 | I IB01]"" W "CHOOSE FROM",!!?4,"1 - ",$P(IB01,"^",6) F IB00=2,3 I $P(IB01,"^",$S(IB00=2:14,1:15))]"" W !?4,IB00," - ",$P(IB01,"^",$S(IB00=2:14,1:15)) | 
|---|
|  | 12 | W:IB01']"" "NO BLUE CROSS/SHIELD PROVIDER NUMBERS IDENTIFIED TO SELECT FROM!" W ! W:IB01]"" !,"OR " W "ENTER BLUE CROSS/SHIELD PROVIDER # (BETWEEN 3-13 CHARACTERS)",! K IB00,IB01 Q | 
|---|
|  | 13 | ; | 
|---|
|  | 14 | RCD ;Revenue Code Display | 
|---|
|  | 15 | Q:'$D(^DGCR(399,IBIFN,"RC")) | 
|---|
|  | 16 | W @IOF,!,"Revenue Code Listing",?34,"Units",?45,"Charge" W:$$FT^IBCEF(IBIFN)=3 ?56,"Non-Cov" | 
|---|
|  | 17 | S DGIFN=0 F IBI=0:0 S DGIFN=$O(^DGCR(399,IBIFN,"RC",DGIFN)) Q:'DGIFN  I $D(^DGCR(399,IBIFN,"RC",DGIFN,0)) S Z=^(0) D DISRC | 
|---|
|  | 18 | W ! | 
|---|
|  | 19 | I $D(DIC(0)) S DIC(0)=DIC(0)_"N" | 
|---|
|  | 20 | Q | 
|---|
|  | 21 | DISRC N Z0 W !?1,DGIFN,?4,$P(^DGCR(399.2,+Z,0),"^"),"-",$E($P(^DGCR(399.2,+Z,0),"^",2),1,19) | 
|---|
|  | 22 | I +$P(Z,U,6) W ?28,$P($$CPT^ICPTCOD(+$P(Z,U,6)),U,2) | 
|---|
|  | 23 | W ?36,$P(Z,"^",3),?40 S X=$P(Z,"^",2),X2="2$" D COMMA^%DTC W X | 
|---|
|  | 24 | I $$FT^IBCEF(IBIFN)=3,$P(Z,U,9)'="" S X=$P(Z,U,9),X2="2$" D COMMA^%DTC W ?51,X | 
|---|
|  | 25 | I $D(^DGCR(399.1,+$P(Z,"^",5),0)) W ?64,$E($P(^(0),"^"),1,15) | 
|---|
|  | 26 | I $S($P(Z,U,15):1,1:$P(Z,U,10)=3) D | 
|---|
|  | 27 | . W !,?5,"(Rx: ",$S($P(Z,U,11):$P($G(^IBA(362.4,$P(Z,U,11),0)),U),1:"Link Missing"),"  Procedure "_$S($P(Z,U,15):"#"_$P(Z,U,15)_" "_$$CPTNM^IBCRBH1(IBIFN,4,$P(Z,U,15)),1:"Link Missing"),")" | 
|---|
|  | 28 | Q | 
|---|
|  | 29 | ; | 
|---|
|  | 30 | RVCPRC(IBIFN,IBD0) ; returns 1 if CHAMPVA rate type + 2 if CMS-1500, 0 otherwise | 
|---|
|  | 31 | ; IBD0 - zero node of bill if available, not required | 
|---|
|  | 32 | N X S X=0 | 
|---|
|  | 33 | I $G(IBD0)="" S IBD0=$G(^DGCR(399,+$G(IBIFN),0)) | 
|---|
|  | 34 | I $P($G(^DGCR(399.3,+$P(IBD0,U,7),0)),U,1)="CHAMPVA" S X=X+1 | 
|---|
|  | 35 | I $P(IBD0,U,19)=2 S X=X+2 | 
|---|
|  | 36 | Q X | 
|---|
|  | 37 | ; | 
|---|
|  | 38 | ORDNXT(IFN) ;CALLED BY TRIGGER ON (362.3,.02) THAT SETS DX PRINT ORDER (362.3,.03), | 
|---|
|  | 39 | ;returns the highest print order used on the bill plus 3, returns 3 if no existing print order | 
|---|
|  | 40 | ;used for the default print order so that dx's can be printed in order of entry without any input by the user, | 
|---|
|  | 41 | ;3 is added to allow spaces for additions, changes, moves | 
|---|
|  | 42 | N X,Y S X="" I $D(^DGCR(399,+$G(IFN),0)) S X=3,Y=0 F  S Y=$O(^IBA(362.3,"AO",+IFN,Y)) Q:'Y  S X=Y+3 | 
|---|
|  | 43 | Q X | 
|---|
|  | 44 | ; | 
|---|
|  | 45 | ORDDUP(ORD,DIFN) ;returns true if print order ORD is already defined for a bill (not same entry) | 
|---|
|  | 46 | N IBX,IBY S IBY=0 | 
|---|
|  | 47 | I +$G(ORD) S IBX=$G(^IBA(362.3,+$G(DIFN),0)) I +IBX,+$P(IBX,U,3)'=ORD,$D(^IBA(362.3,"AO",+$P(IBX,U,2),+ORD)) S IBY=1 | 
|---|
|  | 48 | Q IBY | 
|---|
|  | 49 | ; | 
|---|
|  | 50 | DXDUP(DX,DIFN,IFN) ;returns true if DX is already defined for a bill (not same entry) | 
|---|
|  | 51 | ;either DIFN or IFN can be passed, both are not needed, DIFN is needed during edit so can reenter the same dx | 
|---|
|  | 52 | N IBX,IBY S IBY=0 I +$G(DX),'$G(IFN) S IBX=$G(^IBA(362.3,+$G(DIFN),0)),IFN=+$P(IBX,U,2) | 
|---|
|  | 53 | I +$G(DX),$D(^IBA(362.3,"AIFN"_+IFN,+DX)),$O(^IBA(362.3,"AIFN"_+IFN,+DX,0))'=+$G(DIFN) S IBY=1 | 
|---|
|  | 54 | Q IBY | 
|---|
|  | 55 | ; | 
|---|
|  | 56 | DXBSTAT(DIFN,IFN) ;returns a diagnosis' bill status (either DIFN or IFN can be passed, both are not needed) | 
|---|
|  | 57 | N IBX,IBY I '$G(IFN) S IBX=$G(^IBA(362.3,+$G(DIFN),0)),IFN=+$P(IBX,U,2) | 
|---|
|  | 58 | S IBY=+$P($G(^DGCR(399,+IFN,0)),U,13) | 
|---|
|  | 59 | Q IBY | 
|---|
|  | 60 | ; | 
|---|
|  | 61 | RXSTAT(DRUG,PIFN,FILLDT) ; returns status/definition of rx | 
|---|
|  | 62 | ; returns: ORIGINAL ^ RELEASED/RETURNED TO STOCK ^ DRUG DEA | 
|---|
|  | 63 | N IBX,IBY,IBZ,IBLN,IBNUM S IBLN="",DRUG=+$G(DRUG),PIFN=+$G(PIFN),FILLDT=+$G(FILLDT) | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | S IBX=$$RXSEC^IBRXUTL($$FILE^IBRXUTL(PIFN,2),PIFN),IBZ="" I IBX'="",$P(IBX,U,2)=$G(FILLDT) D  I IBZ'="" S $P(IBLN,U,2)=IBZ | 
|---|
|  | 66 | . S IBLN="ORG" | 
|---|
|  | 67 | . ;I +$G(^PS(59.7,1,49.99))<6 Q | 
|---|
|  | 68 | . I '$P(IBX,U,13) S IBZ="NR" | 
|---|
|  | 69 | . I +$P(IBX,U,15) S:IBZ'="" IBZ=IBZ_"-" S IBZ=IBZ_"RTS" | 
|---|
|  | 70 | ; | 
|---|
|  | 71 | I IBLN="" S IBNUM=$$RFLNUM^IBRXUTL(PIFN,FILLDT,1),IBX=$$ZEROSUB^IBRXUTL($$FILE^IBRXUTL(PIFN,2),PIFN,IBNUM),IBZ="" I IBX'="" D  I IBZ'="" S $P(IBLN,U,2)=IBZ | 
|---|
|  | 72 | . ;I +$G(^PS(59.7,1,49.99))<6 Q | 
|---|
|  | 73 | . I '$P(IBX,U,18) S IBZ="NR" | 
|---|
|  | 74 | . I +$P(IBX,U,16) S:IBZ'="" IBZ=IBZ_"-" S IBZ=IBZ_"RTS" | 
|---|
|  | 75 | ; | 
|---|
|  | 76 | D ZERO^IBRXUTL(DRUG) | 
|---|
|  | 77 | S IBX=$G(^TMP($J,"IBDRUG",0)) I IBX'="" S IBY=$G(^TMP($J,"IBDRUG",DRUG,3)),IBZ="" D  I IBZ'="" S $P(IBLN,U,3)=IBZ | 
|---|
|  | 78 | . I IBY["9" S IBZ="OTC" | 
|---|
|  | 79 | . I IBY["I" S:IBZ'="" IBZ=IBZ_"-" S IBZ=IBZ_"INV" | 
|---|
|  | 80 | . I IBY["S" S:IBZ'="" IBZ=IBZ_"-" S IBZ=IBZ_"SUP" | 
|---|
|  | 81 | K ^TMP($J,"IBDRUG") | 
|---|
|  | 82 | Q IBLN | 
|---|
|  | 83 | ; | 
|---|
|  | 84 | PRVLIC(NPIFN,IBDT,ARR,STIFN) ; returns the Provider License data from the New Person file active on a date | 
|---|
|  | 85 | ; Input:   NPIFN = pointer to file 200,              IBDT = date to check (if none passed then all returned) | 
|---|
|  | 86 | ;          ARR = array pass by reference (optional), STIFN = state to return as value of function (optional) | 
|---|
|  | 87 | ; Output:  ARR(X) = license state (ifn) ^ license ^ expiration date (200,541) | 
|---|
|  | 88 | ;          return value = license data of state requested or if no state passed in then count found | 
|---|
|  | 89 | N IBX,IBY,IBLN,IBCNT S IBX=0,IBCNT=0 K ARR | 
|---|
|  | 90 | I +$G(NPIFN) S IBY=0 F  S IBY=$O(^VA(200,NPIFN,"PS1",IBY)) Q:'IBY  D | 
|---|
|  | 91 | . S IBLN=$G(^VA(200,NPIFN,"PS1",IBY,0)) | 
|---|
|  | 92 | . I +$G(IBDT),+$P(IBLN,U,3),$P(IBLN,U,3)<IBDT Q | 
|---|
|  | 93 | . I +$G(STIFN),+STIFN=+IBLN S IBX=IBLN | 
|---|
|  | 94 | . S IBCNT=IBCNT+1,ARR(IBCNT)=IBLN | 
|---|
|  | 95 | S ARR=IBCNT I '$G(STIFN) S IBX=IBCNT | 
|---|
|  | 96 | Q IBX | 
|---|
|  | 97 | ; | 
|---|
|  | 98 | DELPR(IB,IBX) ; Deletes the corresponding RX proc when the RX pointer is | 
|---|
|  | 99 | ; deleted | 
|---|
|  | 100 | ; IB = the ien of the bill in file 399 | 
|---|
|  | 101 | ; IBX = the ien of the entry in the procedure multiple to be deleted | 
|---|
|  | 102 | ; | 
|---|
|  | 103 | N DA,DIK,X,Y | 
|---|
|  | 104 | S DA(1)=IB,DA=IBX | 
|---|
|  | 105 | I $D(^DGCR(399,DA(1),"CP",DA,0)) S DIK="^DGCR(399,"_DA(1)_",""CP""," D ^DIK | 
|---|
|  | 106 | Q | 
|---|
|  | 107 | ; | 
|---|
|  | 108 | MODHLP(DA) ; Executable modifier help 399.042  .14 | 
|---|
|  | 109 | ; DA = iens of the current entry DA(1) = file 399 ien | 
|---|
|  | 110 | ;                                DA    = file 399.042 ien | 
|---|
|  | 111 | N Z,IBZ,DIC,IBDATE | 
|---|
|  | 112 | S IBDATE=$$BDATE^IBACSV(+$G(DA(1))) ; The date of service | 
|---|
|  | 113 | I $P($G(^DGCR(399,+$G(DA(1)),"RC",+$G(DA),0)),U,14)'="" S Z=$P(^(0),U,14) D | 
|---|
|  | 114 | . N Q | 
|---|
|  | 115 | . S Q=1 | 
|---|
|  | 116 | . S IBZ(1)="Current modifier"_$S($P(Z,";",2)'="":"s are:",1:"is:") | 
|---|
|  | 117 | . I $P(Z,";")'="" S Q=Q+1,IBZ(Q)="  "_$P(Z,";")_"  "_$P($$MOD^ICPTMOD($P(Z,";"),"E",IBDATE),U,3) | 
|---|
|  | 118 | . I $P(Z,";",2)'="" S Q=Q+1,IBZ(Q)="  "_$P(Z,";",2)_"  "_$P($$MOD^ICPTMOD($P(Z,";",2),"E",IBDATE),U,3) | 
|---|
|  | 119 | . S Q=Q+1,IBZ(Q)=" " | 
|---|
|  | 120 | . D EN^DDIOL(.IBZ) | 
|---|
|  | 121 | ; | 
|---|
|  | 122 | S DIC="^DIC(81.3,",DIC(0)="E" | 
|---|
|  | 123 | S DIC("S")="I $$MODP^ICPTMOD($P($G(^DGCR(399,DA(1),""RC"",DA,0)),U,6),Y,""I"",IBDATE)>0" | 
|---|
|  | 124 | S DIC("W")="W ?14,$P($$MOD^ICPTMOD(Y,""I"",IBDATE),U,3)" | 
|---|
|  | 125 | D ^DIC | 
|---|
|  | 126 | Q | 
|---|
|  | 127 | ; | 
|---|
|  | 128 | QMED(IBRTN,IBIFN) ; DSS QuadraMed Interface: DSS/QuadraMed Available | 
|---|
|  | 129 | ; return 1 if QuadraMed Interface is On and available for the type of bill | 
|---|
|  | 130 | ; - routine must exist on the system (interface is 'On') | 
|---|
|  | 131 | ; Input: IBRTN = tag^routine, if it exists then Interface is 'On' | 
|---|
|  | 132 | ;        IBIFN = Bill IFN, bill to check if appropriate for sending to QuadraMed | 
|---|
|  | 133 | ; | 
|---|
|  | 134 | N IBON S IBON=0 | 
|---|
|  | 135 | I +$G(IBIFN),$G(IBRTN)'="",$T(@IBRTN)'="" S IBON=1 | 
|---|
|  | 136 | Q IBON | 
|---|
|  | 137 | ; | 
|---|
|  | 138 | ATTREND(IBIFN,IBIFN1,FIELD) ; This function is called from Mumps Cross References in the claim file 399 and | 
|---|
|  | 139 | ; also the PROVIDER subfile 399.0222. | 
|---|
|  | 140 | ; | 
|---|
|  | 141 | ; IBIFN = IEN to claim file | 
|---|
|  | 142 | ; IBIFN1 = IEN to provider sub-file in claim file | 
|---|
|  | 143 | ; FIELD = Field in sub-file being modified (the triggering event).  If field has no value, all 6 fields are | 
|---|
|  | 144 | ; possibly updated | 
|---|
|  | 145 | ; | 
|---|
|  | 146 | ; The following fields are the "triggering" events | 
|---|
|  | 147 | ; File 399 | 
|---|
|  | 148 | ; #19 FORM TYPE - This triggers all 6 fields (122, 123, 124, 128, 129, 130). | 
|---|
|  | 149 | ; | 
|---|
|  | 150 | ; Sub-File 399.0222 | 
|---|
|  | 151 | ; #.05 PRIMARY INS CO ID NUMBER triggers 122 | 
|---|
|  | 152 | ; #.06 SECONDARY INS CO ID NUMBER triggers 123 | 
|---|
|  | 153 | ; #.07 TERTIARY INS CO ID NUMBER triggers 124 | 
|---|
|  | 154 | ; #.12 PRIM INS PROVIDER ID TYPE triggers 128 | 
|---|
|  | 155 | ; #.13 SEC INS PROVIDER ID TYPE triggers 129 | 
|---|
|  | 156 | ; #.14 TERT INS PROVIDER ID TYPE triggers 130 | 
|---|
|  | 157 | ; | 
|---|
|  | 158 | ; The following fields are the ones being "triggered" | 
|---|
|  | 159 | ; #122 PRIMARY PROVIDER # | 
|---|
|  | 160 | ; #123 SECONDARY PROVIDER # | 
|---|
|  | 161 | ; #124 TERTIARY PROVIDER # | 
|---|
|  | 162 | ; #128 PRIMARY ID QUALIFER | 
|---|
|  | 163 | ; #129 SECONDARY ID QUALIFIER | 
|---|
|  | 164 | ; #130 TERTIARY ID QUALIFIER | 
|---|
|  | 165 | ; | 
|---|
|  | 166 | Q:$G(IBPRCOB)  ; this is set when creating an MRA scondary claim.  Don't want to be changing the data on | 
|---|
|  | 167 | ; a secondary claim | 
|---|
|  | 168 | ; | 
|---|
|  | 169 | N FT,DATA,I,PC,INS,IFUNC,ATTRENDD,IBDR | 
|---|
|  | 170 | S FT=$$FT^IBCEF(IBIFN) | 
|---|
|  | 171 | Q:'FT | 
|---|
|  | 172 | ; | 
|---|
|  | 173 | S IFUNC=$O(^DGCR(399,IBIFN,"PRV","B",$S(FT=3:4,1:3),"")) | 
|---|
|  | 174 | I $G(IBIFN1),$G(IFUNC)'=IBIFN1 Q   ; if called from subfile, quits if att/rend provider was not the one being modified | 
|---|
|  | 175 | S ATTRENDD=$S('$G(IFUNC):"",1:$G(^DGCR(399,IBIFN,"PRV",IFUNC,0))) | 
|---|
|  | 176 | ; | 
|---|
|  | 177 | S PC=$S(FT=2:6,FT=3:8,1:"")  ; get the correct piece from the ins co dictionary | 
|---|
|  | 178 | Q:'+PC | 
|---|
|  | 179 | ; | 
|---|
|  | 180 | F I="I1","I2","I3" D | 
|---|
|  | 181 | . S INS=$P($G(^DGCR(399,IBIFN,I)),U) | 
|---|
|  | 182 | . Q:'+INS | 
|---|
|  | 183 | . Q:'$P($G(^DIC(36,INS,4)),U,PC) | 
|---|
|  | 184 | . D:I="I1" | 
|---|
|  | 185 | .. S:".05"[FIELD IBDR(399,IBIFN_",",122)=$S($P(ATTRENDD,U,5)]"":$P(ATTRENDD,U,5),1:"@") | 
|---|
|  | 186 | .. S:".12"[FIELD IBDR(399,IBIFN_",",128)=$S($P(ATTRENDD,U,12)]"":$P(ATTRENDD,U,12),1:"@") | 
|---|
|  | 187 | . D:I="I2" | 
|---|
|  | 188 | .. S:".06"[FIELD IBDR(399,IBIFN_",",123)=$S($P(ATTRENDD,U,6)]"":$P(ATTRENDD,U,6),1:"@") | 
|---|
|  | 189 | .. S:".13"[FIELD IBDR(399,IBIFN_",",129)=$S($P(ATTRENDD,U,13)]"":$P(ATTRENDD,U,13),1:"@") | 
|---|
|  | 190 | . D:I="I3" | 
|---|
|  | 191 | .. S:".07"[FIELD IBDR(399,IBIFN_",",124)=$S($P(ATTRENDD,U,7)]"":$P(ATTRENDD,U,7),1:"@") | 
|---|
|  | 192 | .. S:".14"[FIELD IBDR(399,IBIFN_",",130)=$S($P(ATTRENDD,U,14)]"":$P(ATTRENDD,U,14),1:"@") | 
|---|
|  | 193 | ; | 
|---|
|  | 194 | I $O(IBDR(0)) D FILE^DIE("","IBDR") | 
|---|
|  | 195 | Q | 
|---|