| 1 | IBCEF4 ;ALB/TMP - MRA/EDI ACTIVATED UTILITIES ;06-FEB-96 | 
|---|
| 2 | ;;2.0;INTEGRATED BILLING;**51,137,232,155,296,327,349**;21-MAR-94;Build 46 | 
|---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | EDIACTV(IBEDIMRA) ; Returns 0 if EDI or MRA is not active, | 
|---|
| 6 | ; otherwise, returns 1 | 
|---|
| 7 | ; IBEDIMRA : 1= checking if EDI is active, 2= checking if MRA is active | 
|---|
| 8 | N IBEDI | 
|---|
| 9 | S IBEDI=$P($G(^IBE(350.9,1,8)),U,10) | 
|---|
| 10 | Q $S('IBEDI:0,IBEDI=3:1,1:IBEDI=IBEDIMRA) | 
|---|
| 11 | ; | 
|---|
| 12 | RATEOK(IBIFN) ; Returns 1 if rate type of bill IBIFN is transmittable | 
|---|
| 13 | Q +$P($G(^DGCR(399.3,+$P($G(^DGCR(399,IBIFN,0)),U,7),0)),U,10) | 
|---|
| 14 | ; | 
|---|
| 15 | INSOK(INS) ; Determine EDI activation status of insurance co | 
|---|
| 16 | Q +$G(^DIC(36,INS,3))  ;1 = TEST, 2 = LIVE, 0 = NOT ACTIVE FOR EDI | 
|---|
| 17 | ; | 
|---|
| 18 | BSTATX(IBIFN) ; Returns internal value of bill's latest transmission status | 
|---|
| 19 | N IBDA | 
|---|
| 20 | Q $P($G(^IBA(364,+$$LAST364(IBIFN),0)),U,3) | 
|---|
| 21 | ; | 
|---|
| 22 | LAST364(IBIFN) ; Determine ien of latest transmit bill record for a bill | 
|---|
| 23 | Q +$O(^IBA(364,"ABDT",IBIFN,+$O(^IBA(364,"ABDT",IBIFN,""),-1),""),-1) | 
|---|
| 24 | ; | 
|---|
| 25 | TXMT(IBIFN,IBWHY,IBNEW) ; Determine if bill # IBIFN is 'transmittable' | 
|---|
| 26 | ; IBNEW = flag is 1 if new entry - don't check for entry in file 364 | 
|---|
| 27 | ; Function returns: | 
|---|
| 28 | ;        0 if not transmittable | 
|---|
| 29 | ;        if transmittable, the entire node 3 of the insurance company | 
|---|
| 30 | ;  and, if passed by reference IBWHY = reason not transmittable | 
|---|
| 31 | ;                    1 if local print | 
|---|
| 32 | ;                    2 if EDI/MRA not active | 
|---|
| 33 | ;                    3 if rate type not transmittable | 
|---|
| 34 | ;                    4 if no transmit for insurance co | 
|---|
| 35 | ;                    5 if failed txmn rules | 
|---|
| 36 | ;                      and IBWHY(0) = ien of rule failed | 
|---|
| 37 | ;                    6 if Rx with missing/invalid NDC format | 
|---|
| 38 | ; | 
|---|
| 39 | N IB,IB0,IBOK,IBCOB,IBMCR,X1 | 
|---|
| 40 | S IBOK=1,IB=IBIFN,IBWHY="" | 
|---|
| 41 | ; | 
|---|
| 42 | S IBCOB=$$COBN^IBCEF(IB),IB(.07)=+$G(^DGCR(399,IB,"I"_IBCOB)) | 
|---|
| 43 | S IBMCR=$$MCRWNR^IBEFUNC(IB(.07)) | 
|---|
| 44 | ; Does bill have force local print flag set? | 
|---|
| 45 | I 'IBMCR D  G:IBWHY TXMTQ  ; MCR WNR not curr ins | 
|---|
| 46 | . I $S($$MRASEC(IBIFN):$P($G(^DGCR(399,IBIFN,"TX")),U,9)=1,1:$P($G(^DGCR(399,IBIFN,"TX")),U,8)=1) S IBOK=0,IBWHY=1 | 
|---|
| 47 | I '$G(IBNEW),'$O(^IBA(364,"B",IBIFN,0)),$P($G(^DGCR(399,IBIFN,0)),U,13)>2,'$$RETN^PRCAFN(IBIFN) S IBOK=0 G TXMTQ ; Not recognized as transmittable when it was authorized | 
|---|
| 48 | I $O(^IBA(364,"B",IBIFN,0)),$$INSOK(IB(.07)),$$BSTATX(IBIFN)'="X" G TXMTQ ;Already determined to be transmittable - entry exists for bill in transmit bill file | 
|---|
| 49 | S IB(.03)=$S('IBMCR:1,1:2) ; EDI(1) or MRA(2) | 
|---|
| 50 | S IB(.04)=$S('$$INPAT^IBCEF(IB,1):1,1:2) ;Outpt(1) or Inpt(2) | 
|---|
| 51 | S IB(.05)=$S($$FT^IBCEF(IB)=3:1,1:2) ;Inst(1) or Prof(2) | 
|---|
| 52 | ; Execute unmodifiable, general edits | 
|---|
| 53 | S X1=$$EDIACTV(IB(.03)) | 
|---|
| 54 | I 'X1 S IBWHY=2 | 
|---|
| 55 | I 'IBWHY S X1=$$RATEOK(IBIFN) S:'X1 IBWHY=3 | 
|---|
| 56 | I 'IBWHY S X1=$$INSOK(+IB(.07)) S:'X1 IBWHY=4 | 
|---|
| 57 | I 'IBWHY,$$ISRX^IBCEF1(IBIFN) D  ;S:'X1 IBWHY=6 | 
|---|
| 58 | . ; Check for Rxs and NDC # format valid (5-4-2) | 
|---|
| 59 | . ;IF THIS IS A UB FORM DO NOT SEND ELECTRONIC | 
|---|
| 60 | . I $$FT^IBCEF(IBIFN)=3 S IBWHY=1 | 
|---|
| 61 | . ; | 
|---|
| 62 | . Q  ;;CHECK REMOVAL SO NON NDC FORMAT NUMBERS WILL GO | 
|---|
| 63 | . N Z,Z0,Z00 | 
|---|
| 64 | . S Z="" F  S Z=$O(^IBA(362.4,"AIFN"_IBIFN,Z)) Q:Z=""!'X1  D  Q:'X1 | 
|---|
| 65 | .. S Z0=0 F  S Z0=$O(^IBA(362.4,"AIFN"_IBIFN,Z,Z0)) Q:'Z0  D  Q:'X1 | 
|---|
| 66 | ... S Z00=$G(^IBA(362.4,Z0,0)) | 
|---|
| 67 | ... Q:$S($P(Z00,U,8)="":1,1:$L($P(Z00,U,8))=11) | 
|---|
| 68 | ... I $P(Z00,U,9)'=4 S X1=0 | 
|---|
| 69 | ; Only continue if general edits are passed | 
|---|
| 70 | I $$COB^IBCEF(IB)="S" D | 
|---|
| 71 | . S COBINS=$P($G(^DGCR(399,IB,"M")),U,IBCOB+1) | 
|---|
| 72 | . I 'COBINS Q | 
|---|
| 73 | . I IBMCR S IBWHY=1,$P(^DGCR(399,IBIFN,"TX"),U,8)=1 | 
|---|
| 74 | I IBWHY S IBOK=0 G TXMTQ | 
|---|
| 75 | S IBOK=$$EDIT(IBIFN,.IB,.IBWHY) | 
|---|
| 76 | G:'IBOK TXMTQ | 
|---|
| 77 | ; | 
|---|
| 78 | TXMTQ ; | 
|---|
| 79 | I IBOK S IBOK=$G(^DIC(36,+IB(.07),3)) | 
|---|
| 80 | Q IBOK | 
|---|
| 81 | ; | 
|---|
| 82 | MRASEC(IBIFN) ; Returns 1 if current bill is secondary to MCR WNR | 
|---|
| 83 | N IBSEQ,IB,Z | 
|---|
| 84 | S IB=0 | 
|---|
| 85 | ; Chk if MCR WNR is prev insurer with MRA on file | 
|---|
| 86 | S IBSEQ=$$COBN^IBCEF(IBIFN)-1 | 
|---|
| 87 | S Z=$$MCRONBIL^IBEFUNC(IBIFN,IBSEQ) I +Z=1,$P(Z,U,2)=1,$$CHK^IBCEMU1(IBIFN) S IB=1 | 
|---|
| 88 | Q IB | 
|---|
| 89 | ; | 
|---|
| 90 | EDIT(IBIFN,IB,IBWHY) ; Find, execute edits applying to bill to see if transmittable | 
|---|
| 91 | ; IBIFN = ien of bill in file 399 | 
|---|
| 92 | ; IB = array containing necessary data for xref search from bill | 
|---|
| 93 | ;      subscripted by field # in file 364.4 | 
|---|
| 94 | ; | 
|---|
| 95 | ;  Matrix entries: | 
|---|
| 96 | ;    IB(.03): 1=EDI specific, 2=MRA specific | 
|---|
| 97 | ;    IB(.04): 1=Outpatient or 2=inpatient only (currently defaults to 3) | 
|---|
| 98 | ;    IB(.05): 1=Only institutional or 2=only professional | 
|---|
| 99 | ;          X: Anything valid | 
|---|
| 100 | ; | 
|---|
| 101 | ;                 MRA-EDI    IN-OUT     INST-PROF | 
|---|
| 102 | ;  Level          -------    ------     --------- | 
|---|
| 103 | ;    1               X          X           X | 
|---|
| 104 | ;    2               X          X        IB(.05) | 
|---|
| 105 | ;    3               X       IB(.04)        X | 
|---|
| 106 | ;    4               X       IB(.04)     IB(.05) | 
|---|
| 107 | ;    5            IB(.03)       X           X | 
|---|
| 108 | ;    6            IB(.03)       X        IB(.05) | 
|---|
| 109 | ;    7            IB(.03)    IB(.04)        X | 
|---|
| 110 | ;    8            IB(.03)    IB(.04)     IB(.05) | 
|---|
| 111 | ; | 
|---|
| 112 | N IB0,IB1,IB2,IB3,IB4,IBDA,IBFT,IBPASS,IBSEQ,IBT,IBNOCK | 
|---|
| 113 | I '$G(IB(.03)) S IBPASS=0 G EDITQ | 
|---|
| 114 | S IBFT=$$FT^IBCEF(IBIFN) | 
|---|
| 115 | ; | 
|---|
| 116 | S IBPASS=1 | 
|---|
| 117 | F IBSEQ=1:1:8 D  Q:'IBPASS  ; Loop thru levels in matrix | 
|---|
| 118 | . F IB1=1:1:3 Q:'IBPASS  F IB2=1:1:3 Q:'IBPASS  F IB3=1:1:3 Q:'IBPASS  D | 
|---|
| 119 | .. S IB4=0 F  S IB4=$O(^IBE(364.4,"AD",IB1,IB2,IB3,IB4)) Q:'IB4  I $O(^(IB4,0)) D  Q:'IBPASS | 
|---|
| 120 | ... S IBDA=0 | 
|---|
| 121 | ... F   S IBDA=$O(^IBE(364.4,"AD",IB1,IB2,IB3,IB4,IBDA)) Q:'IBDA  S IB0=$G(^IBE(364.4,IBDA,0)) I IB0'="",'$D(IBNOCK(IBDA)) D  Q:'IBPASS | 
|---|
| 122 | .... I $P(IB0,U,2)>DT S IBNOCK(IBDA)="" Q  ; Not activated yet | 
|---|
| 123 | .... I $P(IB0,U,6),$P(IB0,U,6)'>DT  S IBNOCK(IBDA)="" Q  ; Inactive | 
|---|
| 124 | .... I $P(IB0,U,11),IB3'=3,$S(IBFT=3:IB3'=1,IBFT=2:IB3'=2,1:0) S IBNOCK(IBDA)="" Q  ; Form type not included - not used for form type rule (0) | 
|---|
| 125 | .... I IB4=1,'$D(^IBE(364.4,IBDA,3,"B",+IB(.07))) S IBNOCK(IBDA)="" Q  ; Ins not included for rule | 
|---|
| 126 | .... I IB4=2,$D(^IBE(364.4,IBDA,2,"B",+IB(.07))) S IBNOCK(IBDA)="" Q  ; Ins is excluded from rule | 
|---|
| 127 | .... S IBT=$G(^IBE(364.4,IBDA,1)) | 
|---|
| 128 | .... ; Code can assume IBIFN, IBDA and IB(.03 thru .05 and .07) exist | 
|---|
| 129 | .... I IBT'="" X IBT I '$T S IBPASS=0,IBWHY(0)=IBDA,IBWHY=5 | 
|---|
| 130 | EDITQ Q IBPASS | 
|---|
| 131 | ; | 
|---|
| 132 | STATUS(IBIFN) ; Function returns whether or not bill currently has a status | 
|---|
| 133 | ;  message or EOB message not yet fully reviewed - | 
|---|
| 134 | ; (only for transmittable bills) | 
|---|
| 135 | ; IBIFN = ien of bill in file 399 | 
|---|
| 136 | ; Returns: | 
|---|
| 137 | ; 0 = None found | 
|---|
| 138 | ; If found, returns a pieced string as follows: | 
|---|
| 139 | ; | 
|---|
| 140 | ;   [1] ien of transmit bill entry (file 364) associated with an | 
|---|
| 141 | ;       entry in file 361 with an unreviewed status message | 
|---|
| 142 | ;   [2] ien of transmit bill entry (file 364) associated with an | 
|---|
| 143 | ;       entry in file 361.1 with an unreviewed EOB | 
|---|
| 144 | ; | 
|---|
| 145 | N IB,Z,Z0 | 
|---|
| 146 | S IB="" | 
|---|
| 147 | S Z="" F  S Z=$O(^IBM(361,"B",IBIFN,Z),-1) Q:'Z  I $P($G(^IBM(361,Z,0)),U,9)<2,$P(^(0),U,11) S $P(IB,U)=$P(^(0),U,11) Q | 
|---|
| 148 | ; | 
|---|
| 149 | S Z="" F  S Z=$O(^IBM(361.1,"B",IBIFN,Z),-1) Q:'Z  I $P($G(^IBM(361.1,Z,0)),U,16)<2,$P(^(0),U,19) S $P(IB,U,2)=$P(^(0),U,19) Q | 
|---|
| 150 | ; | 
|---|
| 151 | Q IB | 
|---|
| 152 | ; | 
|---|
| 153 | TEST(IBIFN) ; Returns 1 if bill IBIFN is a transmission test bill, 0 if not | 
|---|
| 154 | Q +$S($G(^TMP("IBEDI_TEST_BATCH",$J)):1,1:+$P($G(^IBA(364,+$$LAST364(IBIFN),0)),U,7)) | 
|---|
| 155 | ; | 
|---|