| [613] | 1 | IBCEF77 ;WOIFO/SS - FORMATTER/EXTRACT BILL FUNCTIONS ;31-JUL-03
 | 
|---|
 | 2 |  ;;2.0;INTEGRATED BILLING;**232,280,155,290,291,320,348,349**;21-MAR-94;Build 46
 | 
|---|
 | 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
 | 4 |  ;
 | 
|---|
 | 5 | SORT(IBPRNUM,IBPRTYP,IB399,IBSRC,IBDST,IBN,IBEXC,IBSEQ,IBLIMIT) ;
 | 
|---|
 | 6 |  N IBXIEN,IBXDATA,IBNET,IBTRI,IB1,IB2,IBID,Z,IBZ,IBZ1,IBSVP
 | 
|---|
 | 7 |  S (IB1,IB2,IBZ,IBZ1,IBTRI)=""
 | 
|---|
 | 8 |  D F^IBCEF("N-ALL ATT/RENDERING PROV SSN","IBZ",,IB399)
 | 
|---|
 | 9 |  S IBZ1=$$ALLPTYP^IBCEF3(IB399)
 | 
|---|
 | 10 |  F Z=1:1:3 S $P(IBZ1,U,Z)=$S($P(IBZ1,U,Z)="CH":1,1:"") S:$P(IBZ1,U,Z) IBTRI=1
 | 
|---|
 | 11 |  S IBNET=$$NETID^IBCEP() ; netwrk id type
 | 
|---|
 | 12 |  I $G(IBN) D
 | 
|---|
 | 13 |  . S Z=0 F  S Z=$O(IBDST(IBPRNUM,IBPRTYP,Z)) Q:'Z  S IBID(+$P(IBDST(IBPRNUM,IBPRTYP,Z),U,9))=""
 | 
|---|
 | 14 |  F  S IB1=$O(IBSRC(IB1)) Q:IB1=""  D  Q:IBN=IBLIMIT
 | 
|---|
 | 15 |  . N OK,IBSTLIC
 | 
|---|
 | 16 |  . S IBSTLIC=""
 | 
|---|
 | 17 |  . F  S IB2=$O(IBSRC(IB1,IB2)) Q:IB2=""  D  Q:IBN=IBLIMIT
 | 
|---|
 | 18 |  . . S IBSVP=$P(IBSRC(IB1,IB2),U)
 | 
|---|
 | 19 |  . . ; If ID overridden, output no others of this type
 | 
|---|
 | 20 |  . . I $G(IBEXC),$P($G(IBSRC(IB1,IB2)),U,9)=IBEXC Q
 | 
|---|
 | 21 |  . . ; Ck state of care/lic match if st lic#
 | 
|---|
 | 22 |  . . I $P($G(IBSRC(IB1,IB2)),U,3)="0B" S OK=1 D  Q:'OK
 | 
|---|
 | 23 |  . . . I +$$CAREST^IBCEP2A(IB399)'=$P(IBSRC(IB1,IB2),U,7) S IBSTLIC=1 Q
 | 
|---|
 | 24 |  . . . I $G(IBSTLIC(0))'="" S OK=0 Q
 | 
|---|
 | 25 |  . . . S IBSTLIC(0)=$G(IBSRC(IB1,IB2)),OK=0
 | 
|---|
 | 26 |  . . ; Exclude SSN from sec ids unless required
 | 
|---|
 | 27 |  . . I $P($G(IBSRC(IB1,IB2)),U,3)="SY" Q
 | 
|---|
 | 28 |  . . ; Only 1 of each prov id type
 | 
|---|
 | 29 |  . . Q:$D(IBID(+$P($G(IBSRC(IB1,IB2)),U,9)))
 | 
|---|
 | 30 |  . . S IBN=IBN+1,IBID(+$P($G(IBSRC(IB1,IB2)),U,9))=""
 | 
|---|
 | 31 |  . . S IBDST(IBPRNUM,IBPRTYP,IBN)=$G(IBSRC(IB1,IB2))
 | 
|---|
 | 32 |  . I IBN'=IBLIMIT,'$G(IBSTLIC),$G(IBSTLIC(0))'="" S IBN=IBN+1,IBDST(IBPRNUM,IBPRTYP,IBN)=IBSTLIC(0)
 | 
