1 | BPSECA1 ;BHAM ISC/FCS/DRS/VA/DLF - Assemble formatted claim ;05/14/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 | ; Assemble ASCII formatted claim submission record
|
---|
6 | ;
|
---|
7 | ; Input Variables:
|
---|
8 | ; CLAIMIEN - pointer into 9002313.02
|
---|
9 | ; MSG - Array passed by reference - This will have the claim packet
|
---|
10 | ;
|
---|
11 | ; NCPDP 5.1 changes
|
---|
12 | ; 5.1 has 14 claim segments (header, patient, insurance, claim
|
---|
13 | ; pharmacy provider, prescriber,
|
---|
14 | ; COB, workers comp, DUR, Pricing,
|
---|
15 | ; coupon, compound, prior auth,
|
---|
16 | ; clinical)
|
---|
17 | ; 5.1 requires field identifiers and separators on all fields
|
---|
18 | ; other than the header
|
---|
19 | ; 5.1 Segment separators are required prior to each segment
|
---|
20 | ; following the header
|
---|
21 | ; 5.1 Group separators appear at the end of each
|
---|
22 | ; transaction (prescription)
|
---|
23 | ;
|
---|
24 | ; Adjustments were also made to the reversal logic as well.
|
---|
25 | ;
|
---|
26 | ASCII(CLAIMIEN,MSG) ;EP - from BPSOSQG
|
---|
27 | N IEN,RECORD,BPS,UERETVAL,DET51,WP
|
---|
28 | ;
|
---|
29 | ; Quit if no Claim IEN
|
---|
30 | I '$G(CLAIMIEN) Q
|
---|
31 | I '$D(^BPSC(CLAIMIEN,0)) Q
|
---|
32 | ;
|
---|
33 | ; Setup IEN variables (used when executing format code)
|
---|
34 | S IEN(9002313.02)=CLAIMIEN
|
---|
35 | ;
|
---|
36 | ; Get Payer Sheet pointer
|
---|
37 | S IEN(9002313.92)=$P($G(^BPSC(IEN(9002313.02),0)),U,2)
|
---|
38 | ;
|
---|
39 | ; Quit if the payer sheet pointer is missing
|
---|
40 | I 'IEN(9002313.92) Q
|
---|
41 | ;
|
---|
42 | ; Quit if the payer sheet does not exist
|
---|
43 | I '$D(^BPSF(9002313.92,+IEN(9002313.92),0)) Q
|
---|
44 | ;
|
---|
45 | ; Retrieve claim submission record (used when executing format code)
|
---|
46 | D GETBPS2^BPSECX0(IEN(9002313.02),.BPS)
|
---|
47 | ;
|
---|
48 | ; Assemble required claim header and optional format sections
|
---|
49 | S RECORD=""
|
---|
50 | ;
|
---|
51 | ; Do non-repeating claim segments
|
---|
52 | D XLOOP^BPSOSH2("100^110^120",.IEN,.BPS,.RECORD)
|
---|
53 | ;
|
---|
54 | ; Set list of repeating claim segments
|
---|
55 | S DET51="130^140^150^160^170^180^190^200^210^220^230"
|
---|
56 | ;
|
---|
57 | ; Loop through prescription multiple and get create repeation segments
|
---|
58 | S IEN(9002313.01)=0
|
---|
59 | F S IEN(9002313.01)=$O(^BPSC(IEN(9002313.02),400,IEN(9002313.01))) Q:'IEN(9002313.01) D
|
---|
60 | . ;
|
---|
61 | . ;Retrieve prescription information (used when executing format code)
|
---|
62 | . K BPS(9002313.0201)
|
---|
63 | . D GETBPS3^BPSECX0(IEN(9002313.02),IEN(9002313.01),.BPS)
|
---|
64 | . ;
|
---|
65 | . ; Handle the DUR repeating flds
|
---|
66 | . D DURVALUE
|
---|
67 | . ;
|
---|
68 | . ; Append group separator character
|
---|
69 | . S RECORD=RECORD_$C(29)
|
---|
70 | . ;
|
---|
71 | . ; Assemble claim information required and optional sections
|
---|
72 | . D XLOOP^BPSOSH2(DET51,.IEN,.BPS,.RECORD)
|
---|
73 | ;
|
---|
74 | ; Need to store by segment due to HL7 constraints. Had to change field, group,
|
---|
75 | ; and segment separators to control characters for Vitria/AAC processing as well as
|
---|
76 | ; shortening the length of the xmit.
|
---|
77 | ; DMB 11/27/2006 - If the first NNODES has $C(30), this will bomb since OREC will not
|
---|
78 | ; have a value. Need to look into this.
|
---|
79 | N NNODES,INDEX,ONE,TWO,OREC
|
---|
80 | S NNODES=0 F S NNODES=$O(RECORD(NNODES)) Q:NNODES="" D
|
---|
81 | . I RECORD(NNODES)[$C(30) D
|
---|
82 | .. S ONE=$P(RECORD(NNODES),($C(30)_$C(28)),1),TWO=$P(RECORD(NNODES),($C(30)_$C(28)),2)
|
---|
83 | .. S RECORD(OREC)=RECORD(OREC)_ONE_$C(30)_$C(28),RECORD(NNODES)=TWO
|
---|
84 | . S OREC=NNODES
|
---|
85 | ;
|
---|
86 | ; Put claim packet into local array to be passed back to calling routine
|
---|
87 | S NNODES=""
|
---|
88 | S INDEX=1 F S NNODES=$O(RECORD(NNODES)) Q:NNODES="" D
|
---|
89 | . S MSG("HLS",INDEX)=RECORD(NNODES)
|
---|
90 | . S WP(INDEX/100+1,0)=RECORD(NNODES)
|
---|
91 | . S INDEX=INDEX+1
|
---|
92 | S MSG("HLS",0)=INDEX-1
|
---|
93 | ;
|
---|
94 | ; Store raw data into the BPS Claims record
|
---|
95 | D WP^DIE(9002313.02,CLAIMIEN_",",9999,"","WP")
|
---|
96 | Q
|
---|
97 | ;
|
---|
98 | ; DURVALUE - This subroutine will loop through the DUR/PPS repeating
|
---|
99 | ; fields and load their values into the BPS array for the claim
|
---|
100 | ; generation process
|
---|
101 | DURVALUE ;
|
---|
102 | N DURCNT,DUR
|
---|
103 | ;
|
---|
104 | K BPS(9002313.1001)
|
---|
105 | ;
|
---|
106 | ; Get the number of DUR records
|
---|
107 | S DURCNT=$P($G(^BPSC(IEN(9002313.02),400,IEN(9002313.01),473.01,0)),U,4)
|
---|
108 | ;
|
---|
109 | ; Loop through DURS and get the data
|
---|
110 | F DUR=1:1:DURCNT D
|
---|
111 | . D GETBPS4^BPSECX0(IEN(9002313.02),IEN(9002313.01),DUR,.BPS)
|
---|
112 | Q
|
---|