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 | ;
|
---|