|---|
 | 33 |  I $$FT^IBCEF(IB399)=2,$G(IBID(IBNET))="",IBTRI,$P(IBZ1,U,IBSEQ) D    ; WCJ 02/13/2006
 | 
|---|
 | 34 |  . Q:$P(IBZ,U,IBPRTYP)=""
 | 
|---|
 | 35 |  . ; here, no network id & TRICARE ins co.
 | 
|---|
 | 36 |  . N Z
 | 
|---|
 | 37 |  . S Z=+$O(^DGCR(399,IB399,"PRV","B",IBPRTYP,0)),Z=$P($G(^DGCR(399,IB399,"PRV",Z,0)),U,2)
 | 
|---|
 | 38 |  . S IBN=IBN+1,IBDST(IBPRNUM,IBPRTYP,IBN)=Z_U_+$$POLICY^IBCEF(IB399,1,IBSEQ)_U_$P($G(^IBE(355.97,IBNET,0)),U,3)_U_$P(IBZ,U,IBPRTYP)_U_"0^0^^^"_IBNET
 | 
|---|
 | 39 |  Q
 | 
|---|
 | 40 |  ;
 | 
|---|
 | 41 |  ; esg - 8/25/06 - IB*2*348 - CFIDS function
 | 
|---|
 | 42 |  ;
 | 
|---|
 | 43 | CFIDS(IBIFN,PRVTYP,ALLOWIDS) ; Claim Form IDs for human providers
 | 
|---|
 | 44 |  ; Function returns a 3 piece string:  [1] default secondary ID qual
 | 
|---|
 | 45 |  ;                                     [2] default secondary ID
 | 
|---|
 | 46 |  ;                                     [3] NPI
 | 
|---|
 | 47 |  ; Input:   IBIFN - internal claim#
 | 
|---|
 | 48 |  ;         PRVTYP - internal provider type ID number
 | 
|---|
 | 49 |  ;                - 1:REFER;2:OPER;3:REND;4:ATT;5:SUPER;9:OTHER
 | 
|---|
 | 50 |  ;                - if blank, then default Att/Rend based on form type
 | 
|---|
 | 51 |  ;         ALLOWIDS - List of allowable Secondary IDS ^ delimited. 
 | 
|---|
 | 52 |  ;                  ex "^1A^1B^1C^1H^G2^LU^N5^"
 | 
|---|
 | 53 |  ;                  UB-04 only wants IDs provided by the payer, not the providers own IDS
 | 
|---|
 | 54 |  ;                  Also, they want the qualifier to be G2 (Commercial)
 | 
|---|
 | 55 |  ;                  if it is a payer provided ID
 | 
|---|
 | 56 |  NEW ID,FT,IBZ,IBQ,IBSID,IBNPI,I,OK
 | 
|---|
 | 57 |  S ID=""
 | 
|---|
 | 58 |  I '$G(IBIFN) G CFIDSX
 | 
|---|
 | 59 |  S FT=$$FT^IBCEF(IBIFN)
 | 
|---|
 | 60 |  I '$G(PRVTYP) S PRVTYP=3 I FT=3 S PRVTYP=4
 | 
|---|
 | 61 |  D ALLIDS^IBCEF75(IBIFN,.IBZ,1)
 | 
|---|
 | 62 |  S OK=0 I $G(ALLOWIDS)="" S OK=1
 | 
|---|
 | 63 |  F I=1:1 D  Q:OK
 | 
|---|
 | 64 |  . S IBQ=$P($G(IBZ("PROVINF",IBIFN,"C",1,PRVTYP,I)),U,3)    ; qualifier
 | 
|---|
 | 65 |  . S IBSID=$P($G(IBZ("PROVINF",IBIFN,"C",1,PRVTYP,I)),U,4)  ; ID#
 | 
|---|
 | 66 |  . I IBQ="",IBSID="" S OK=1 Q
 | 
|---|
 | 67 |  . Q:OK
 | 
