| 1 | IBCEU6 ;ALB/ESG - EDI UTILITIES FOR EOB PROCESSING ;29-JUL-2003
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**155**;21-MAR-94
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | COBLINE(IBIFN,IBI,IBXDATA,SORT,IBXTRA) ; Extract all COB data for line item
 | 
|---|
| 7 |  ;  from file 361.1 (EOB), subfile 15 into IBXDATA(IBI,"COB",n)
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  ; IBIFN = bill entry #
 | 
|---|
| 10 |  ; IBI = VistA outbound line item #
 | 
|---|
| 11 |  ; IBXDATA = array returned with COB line item data/pass by reference
 | 
|---|
| 12 |  ; SORT = flag that determines whether the data should be sorted for
 | 
|---|
| 13 |  ;        output for the 837 record ('PR' group always there and has
 | 
|---|
| 14 |  ;        a reason code for deductible first and co-insurance second -
 | 
|---|
| 15 |  ;        even if they are 0).
 | 
|---|
| 16 |  ;        1 = sort, 0 = no sort needed
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 |  ;   Returns IBXDATA(IBI,"COB",COB,n) with COB data for each line item
 | 
|---|
| 19 |  ;      found in an accepted EOB for the bill and = the '0' node data of
 | 
|---|
| 20 |  ;      file 361.115 (LINE LEVEL ADJUSTMENTS)
 | 
|---|
| 21 |  ;         -- AND --
 | 
|---|
| 22 |  ;    IBXDATA(IBI,"COB",COB,n,z,p)=
 | 
|---|
| 23 |  ;           the data on the '0' node for each subordinate entry of file
 | 
|---|
| 24 |  ;           361.11511 (REASONS) (Only first 3 pieces for 837 output)
 | 
|---|
| 25 |  ;               z = this is either piece 1 of the 0-node for subfile
 | 
|---|
| 26 |  ;                   361.1151 (ADJUSTMENTS)
 | 
|---|
| 27 |  ;                          OR
 | 
|---|
| 28 |  ;                   for the 837 COB 'sorted' output, this will be ' PR'
 | 
|---|
| 29 |  ;                    for the forced/extracted entries for deductible
 | 
|---|
| 30 |  ;                    and co-insurance so they are always output first
 | 
|---|
| 31 |  ;                    The space needs to be stripped off on output
 | 
|---|
| 32 |  ;         -- AND --
 | 
|---|
| 33 |  ; IBXTRA = array returned if passed by reference if line is found
 | 
|---|
| 34 |  ;          associated with line IBI due to bundling/unbundling
 | 
|---|
| 35 |  ;          IBXTRA("ALL",x,paid procedure)=COB SEQ ^ seq # corresponding
 | 
|---|
| 36 |  ;                        to subscript n in IBXDATA(,"COB",COB,n
 | 
|---|
| 37 |  ;                (x = line #-original proc-service dt)
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  N A,B,B1,C,D,IBDATA,IB0,IB00,IBA,IBB,IBDED,IBCOI,IBS,IBN,IBDT
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  ; If multiple EOB's reference this line for the same COB sequence,
 | 
|---|
| 42 |  ;   extract only the last one marked accepted containing this line item.
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  S A=0
 | 
|---|
| 45 |  F  S A=$O(^IBM(361.1,"B",IBIFN,A)) Q:'A  D
 | 
|---|
| 46 |  . I '$$EOBELIG^IBCEU1(A) Q   ; eob not eligible for secondary claim
 | 
|---|
| 47 |  . S IBA=0
 | 
|---|
| 48 |  . S IBDATA=$G(^IBM(361.1,A,0))
 | 
|---|
| 49 |  . S IBS=$P(IBDATA,U,15)      ; insurance sequence#
 | 
|---|
| 50 |  . S IBN=+$O(IBXDATA(IBI,"COB",IBS,0))
 | 
|---|
| 51 |  . I IBN D  Q:IBN  ; check for later EOB
 | 
|---|
| 52 |  .. I $G(IBDT(IBI,IBS)),IBDT(IBI,IBS)<$P(IBDATA,U,6) K IBDT(IBI,IBS),IBXDATA(IBI,"COB",IBS) S IBN=0
 | 
|---|
| 53 |  . ;
 | 
|---|
| 54 |  . S IBDT(IBI,IBS)=$P(IBDATA,U,6)
 | 
|---|
| 55 |  . S B=0
 | 
|---|
| 56 |  . F  S B=$O(^IBM(361.1,A,15,"AC",IBI,B)) Q:'B  S IB0=$G(^IBM(361.1,A,15,B,0)),IB0=IB0_U_IBDT(IBI,IBS) D
 | 
|---|
| 57 |  .. Q:$TR(IB0,U)=""
 | 
|---|
| 58 |  .. S IBA=IBA+1,IBXDATA(IBI,"COB",IBS,IBA)=IBI_U_IB0
 | 
|---|
| 59 |  .. ;
 | 
|---|
| 60 |  .. ; capture the modifiers (361.1152)
 | 
|---|
| 61 |  .. I $D(^IBM(361.1,A,15,B,2)) M IBXDATA(IBI,"COBMOD")=^IBM(361.1,A,15,B,2)
 | 
|---|
| 62 |  .. I $P(IB0,U,15)'="" D  ;Line involved in bundling/unbundling
 | 
|---|
| 63 |  ... N Z0 S Z0=IBI_"-"_$P(IB0,U,15)_"-"_$P(IB0,U,16)
 | 
|---|
| 64 |  ... S IBXTRA("ALL",Z0,$P(IB0,U,4))=IBS_U_IBA,$P(IBXDATA(IBI,"COB",IBS,IBA),U)=""
 | 
|---|
| 65 |  .. S C=0,(IBDED(IBA),IBCOI(IBA))="0^0" ;Assume 0 if not found in list
 | 
|---|
| 66 |  .. F  S C=$O(^IBM(361.1,A,15,B,1,C)) Q:'C  S IB0=$G(^(C,0)) D
 | 
|---|
| 67 |  ... S D=0
 | 
|---|
| 68 |  ... F  S D=$O(^IBM(361.1,A,15,B,1,C,1,D)) Q:'D  S IB00=$S($G(SORT):$P($G(^(D,0)),U,1,3),1:$G(^(D,0))) D
 | 
|---|
| 69 |  .... I $G(SORT),$P(IB0,U)="PR" D  ;Check for deductible or co-ins
 | 
|---|
| 70 |  ..... I 'IBDED(IBA),$P(IB00,U)=1 S IBDED(IBA)=IB00,IB00="" Q
 | 
|---|
| 71 |  ..... I 'IBCOI(IBA),$P(IB00,U)=2 S IBCOI(IBA)=IB00,IB00="" Q
 | 
|---|
| 72 |  .... I $TR(IB00,U)'="" S IBB=$O(IBXDATA(IBI,"COB",IBS,IBA,$P(IB0,U),""),-1)+1,IBXDATA(IBI,"COB",IBS,IBA,$P(IB0,U),IBB)=IB00
 | 
|---|
| 73 |  .. Q:'$G(SORT)
 | 
|---|
| 74 |  .. S IBXDATA(IBI,"COB",IBS,IBA," PR",1)=IBDED(IBA)
 | 
|---|
| 75 |  .. S IBXDATA(IBI,"COB",IBS,IBA," PR",2)=IBCOI(IBA)
 | 
|---|
| 76 |  Q
 | 
|---|
| 77 |  ;
 | 
|---|