| [613] | 1 | IBEFUNC ;ALB/RLW - EXTRINSIC FUNCTIONS ;12-JUN-92 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**55,91,106,139,51,153,232,155,249,327**;21-MAR-94 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | ETXT(X) ; -- output error text from 350.8 | 
|---|
|  | 5 | ; -- input error code | 
|---|
|  | 6 | N Y S Y=X | 
|---|
|  | 7 | I X="" G ETXTQ | 
|---|
|  | 8 | S Y=$P($G(^IBE(350.8,+$O(^IBE(350.8,"AC",X,0)),0)),U,2) | 
|---|
|  | 9 | ETXTQ Q Y | 
|---|
|  | 10 | ; | 
|---|
|  | 11 | IGN(X,Y) ; ignore means test? for appt type on dates | 
|---|
|  | 12 | ; -- input x = mas appt type | 
|---|
|  | 13 | ;          y = appt date | 
|---|
|  | 14 | ;    output  = true if this appt type should not be billed for | 
|---|
|  | 15 | ;              Means Test billing (352.1,.04) for given date | 
|---|
|  | 16 | ; | 
|---|
|  | 17 | I '$G(X)!('$G(Y)) Q 1 | 
|---|
|  | 18 | Q +$P($G(^IBE(352.1,+$O(^(+$O(^IBE(352.1,"AIVDT",+X,-(Y+.1))),0)),0)),U,4) | 
|---|
|  | 19 | ; | 
|---|
|  | 20 | DSP(X,Y) ; display on input screen? | 
|---|
|  | 21 | ; --    input X = mas appt type (P409.1) | 
|---|
|  | 22 | ;             Y = date | 
|---|
|  | 23 | ;       output  = true if appt type X (352.1,.02) should be displayed as | 
|---|
|  | 24 | ;          a potential billable visit (352.1,.06) on given date Y (352.1,.03) | 
|---|
|  | 25 | ; | 
|---|
|  | 26 | I '$G(X)!('$G(Y)) Q 0 | 
|---|
|  | 27 | Q +$P($G(^IBE(352.1,+$O(^(+$O(^IBE(352.1,"AIVDT",+X,-(Y+.1))),0)),0)),U,6) | 
|---|
|  | 28 | ; | 
|---|
|  | 29 | RPT(X,Y) ; print on report? | 
|---|
|  | 30 | ; -- input X = mas appt type (P409.1) | 
|---|
|  | 31 | ;          Y = date | 
|---|
|  | 32 | ;    output  = true if appt type X (352.1,.02) should be printed on 'Vets w/ Ins and Opt | 
|---|
|  | 33 | ;               Visits' report (352.1,.05) on given date Y (352.1,.06) | 
|---|
|  | 34 | ; | 
|---|
|  | 35 | I '$G(X)!('$G(Y)) Q 0 | 
|---|
|  | 36 | Q +$P($G(^IBE(352.1,+$O(^(+$O(^IBE(352.1,"AIVDT",+X,-(Y+.1))),0)),0)),U,5) | 
|---|
|  | 37 | ; | 
|---|
|  | 38 | NBDIS(X,Y) ; Is disposition non-billable? | 
|---|
|  | 39 | ; -- input X = disposition (P37) | 
|---|
|  | 40 | ;          Y = date of appt | 
|---|
|  | 41 | ;    output  = true (1) if disposition should be ignored for | 
|---|
|  | 42 | ;              Means test billing (352.2,.03) for given date | 
|---|
|  | 43 | ; | 
|---|
|  | 44 | I '$G(X)!('$G(Y)) Q 0 | 
|---|
|  | 45 | Q +$P($G(^IBE(352.2,+$O(^(+$O(^IBE(352.2,"AIVDT",+X,-(Y+.1))),0)),0)),U,3) | 
|---|
|  | 46 | ; | 
|---|
|  | 47 | NBCSC(X,Y) ; Is clinic stop code non-billable? | 
|---|
|  | 48 | ; -- input X = clinic stop code (P40.7) | 
|---|
|  | 49 | ;          Y = date of appt | 
|---|
|  | 50 | ;    output  = true (1) if clinic stop code should be ignored for | 
|---|
|  | 51 | ;              Means test billing (352.3,.03) for given date | 
|---|
|  | 52 | ; | 
|---|
|  | 53 | I '$G(X)!('$G(Y)) Q 0 | 
|---|
|  | 54 | Q +$P($G(^IBE(352.3,+$O(^(+$O(^IBE(352.3,"AIVDT",+X,-(Y+.1))),0)),0)),U,3) | 
|---|
|  | 55 | ; | 
|---|
|  | 56 | NBCL(X,Y) ; Is clinic non-billable? | 
|---|
|  | 57 | ; -- input X = clinic (P44) | 
|---|
|  | 58 | ;          Y = date of appt | 
|---|
|  | 59 | ;    output  = true (1) if clinic should be ignored for | 
|---|
|  | 60 | ;              Means test billing (352.4,.03) for given date | 
|---|
|  | 61 | ; | 
|---|
|  | 62 | I '$G(X)!('$G(Y)) Q 0 | 
|---|
|  | 63 | Q +$P($G(^IBE(352.4,+$O(^(+$O(^IBE(352.4,"AIVDT",+X,-(Y+.1))),0)),0)),U,3) | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | NBST(X,Y) ; Is clinic stop code non-billable for Third Party? | 
|---|
|  | 66 | ; -- input X = clinic stop code (P40.7), Y = appt date | 
|---|
|  | 67 | ;    output  = true (1) if stop non-billable for Third Party (352.3,.05) for given dt | 
|---|
|  | 68 | ; | 
|---|
|  | 69 | I '$G(X)!('$G(Y)) Q 0 | 
|---|
|  | 70 | Q +$P($G(^IBE(352.3,+$O(^(+$O(^IBE(352.3,"AIVDTT2",+X,-(Y+.1))),0)),0)),U,5) | 
|---|
|  | 71 | ; | 
|---|
|  | 72 | NBCT(X,Y) ; Is clinic non-billable for Third Party? | 
|---|
|  | 73 | ; -- input X = clinic (P44), Y = appt dt | 
|---|
|  | 74 | ;    output  = true (1) if clinic non-billable for Third Party (352.4,.05) for given date | 
|---|
|  | 75 | ; | 
|---|
|  | 76 | I '$G(X)!('$G(Y)) Q 0 | 
|---|
|  | 77 | Q +$P($G(^IBE(352.4,+$O(^(+$O(^IBE(352.4,"AIVDTT2",+X,-(Y+.1))),0)),0)),U,5) | 
|---|
|  | 78 | ; | 
|---|
|  | 79 | NABST(X,Y) ; Returns true (1) if stop code flagged to be ignored by Third Party auto biller (use DT) | 
|---|
|  | 80 | S:'$G(Y) Y=DT I '$G(X) Q 0 | 
|---|
|  | 81 | Q +$P($G(^IBE(352.3,+$O(^(+$O(^IBE(352.3,"AIVDTT2",+X,-(Y+.1))),0)),0)),U,6) | 
|---|
|  | 82 | ; | 
|---|
|  | 83 | NABCT(X,Y) ; Returns true (1) if clinic is flagged to be ignored by Third Party auto biller (use DT) | 
|---|
|  | 84 | S:'$G(Y) Y=DT I '$G(X) Q 0 | 
|---|
|  | 85 | Q +$P($G(^IBE(352.4,+$O(^(+$O(^IBE(352.4,"AIVDTT2",+X,-(Y+.1))),0)),0)),U,6) | 
|---|
|  | 86 | ; | 
|---|
|  | 87 | PT(DFN) ;returns (patient name^long pat id^short pat id) or null if not found | 
|---|
|  | 88 | N X,IBX S X="" I $D(DFN) S X=$G(^DPT(+DFN,0)) I X'="" S X=$P(X,U,1)_U_$P($G(^DPT(DFN,.36)),U,3,4) D | 
|---|
|  | 89 | . S IBX=$P(^DPT(+DFN,0),U,9) | 
|---|
|  | 90 | . I $P(X,U,2)="" S $P(X,U,2)=$E(IBX,1,3)_"-"_$E(IBX,4,5)_"-"_$E(IBX,6,10) | 
|---|
|  | 91 | . I $P(X,U,3)="" S $P(X,U,3)=$E(IBX,6,10) | 
|---|
|  | 92 | Q X | 
|---|
|  | 93 | ; | 
|---|
|  | 94 | EXSET(X,D0,D1) ;returns external value of a set in file D0, field D1 | 
|---|
|  | 95 | Q $$EXPAND^IBTRE($G(D0),$G(D1),$G(X)) | 
|---|
|  | 96 | ; | 
|---|
|  | 97 | BABCSC(DFN,IBDT) ; -- any billable Third Party visits in encounter file for patient | 
|---|
|  | 98 | ;  -- Input  dfn = patient,  ibdt = date | 
|---|
|  | 99 | ;     output     = 1 if any billable stop on date OR 0 if none | 
|---|
|  | 100 | ; | 
|---|
|  | 101 | N IBX,IBVAL,IBCBK,IBFILTER | 
|---|
|  | 102 | S IBX=0 | 
|---|
|  | 103 | I '$G(DFN)!('$G(IBDT)) G BABQ | 
|---|
|  | 104 | ; | 
|---|
|  | 105 | S IBVAL("DFN")=DFN,IBVAL("BDT")=IBDT\1,IBVAL("EDT")=IBDT\1+.24 | 
|---|
|  | 106 | ;Ignore if not chkd out, no stop, non-billable stop, non-billable clinic | 
|---|
|  | 107 | S IBFILTER="" | 
|---|
|  | 108 | S IBCBK="I $P(Y0,U,12)=2,$P(Y0,U,3),'$$NBST^IBEFUNC($P(Y0,U,3),+Y0),'$$NBCT^IBEFUNC(+$P(Y0,U,4),+Y0) S (IBX,SDSTOP)=1" | 
|---|
|  | 109 | D SCAN^IBSDU("PATIENT/DATE",.IBVAL,"",IBCBK,1) K ^TMP("DIERR",$J) | 
|---|
|  | 110 | ; | 
|---|
|  | 111 | BABQ Q IBX | 
|---|
|  | 112 | ; | 
|---|
|  | 113 | APPTCT(IBOE0) ; Determine if appt encounter/appt has valid status for billing | 
|---|
|  | 114 | ; Returns 1 if valid, 0 if not | 
|---|
|  | 115 | ; IBOE0 = the encounter's 0-node (input) | 
|---|
|  | 116 | N STAT | 
|---|
|  | 117 | S STAT=$P(IBOE0,U,12) ;Encounter stat | 
|---|
|  | 118 | I STAT=14 S STAT=2 | 
|---|
|  | 119 | ; Assume 1,2 (and 14 sometimes) are valid, 8 = INPATIENT | 
|---|
|  | 120 | Q STAT<3 | 
|---|
|  | 121 | ; | 
|---|
|  | 122 | NCTCL(IBOE0) ; Determine if a clinic for an outpt encounter is non-count | 
|---|
|  | 123 | ; IBOE0 = the 0-node of the encounter | 
|---|
|  | 124 | Q ($P($G(^SC(+$P(IBOE0,U,4),0)),U,17)="Y") | 
|---|
|  | 125 | ; | 
|---|
|  | 126 | DISCT(IBOE,IBOE0) ; Determine if disposition has valid status for billing | 
|---|
|  | 127 | ; Returns 1 if valid, 0 if not valid | 
|---|
|  | 128 | ; IBOE = encounter ien | 
|---|
|  | 129 | ; IBOE0 = 0-node of encounter (optional) | 
|---|
|  | 130 | N IBX | 
|---|
|  | 131 | S IBX=$$DISND^IBSDU(IBOE,$G(IBOE0),2) | 
|---|
|  | 132 | Q (IBX<2) | 
|---|
|  | 133 | ; | 
|---|
|  | 134 | NEEDMRA(IBIFN) ; Returns MRA NEEDED STATUS for bill | 
|---|
|  | 135 | Q $P($G(^DGCR(399,+IBIFN,"TX")),U,5) | 
|---|
|  | 136 | ; | 
|---|
|  | 137 | REQMRA(IBIFN) ; Determine from site parameter, ins assigned to bill and txmn | 
|---|
|  | 138 | ;   rules if request for MRA is needed (MCRWNR must be current ins co) | 
|---|
|  | 139 | ; "R" = not needed due to next carrier not requiring it (txmn rules), | 
|---|
|  | 140 | ; "R1" = not needed due to MRA turned off at site | 
|---|
|  | 141 | ;  0 = not needed,  1 = needed | 
|---|
|  | 142 | N IB0,COBINS,COBSEQ,IBOK,Z1,Z0,IBDA,IB00,IB0 | 
|---|
|  | 143 | ; | 
|---|
|  | 144 | I $$COB^IBCEF(IBIFN)="A" S IBOK=0 G REQMRAQ    ; payer sequence = patient not allowed for MRA | 
|---|
|  | 145 | S COBSEQ=$$COBN^IBCEF(IBIFN) | 
|---|
|  | 146 | S COBINS=$P($G(^DGCR(399,IBIFN,"M")),U,COBSEQ) | 
|---|
|  | 147 | ;Curr ins must = MEDICARE WNR | 
|---|
|  | 148 | S IBOK=+$$MCRWNR(COBINS) | 
|---|
|  | 149 | I 'IBOK G REQMRAQ | 
|---|
|  | 150 | ; | 
|---|
|  | 151 | I '$$EDIACTV^IBCEF4(2) S IBOK="R1" G REQMRAQ ; Site param=NO | 
|---|
|  | 152 | ; | 
|---|
|  | 153 | ; Check next ins for MRA needed | 
|---|
|  | 154 | I COBSEQ'<3 S IBOK=0 G REQMRAQ | 
|---|
|  | 155 | ; | 
|---|
|  | 156 | S IB0=$G(^DGCR(399,IBIFN,0)) | 
|---|
|  | 157 | S COBINS=+$P($G(^DGCR(399,IBIFN,"M")),U,COBSEQ+1) | 
|---|
|  | 158 | I 'COBINS S IBOK=0 G REQMRAQ ;No next ins | 
|---|
|  | 159 | I $$COB^IBCEF(IBIFN)="S" D  I IBOK="R2" G REQMRAQ | 
|---|
|  | 160 | . S COBINS=$P($G(^DGCR(399,IBIFN,"M")),U,COBSEQ) | 
|---|
|  | 161 | . I +$$MCRWNR(COBINS)=1 S IBOK="R2" | 
|---|
|  | 162 | ; | 
|---|
|  | 163 | ; Check only rules with rule type = 2 (MRA REQUEST RESTRICTIONS) | 
|---|
|  | 164 | S IBDA=0 F  S IBDA=$O(^IBE(364.4,"AC",2,IBDA)) Q:'IBDA  S IB00=$G(^IBE(364.4,IBDA,0)) D  Q:'IBOK | 
|---|
|  | 165 | . I $P(IB00,U,2)>DT Q  ; Inactive | 
|---|
|  | 166 | . I $P(IB00,U,6),$P(IB00,U,6)'>DT Q  ; Expired | 
|---|
|  | 167 | . S Z0=$$INPAT^IBCEF(IBIFN,1),Z0=$S(Z0=1:2,1:1) | 
|---|
|  | 168 | . S Z1=$$FT^IBCEF(IBIFN),Z1=$S(Z1=3:1,1:2) | 
|---|
|  | 169 | . I $S($P(IB00,U,4)=3:1,1:$P(IB00,U,4)=Z0),$S($P(IB00,U,5)=3:1,1:$P(IB00,U,5)=Z1) S Z0=$D(^IBE(364.4,IBDA,3,"B",COBINS)) I Z0>0 S IBOK="R" | 
|---|
|  | 170 | ; | 
|---|
|  | 171 | REQMRAQ Q IBOK | 
|---|
|  | 172 | ; | 
|---|
|  | 173 | MCRWNR(IBINS) ;Returns whether the ins co IBINS is MEDICARE WNR (Will | 
|---|
|  | 174 | ;           NOT Reimburse) 0=NO, 1=YES | 
|---|
|  | 175 | N Z,Z0 | 
|---|
|  | 176 | S Z=0,Z0=$G(^DIC(36,+IBINS,0)) | 
|---|
|  | 177 | I $P(Z0,U,2)="N",$P($G(^IBE(355.2,+$P(Z0,U,13),0)),U)="MEDICARE" S Z=1 | 
|---|
|  | 178 | Q Z | 
|---|
|  | 179 | ; | 
|---|
|  | 180 | WNRBILL(IBIFN,IBCOB) ; Returns whether the ins for COB seq IBCOB | 
|---|
|  | 181 | ;  is MEDICARE will not reimburse | 
|---|
|  | 182 | ; | 
|---|
|  | 183 | I $G(IBCOB)="" S IBCOB=$$COBN^IBCEF(IBIFN) | 
|---|
|  | 184 | S IBCOB=$TR(IBCOB,"PST","123") | 
|---|
|  | 185 | Q $$MCRWNR(+$G(^DGCR(399,IBIFN,"I"_IBCOB))) | 
|---|
|  | 186 | ; | 
|---|
|  | 187 | MCR(IBINS) ;Returns whether the ins co IBINS is MCR Will Reimburse | 
|---|
|  | 188 | ;          0=NO , 1=YES | 
|---|
|  | 189 | N Z,Z0 | 
|---|
|  | 190 | S Z=0,Z0=$G(^DIC(36,+IBINS,0)) | 
|---|
|  | 191 | I $P(Z0,U,2)'="N",$P($G(^IBE(355.2,+$P(Z0,U,13),0)),U)="MEDICARE" S Z=1 | 
|---|
|  | 192 | Q Z | 
|---|
|  | 193 | ; | 
|---|
|  | 194 | MRATYPE(IBIEN,IBVAR) ; Returns: A = MEDICARE A   B = MEDICARE B | 
|---|
|  | 195 | ;  C = MEDICARE OTHER    null = NOT MEDICARE | 
|---|
|  | 196 | ; for the plan associated with bill ien IBIEN OR grp plan IBIEN | 
|---|
|  | 197 | ; If IBVAR = "" or 'C', the data is from bill ien in IBIEN | 
|---|
|  | 198 | ;          = 'P', the data is from grp policy ien in IBIEN | 
|---|
|  | 199 | ; | 
|---|
|  | 200 | N IBPLAN | 
|---|
|  | 201 | S IBPLAN=$S($G(IBVAR)'="P":+$$POLICY^IBCEF(IBIEN,18),1:IBIEN) | 
|---|
|  | 202 | Q $P($G(^IBA(355.3,+IBPLAN,0)),U,14) | 
|---|
|  | 203 | ; | 
|---|
|  | 204 | MCRONBIL(IBIFN,IBFLG) ; Returns 0 if MCR WNR not on bill IBIFN | 
|---|
|  | 205 | ;  1 if on bill, is on or before current ins | 
|---|
|  | 206 | ;  2 if on bill, but after current ins | 
|---|
|  | 207 | ; IBFLG = a COB number if second "^" piece of return data should be | 
|---|
|  | 208 | ;         1 if MCRWNR is the insurance at that COB sequence (optional) | 
|---|
|  | 209 | N Z,IBON,Q | 
|---|
|  | 210 | S IBON=0,Q=$$COBN^IBCEF(IBIFN) | 
|---|
|  | 211 | F Z=1:1:3 I $$WNRBILL(IBIFN,Z) S IBON=$S(Q'<Z:1,1:2)_$S('$G(IBFLG):"",Z'=IBFLG:"",1:"^1") Q | 
|---|
|  | 212 | Q IBON | 
|---|
|  | 213 | ; | 
|---|
|  | 214 | PROFEE(IBIFN) ; Returns whether any rev codes for prof fees | 
|---|
|  | 215 | ;  included on bill IBIFN  0 = not included,  1 = included, | 
|---|
|  | 216 | ;  2 = both inst and prof are included | 
|---|
|  | 217 | ; | 
|---|
|  | 218 | N IBPRO,Z | 
|---|
|  | 219 | S IBPRO=0,Z=$O(^DGCR(399,IBIFN,"RC","B",959)) ; Rev cds 960-989 are prof | 
|---|
|  | 220 | I Z,Z<990 D | 
|---|
|  | 221 | . S IBPRO=1 | 
|---|
|  | 222 | . S Z=$O(^DGCR(399,IBIFN,"RC","B",0)) | 
|---|
|  | 223 | . I $S(Z:Z<960,1:0)!($O(^DGCR(399,IBIFN,"RC","B",1000),-1)'<990) S IBPRO=2 | 
|---|
|  | 224 | Q IBPRO | 
|---|
|  | 225 | ; | 
|---|
|  | 226 | GETMOD(IBIFN,IBCPT,EXT) ; Returns 'list' of modifiers for file 399 | 
|---|
|  | 227 | ;   procedure for bill IBIFN and proc ien IBCPT | 
|---|
|  | 228 | ;   in modifier seq order, separated by ',' | 
|---|
|  | 229 | ;  If EXT = 1, return the actual modifier, not the ptr | 
|---|
|  | 230 | N IBMOD,IBZ,IBZ0,IB0,Z | 
|---|
|  | 231 | S IBZ=0,IBMOD="" | 
|---|
|  | 232 | F  S IBZ=$O(^DGCR(399,IBIFN,"CP",IBCPT,"MOD","B",IBZ)) Q:'IBZ  S IBZ0=0 F  S IBZ0=$O(^DGCR(399,IBIFN,"CP",IBCPT,"MOD","B",IBZ,IBZ0)) Q:'IBZ0  I $D(^DGCR(399,IBIFN,"CP",IBCPT,"MOD",IBZ0,0)) S IB0=$G(^(0)) D | 
|---|
|  | 233 | . I '$G(EXT) S Z=$P(IB0,U,2) | 
|---|
|  | 234 | . I $G(EXT) S Z=$$MOD^ICPTMOD($P(IB0,U,2),"I"),Z=$S($P(Z,U)=-1:"",1:$P(Z,U,2)) | 
|---|
|  | 235 | . Q:Z="" | 
|---|
|  | 236 | . S IBMOD=IBMOD_$S(IBMOD="":"",1:",")_Z | 
|---|
|  | 237 | Q IBMOD | 
|---|
|  | 238 | ; | 
|---|
|  | 239 | MODLST(MODS,DESC,IBMOD) ; Returns string of actual mods | 
|---|
|  | 240 | ; MOVED | 
|---|
|  | 241 | Q $$MODLST^IBEFUNC2(MODS,$G(DESC),.IBMOD) | 
|---|
|  | 242 | ; | 
|---|
|  | 243 | GETSPEC(FILE,FIELD) ; Get fld specifier for FIELD # in FILE | 
|---|
|  | 244 | ; Use to set DIC("P") for FILE^DICN | 
|---|
|  | 245 | N IBZ | 
|---|
|  | 246 | D FIELD^DID(FILE,FIELD,"","SPECIFIER","IBZ") | 
|---|
|  | 247 | Q $G(IBZ("SPECIFIER")) | 
|---|
|  | 248 | ; | 
|---|