|---|
 | 68 |  . I $G(ALLOWIDS)[(U_IBQ_U) S OK=1,IBQ="G2" Q
 | 
|---|
 | 69 |  . S (IBQ,IBSID)=""
 | 
|---|
 | 70 |  S IBNPI=""
 | 
|---|
 | 71 |  D F^IBCEF("N-PROVIDER NPI CODES","IBNPI",,IBIFN)
 | 
|---|
 | 72 |  S IBNPI=$P(IBNPI,U,PRVTYP)                               ; NPI
 | 
|---|
 | 73 |  ;
 | 
|---|
 | 74 |  ; special check for the referring doc
 | 
|---|
 | 75 |  I PRVTYP=1,$D(IBZ("PROVINF",IBIFN,"C",1,PRVTYP)),IBQ="",IBSID="" S IBQ="1G",IBSID="VAD000"
 | 
|---|
 | 76 |  ;
 | 
|---|
 | 77 |  ; If UB-04 and no IDs, use VA UPIN as deafult
 | 
|---|
 | 78 |  I $D(IBZ("PROVINF",IBIFN,"C",1,PRVTYP)),FT=3,IBQ="",IBSID="" S IBQ="1G",IBSID="VAD000"
 | 
|---|
 | 79 |  ;
 | 
|---|
 | 80 |  ; determine if legacy ID's should be displayed
 | 
|---|
 | 81 |  I '$$PRTLID(IBIFN,IBNPI) S (IBQ,IBSID)=""
 | 
|---|
 | 82 |  ;
 | 
|---|
 | 83 |  S ID=IBQ_U_IBSID_U_IBNPI
 | 
|---|
 | 84 | CFIDSX ;
 | 
|---|
 | 85 |  Q ID
 | 
|---|
 | 86 |  ;
 | 
|---|
 | 87 | DOL(AMT,LEN,DEC) ; format dollar amounts for printed claim forms
 | 
|---|
 | 88 |  ; AMT = amount to be formatted
 | 
|---|
 | 89 |  ; LEN = length of field - right justified to this length
 | 
|---|
 | 90 |  ; DEC = flag to include the decimal point or not
 | 
|---|
 | 91 |  ;       DEFAULT value is to not include the decimal point
 | 
|---|
 | 92 |  ;       if DEC is not defined or 0, assume no decimal point
 | 
|---|
 | 93 |  ;       so 15 will be returned as 1500, 6.77 will be returned as 677
 | 
|---|
 | 94 |  ;       if DEC is 1, then the decimal point will be included
 | 
|---|
 | 95 |  ;
 | 
|---|
 | 96 |  S LEN=$G(LEN,10),DEC=$G(DEC,0)     ; defaults
 | 
|---|
 | 97 |  S AMT=$FN(+$G(AMT),"",2)           ; format # with 2 decimals
 | 
|---|
 | 98 |  I 'DEC S AMT=$TR(AMT,".")          ; strip or leave decimal
 | 
|---|
 | 99 |  S AMT=$J(AMT,LEN)                  ; right justify
 | 
|---|
 | 100 |  Q AMT
 | 
|---|
 | 101 |  ;
 | 
|---|
 | 102 | PRTLID(IBIFN,NPI) ; YMG; Print Legacy IDs on the CMS-1500 or UB-04 form
 | 
|---|
 | 103 |  ; Function fetches form type associated with given claim number
 | 
|---|
 | 104 |  ; (values: 2 - CMS-1500 form, 3 - UB-04 form), then looks at
 | 
|---|
 | 105 |  ; "Print Legacy ID" site parameter for this particular form type.
 | 
|---|
 | 106 |  ; 
 | 
|---|
 | 107 |  ; Possible site parameter values are:
 | 
|---|
 | 108 |  ;   "Y" - always print Legacy ID
 | 
|---|
 | 109 |  ;   "N" - never print Legacy ID
 | 
|---|
 | 110 |  ;   "C" - only print Legacy ID if NPI is not available.
 | 
|---|
 | 111 |  ;   
 | 
|---|
 | 112 |  ; This information is used to determine if Legacy ID should be printed
 | 
|---|
 | 113 |  ; for claim number in question.
 | 
|---|
 | 114 |  ; 
 | 
|---|
 | 115 |  ; Note: Situation when "Print Legacy ID" site parameter is not set is treated
 | 
|---|
 | 116 |  ;       as if this parameter was set to "Y" - always print Legacy ID.
 | 
|---|
 | 117 |  ; 
 | 
|---|
 | 118 |  ; Input:
 | 
|---|
 | 119 |  ;             IBIFN - internal claim number
 | 
|---|
 | 120 |  ;       NPI   - NPI number (or "" if no NPI is available)
 | 
|---|
 | 121 |  ; 
 | 
|---|
 | 122 |  ; Returns:
 | 
|---|
 | 123 |  ;       0  - Legacy ID should not be printed
 | 
|---|
 | 124 |  ;       1  - Legacy ID should be printed
 | 
|---|
 | 125 |  ;
 | 
|---|
 | 126 |  Q $S(NPI="":"YC",1:"Y")[$P($G(^IBE(350.9,1,1)),U,$S($$FT^IBCEF(IBIFN)=2:32,1:33))
 | 
|---|
 | 127 |  ;
 | 
|---|
 | 128 | REMARK(IBIFN,IBXDATA,OFLG) ; procedure to return array of UB-04 remark text
 | 
|---|
 | 129 |  ; for claim IBIFN.  Data pulled from field# 402 of file 399 and
 | 
|---|
 | 130 |  ; formatted into an array IBXDATA(n) where each line is not greater
 | 
|---|
 | 131 |  ; than 24 characters long.  This will fit into UB-04 FL-80.
 | 
|---|
 | 132 |  ;
 | 
|---|
 | 133 |  ; OFLG=1 only when called in the output formatter.  In this case, only
 | 
|---|
 | 134 |  ; 4 lines in IBXDATA will be returned.
 | 
|---|
 | 135 |  ;
 | 
|---|
 | 136 |  NEW TEXT,LEN,IBZ,J,PCE,CHS,NEWCHS,IBK,J,TX
 | 
|---|
 | 137 |  K IBXDATA
 | 
|---|
 | 138 |  S TEXT=$P($G(^DGCR(399,+$G(IBIFN),"UF2")),U,3) I TEXT="" Q
 | 
|---|
 | 139 |  ;
 | 
|---|
 | 140 |  ; need to break up large words for word wrapping purposes to get
 | 
|---|
 | 141 |  ; as many characters as possible in the box.
 | 
|---|
 | 142 |  S LEN=17
 | 
|---|
 | 143 |  F PCE=1:1 Q:PCE>$L(TEXT," ")  S CHS=$P(TEXT," ",PCE) I $L(CHS)>LEN D
 | 
|---|
 | 144 |  . S NEWCHS=$E(CHS,1,LEN)_" "_$E(CHS,LEN+1,999)
 | 
|---|
 | 145 |  . S $P(TEXT," ",PCE)=NEWCHS
 | 
|---|
 | 146 |  . Q
 | 
|---|
 | 147 |  ;
 | 
|---|
 | 148 |  ; When calling FSTRNG^IBJU1 which calls ^DIWP, FileMan builds the
 | 
|---|
 | 149 |  ; array with strings of max length=1 less than what you tell it.
 | 
|---|
 | 150 |  ;
 | 
|---|
 | 151 |  S LEN=20                             ; line 1 is 19 chars
 | 
|---|
 | 152 |  D FSTRNG^IBJU1(TEXT,LEN,.IBZ)        ; build IBZ array
 | 
|---|
 | 153 |  S IBK=$$TRIM^XLFSTR($G(IBZ(1)))      ; save off the first line
 | 
|---|
 | 154 |  S TEXT=$P(TEXT,IBK,2,99)             ; restore the rest of the text
 | 
|---|
 | 155 |  S TEXT=$$TRIM^XLFSTR(TEXT)           ; trim spaces
 | 
|---|
 | 156 |  ;
 | 
|---|
 | 157 |  S LEN=25                             ; the rest is 24 chars
 | 
|---|
 | 158 |  D FSTRNG^IBJU1(TEXT,LEN,.IBZ)        ; build IBZ array
 | 
|---|
 | 159 |  S IBXDATA(1)="     "_IBK             ; line 1
 | 
|---|
 | 160 |  S J=0 F  S J=$O(IBZ(J)) Q:'J  D      ; lines 2-n
 | 
|---|
 | 161 |  . I J>3,$G(OFLG) Q                   ; only 4 lines for output formatter
 | 
|---|
 | 162 |  . S TX=$$TRIM^XLFSTR($G(IBZ(J)))
 | 
|---|
 | 163 |  . I TX'="" S IBXDATA(J+1)=TX
 | 
|---|
 | 164 |  . Q
 | 
|---|
 | 165 |  Q
 | 
|---|
 | 166 |  ;
 | 
|---|