1 | BPSOSCF ;BHAM ISC/FCS/DRS/DLF - Low-level format of .02 ;06/01/2004
|
---|
2 | ;;1.0;E CLAIMS MGMT ENGINE;**1,5**;JUN 2004;Build 45
|
---|
3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ; XLOOP - Build claim record
|
---|
6 | ; Inputs:
|
---|
7 | ; BPS - This is shared among the BPSOSC* routines
|
---|
8 | ; FORMAT - Pointer to 9002313.92
|
---|
9 | ; NODE - Segment Node
|
---|
10 | ; 100 (5.1 Transaction Header Segment)
|
---|
11 | ; 110 (5.1 Patient Segment)
|
---|
12 | ; 120 (5.1 Insurance Segment)
|
---|
13 | ; 130 (5.1 Claim Segment)
|
---|
14 | ; 140 (5.1 Pharmacy Provider Segment)
|
---|
15 | ; 150 (5.1 Prescriber Segment)
|
---|
16 | ; 160 (5.1 COB/Other Payments Segment)
|
---|
17 | ; 170 (5.1 Worker's Compensation Segment)
|
---|
18 | ; 180 (5.1 DUR/PPS Segment)
|
---|
19 | ; 190 (5.1 Pricing Segment)
|
---|
20 | ; 200 (5.1 Coupon Segment)
|
---|
21 | ; 210 (5.1 Compound Segment)
|
---|
22 | ; 220 (5.1 Prior Authorization Segment)
|
---|
23 | ; 230 (5.1 Clinical Segment)
|
---|
24 | ; MEDN - Prescription multiple in BPS Claims
|
---|
25 | ;
|
---|
26 | XLOOP(FORMAT,NODE,MEDN) ;EP
|
---|
27 | N ORDER,RECMIEN,MDATA,FLDIEN,PMODE,FLAG,OVERRIDE
|
---|
28 | ;
|
---|
29 | ; Check parameters
|
---|
30 | I $G(FORMAT)="" Q
|
---|
31 | I $G(NODE)="" Q
|
---|
32 | ;
|
---|
33 | ; If the payer sheet does have a particular segment quit
|
---|
34 | I '$D(^BPSF(9002313.92,FORMAT,NODE,0)) Q
|
---|
35 | ;
|
---|
36 | ; VA does not currently do these segments
|
---|
37 | I ",230,220,210,200,170,160,"[(","_NODE_",") Q
|
---|
38 | ;
|
---|
39 | ; DUR is handled differently since it is repeating
|
---|
40 | I NODE=180 D DURPPS^BPSOSHF(FORMAT,NODE,MEDN) Q
|
---|
41 | ;
|
---|
42 | ; Loop through the fields in the segment
|
---|
43 | S ORDER=0
|
---|
44 | F S ORDER=$O(^BPSF(9002313.92,FORMAT,NODE,"B",ORDER)) Q:'ORDER D
|
---|
45 | . ;
|
---|
46 | . ; Get the pointer to the BPS NCPDP FIELD DEFS table
|
---|
47 | . S RECMIEN=$O(^BPSF(9002313.92,FORMAT,NODE,"B",ORDER,0))
|
---|
48 | . I 'RECMIEN D IMPOSS^BPSOSUE("DB","TI","NODE="_NODE,"ORDER="_ORDER,2,$T(+0))
|
---|
49 | . S MDATA=^BPSF(9002313.92,FORMAT,NODE,RECMIEN,0)
|
---|
50 | . S FLDIEN=$P(MDATA,U,2)
|
---|
51 | . ;
|
---|
52 | . ; Quit for 111-AM (Segment ID), 478-H7 (Other Amt Claimed Sub Count), and
|
---|
53 | . ; 479-H8 (Other Amt Claimed Sub Qual)
|
---|
54 | . ; 478 and 479 are handled by 480 and 111 is standard field for each segment
|
---|
55 | . Q:FLDIEN=241!(FLDIEN=240)!(FLDIEN=93)
|
---|
56 | . ;
|
---|
57 | . ; Corrupt or erroneous format file
|
---|
58 | . I 'FLDIEN Q
|
---|
59 | . ;
|
---|
60 | . ; Set override value (may not be defined so override will be null)
|
---|
61 | . I $D(MEDN) S OVERRIDE=$G(BPS("OVERRIDE","RX",MEDN,FLDIEN))
|
---|
62 | . E S OVERRIDE=$G(BPS("OVERRIDE",FLDIEN))
|
---|
63 | . ;
|
---|
64 | . ; Get processing mode (S-Standard (default), X-Special Code)
|
---|
65 | . S PMODE=$P(MDATA,U,3)
|
---|
66 | . I PMODE="" S PMODE="S" ;default it
|
---|
67 | . ;
|
---|
68 | . ; Default FLAG and value being computed
|
---|
69 | . S FLAG="GFS"
|
---|
70 | . S BPS("X")=""
|
---|
71 | . ;
|
---|
72 | . ; If there is an override, set BPS("X") to it and
|
---|
73 | . ; only do Format and Set code
|
---|
74 | . I OVERRIDE]"" S FLAG="FS",BPS("X")=OVERRIDE
|
---|
75 | . ;
|
---|
76 | . ; If Special Code mode is set, execute special code instead
|
---|
77 | . ; of field's Get code and change Flag to FS so Format and
|
---|
78 | . ; Set code is still done but not GET code
|
---|
79 | . I PMODE="X",OVERRIDE="" D
|
---|
80 | .. S FLAG="FS"
|
---|
81 | .. D XSPCCODE(FORMAT,NODE,RECMIEN)
|
---|
82 | . ;
|
---|
83 | . ; Call XFLDCODE to do processing based on FLAG setting
|
---|
84 | . D XFLDCODE(NODE,FLDIEN,FLAG)
|
---|
85 | Q
|
---|
86 | ;
|
---|
87 | ; Execute Get, Format and/or Set MUMPS code for a NCPDP Field
|
---|
88 | ;
|
---|
89 | ; Parameters: NODE - Segment Node
|
---|
90 | ; FLDIEN - NCPDP Field Definitions IEN
|
---|
91 | ; FLAG - If variable contains:
|
---|
92 | ; "G" - Execute Get Code
|
---|
93 | ; "F" - Execute Format Code
|
---|
94 | ; "S" - Execute S Code
|
---|
95 | ;---------------------------------------------------------------------
|
---|
96 | XFLDCODE(NODE,FLDIEN,FLAG) ;EP
|
---|
97 | ; 5.1 loops through the 10, 25, 30 nodes
|
---|
98 | ;
|
---|
99 | N FNODE,INDEX,MCODE
|
---|
100 | ;
|
---|
101 | ; Check if record exists and FLAG variable is set correctly
|
---|
102 | ; Changed from Q: to give fatal error - 10/18/2000
|
---|
103 | I 'FLDIEN D IMPOSS^BPSOSUE("DB,P","TI","FLDIEN="_FLDIEN,,"XFLDCODE",$T(+0))
|
---|
104 | I '$D(^BPSF(9002313.91,FLDIEN,0)) D IMPOSS^BPSOSUE("DB,P","TI","FLDIEN="_FLDIEN,,"XFLDCODE",$T(+0))
|
---|
105 | I FLAG="" D IMPOSS^BPSOSUE("DB,P","TI","FLAG null",,"XFLDCODE",$T(+0))
|
---|
106 | ;
|
---|
107 | ; Loop through Get, Format and Set Code fields and execute code
|
---|
108 | F FNODE=10,25,30 D
|
---|
109 | . I FLAG'[$S(FNODE=10:"G",FNODE=25:"F",FNODE=30:"S",1:"") Q
|
---|
110 | . ;
|
---|
111 | . ; Quit for 111-AM (Segment ID), 478-H7 (Other Amt Claimed Sub Count), and
|
---|
112 | . ; 479-H8 (Other Amt Claimed Sub Qual)
|
---|
113 | . ; 478 and 479 are handled by 480 and 111 is standard field for each segment
|
---|
114 | . I FLDIEN=241!(FLDIEN=240)!(FLDIEN=93) Q
|
---|
115 | . I '$D(^BPSF(9002313.91,FLDIEN,FNODE,0)) D IMPOSS^BPSOSUE("DB","TI","FLDIEN="_FLDIEN,"FNODE="_FNODE,"XFLDCODE",$T(+0))
|
---|
116 | . ;
|
---|
117 | . ; Loop through the multiple and execute each line
|
---|
118 | . S INDEX=0
|
---|
119 | . F S INDEX=$O(^BPSF(9002313.91,FLDIEN,FNODE,INDEX)) Q:'+INDEX D
|
---|
120 | .. ;
|
---|
121 | .. ; If doing SET code and if this is not the header segment, add the ID prefix
|
---|
122 | .. I FNODE=30,NODE'=100 S BPS("X")=$P($G(^BPSF(9002313.91,FLDIEN,5)),U,1)_BPS("X")
|
---|
123 | .. ;
|
---|
124 | .. ; Get the code and xecute
|
---|
125 | .. S MCODE=$G(^BPSF(9002313.91,FLDIEN,FNODE,INDEX,0))
|
---|
126 | .. Q:MCODE=""
|
---|
127 | .. Q:$E(MCODE,1)=";"
|
---|
128 | .. X MCODE
|
---|
129 | Q
|
---|
130 | ;----------------------------------------------------------------------
|
---|
131 | ;Execute Special Code (for a NCPDP Field within a NCPDP Record)
|
---|
132 | ;
|
---|
133 | ;Parameters: FORMAT - NCPDP Record Format IEN (9002313.92)
|
---|
134 | ; NODE - Global node value (100,110,120,130,140)
|
---|
135 | ; RECMIEN - Field Multiple IEN
|
---|
136 | ;---------------------------------------------------------------------
|
---|
137 | XSPCCODE(FORMAT,NODE,RECMIEN) ;EP - Above and BPSOSHR
|
---|
138 | ;
|
---|
139 | N INDEX,MCODE
|
---|
140 | I '$D(^BPSF(9002313.92,FORMAT,NODE,RECMIEN,0)) D IMPOSS^BPSOSUE("DB,P","TI","no special code there to XECUTE","FORMAT="_FORMAT,"XSPCCODE",$T(+0))
|
---|
141 | ;
|
---|
142 | S INDEX=0
|
---|
143 | F S INDEX=$O(^BPSF(9002313.92,FORMAT,NODE,RECMIEN,1,INDEX)) Q:'+INDEX D
|
---|
144 | . S MCODE=$G(^BPSF(9002313.92,FORMAT,NODE,RECMIEN,1,INDEX,0))
|
---|
145 | . Q:MCODE=""
|
---|
146 | . Q:$E(MCODE,1)=";"
|
---|
147 | . X MCODE
|
---|
148 | Q
|
---|