1 | IBCNEDE5 ;DAOU/DAC - IIV DATA EXTRACTS ;15-OCT-2002
|
---|
2 | ;;2.0;INTEGRATED BILLING;**184,271**;21-MAR-94
|
---|
3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | Q ; no direct calls allowed
|
---|
6 | ;
|
---|
7 | SIDCHK(PIEN,DFN,BSID,SIDARRAY,FRESHDT) ; Checks the flag settings of 'Identification
|
---|
8 | ; Requires Subscriber ID' and 'Use SSN as Subscriber ID'. The function
|
---|
9 | ; returns a "^" delimited string. The first value is between 1 and 5
|
---|
10 | ; telling the calling program what action(s) it should perform. The
|
---|
11 | ; 2nd piece indicates the Subcriber ID that the calling program should
|
---|
12 | ; use for setting the Subscriber IDs in the IIV Transmission Queue file
|
---|
13 | ; (365.1). The calling program is to address the blank Sub IDs and
|
---|
14 | ; make sure the data extract does not exceed the max extract number.
|
---|
15 | ;
|
---|
16 | ; PIEN - Payer's IEN (file 365.12)
|
---|
17 | ; DFN - Patient's IEN (file 2)
|
---|
18 | ; INREC - Insurance IEN of Patients record (subfile 2.312)
|
---|
19 | ; BSID - Subscriber ID from buffer file (file 355.3 field )
|
---|
20 | ; SIDARRAY - Array of active subscribers - may be subscripted by SSN
|
---|
21 | ; FRESHDT - Freshness Date - used for checking verified date
|
---|
22 | ;
|
---|
23 | ; Logic to follow:
|
---|
24 | ;
|
---|
25 | ; Id. Req.| Use SSN | Sub ID|Action|
|
---|
26 | ; Sub ID | as Sub ID| found | # | Create
|
---|
27 | ; ________|__________|_______|______|________
|
---|
28 | ; YES - YES 1 1 Verification TQ entry w/ Sub ID
|
---|
29 | ; YES YES NO 2 1 Ver. TQ entry, use SSN as Sub ID
|
---|
30 | ; YES NO NO 3 new buffer entry or modify existing
|
---|
31 | ; saying manual verification required
|
---|
32 | ; NO NO NO 4 1 Ver. TQ entry w/ blank Sub ID
|
---|
33 | ; NO YES NO 5 2 Ver. TQ entries, 1 w/ SSN as Sub
|
---|
34 | ; ID and other w/ blank Sub ID
|
---|
35 | ;
|
---|
36 | N SIDACT,SID,APPIEN,SIDSTR,SIDREQ,SIDSSN,SSN
|
---|
37 | N INSSTR,INSSTR1,SYMBOL,EXP,SUBID,SUBIDS,SIDCNT,INREC,MVER,VFLG
|
---|
38 | ;
|
---|
39 | S FRESHDT=$G(FRESHDT),VFLG=0
|
---|
40 | ;
|
---|
41 | I $G(BSID)'="" D G SIDCHKX
|
---|
42 | . S SID=BSID,(SIDACT,SIDCNT)=1
|
---|
43 | . S SIDARRAY($$STRIP(SID,,DFN)_"_")=""
|
---|
44 | S APPIEN=$$PYRAPP^IBCNEUT5("IIV",PIEN)
|
---|
45 | S SIDSTR=$G(^IBE(365.12,PIEN,1,APPIEN,0))
|
---|
46 | S SIDREQ=$P(SIDSTR,U,8)
|
---|
47 | S SIDSSN=$P(SIDSTR,U,9)
|
---|
48 | ;
|
---|
49 | S INSSTR="",SIDCNT=0,INREC=$O(^DPT(DFN,.312,0)) S:'INREC INREC=1
|
---|
50 | ;
|
---|
51 | I $D(BSID),BSID="" G SIDC1
|
---|
52 | I $G(^DPT(DFN,.312,INREC,0)) F D Q:'INREC
|
---|
53 | . S INSSTR=$G(^DPT(DFN,.312,INREC,0))
|
---|
54 | . S INSSTR1=$G(^DPT(DFN,.312,INREC,1))
|
---|
55 | . S SYMBOL=$$INSERROR^IBCNEUT3("I",+INSSTR)
|
---|
56 | . I $P(SYMBOL,U)="" D ; no IIV related error w/ ins. company
|
---|
57 | .. I PIEN'=$P(SYMBOL,U,2) Q ; wrong payer ien
|
---|
58 | .. S SUBID=$P(INSSTR,U,2)
|
---|
59 | .. I SUBID="" Q ; missing Subscriber ID
|
---|
60 | .. I $P(INSSTR,U,8)>DT Q ; future effective date
|
---|
61 | .. S EXP=$P(INSSTR,U,4) I EXP,EXP<DT Q ; expired
|
---|
62 | .. S MVER=$P(INSSTR1,U,3) ; last verified date
|
---|
63 | .. I MVER'="",FRESHDT'="",MVER>FRESHDT S VFLG=1 Q ; verified recently
|
---|
64 | .. S SUBIDS=$$STRIP(SUBID,,DFN)
|
---|
65 | .. I $D(SIDARRAY(SUBIDS_"_"_INREC)) Q ; already in the array
|
---|
66 | .. S SIDARRAY(SUBIDS_"_"_INREC)="",SIDCNT=SIDCNT+1
|
---|
67 | . S INREC=$O(^DPT(DFN,.312,INREC))
|
---|
68 | . Q
|
---|
69 | ;
|
---|
70 | I SIDCNT S SIDACT=1 G SIDCHKX
|
---|
71 | I 'SIDCNT,VFLG S SIDACT=1 G SIDCHKX
|
---|
72 | SIDC1 I SIDREQ,SIDSSN S SIDACT=2 D SSN(DFN) G SIDCHKX
|
---|
73 | I SIDREQ,'SIDSSN S SIDACT=3 G SIDCHKX
|
---|
74 | I 'SIDREQ,'SIDSSN S SIDACT=4 G SIDCHKX
|
---|
75 | I 'SIDREQ,SIDSSN S SIDACT=5 D SSN(DFN)
|
---|
76 | ;
|
---|
77 | SIDCHKX ; EXIT POINT
|
---|
78 | ;
|
---|
79 | Q SIDACT_U_SIDCNT
|
---|
80 | ;
|
---|
81 | SSN(DFN) ; Get Patient SSN and update SIDARRAY, if needed
|
---|
82 | S SSN=$$GETSSN(DFN)
|
---|
83 | N SSNS
|
---|
84 | S SSNS=$$STRIP(SSN,1,DFN)
|
---|
85 | I $P($O(SIDARRAY(SSNS_"_")),"_")=SSNS Q
|
---|
86 | I SSNS'="",'$D(SIDARRAY(SSNS_"_")) S SIDARRAY(SSNS_"_")="",SIDCNT=SIDCNT+1
|
---|
87 | Q
|
---|
88 | ;
|
---|
89 | GETSSN(DFN) ; Get Patient SSN
|
---|
90 | Q:'$G(DFN) ""
|
---|
91 | Q $P($G(^DPT(DFN,0)),U,9)
|
---|
92 | ;
|
---|
93 | STRIP(ID,SS,DFN) ; Strip dashes and spaces if ssn
|
---|
94 | ; ID can be ssn or subid
|
---|
95 | ; if SS, ssn is being passed
|
---|
96 | N SSN,IDS,IDB
|
---|
97 | S SS=$G(SS)
|
---|
98 | ; If a ssn is passed, strip dashes and spaces
|
---|
99 | I SS Q $TR(ID,"- ")
|
---|
100 | ; If not ssn format, do not strip
|
---|
101 | S IDB=$TR(ID," ")
|
---|
102 | I IDB'?3N1"-"2N1"-"4N,IDB'?9N Q ID
|
---|
103 | ; Compare w/SSN - if it matches, strip dashes and spaces
|
---|
104 | S IDS=$TR(ID,"- ")
|
---|
105 | S SSN=$TR($$GETSSN(DFN),"- ")
|
---|
106 | I SSN=IDS Q IDS
|
---|
107 | Q ID
|
---|
108 | ;
|
---|
109 | SIDCHK2(DFN,PIEN,SIDARRAY,FRESHDT) ;Checks the flag settings of
|
---|
110 | ; 'Identification Requires Subscriber ID' and 'Use SSN as Subscriber
|
---|
111 | ; ID'. The function returns a "^" delimited string. The first value
|
---|
112 | ; is between 1 and 8 telling the calling program what action(s) it
|
---|
113 | ; should perform. The 2nd piece indicates the number of unique
|
---|
114 | ; Subscriber IDs found for the patient/payer combo. In addition, a
|
---|
115 | ; local array of Subcriber IDs are passed back by reference that the
|
---|
116 | ; calling program should use for setting the Subscriber IDs in IIV
|
---|
117 | ; Transmission Queue file (#365.1). The calling program is to address
|
---|
118 | ; the blank Sub IDs and make sure the data extract does not exceed the
|
---|
119 | ; max extract number.
|
---|
120 | ;
|
---|
121 | ; PIEN - Payer's IEN (file 365.12)
|
---|
122 | ; DFN - Patient's IEN (file 2)
|
---|
123 | ; SIDARRAY - Local array passed by reference. This function returns
|
---|
124 | ; the array populated with the possible Subscriber IDs for
|
---|
125 | ; that patient/payer combination.
|
---|
126 | ; FRESHDT - Freshness date used for checking last verified condition
|
---|
127 | ;
|
---|
128 | ; Logic to follow:
|
---|
129 | ;
|
---|
130 | ; Id. Req.| Use SSN | Sub ID|Action|
|
---|
131 | ; Sub ID | as Sub ID| found | # | Create
|
---|
132 | ; ________|__________|_______|______|________
|
---|
133 | ; YES YES YES 1 1 Identification TQ entry w/ SSN
|
---|
134 | ; as Sub ID, & 1 Iden. TQ entry for
|
---|
135 | ; each unique old Sub ID
|
---|
136 | ; YES YES NO 2 1 Iden. TQ entry, use SSN as Sub ID
|
---|
137 | ; YES NO YES 3 1 Iden. TQ entry for each unique
|
---|
138 | ; old Sub ID
|
---|
139 | ; YES NO NO 4 No TQ entries (may flag as error)
|
---|
140 | ; NO NO YES 5 1 Iden. TQ entry w/ blank Sub ID,
|
---|
141 | ; & 1 Iden. TQ entry for each unique
|
---|
142 | ; old Sub ID
|
---|
143 | ; NO NO NO 6 1 Iden. TQ entry w/ blank Sub ID
|
---|
144 | ; NO YES YES 7 1 Iden. TQ entry w/ blank Sub ID,
|
---|
145 | ; & 1 Iden. TQ entry w/ SSN as Sub
|
---|
146 | ; ID, & 1 Iden. TQ entry for each
|
---|
147 | ; unique old Sub ID
|
---|
148 | ; NO YES NO 8 2 Iden. TQ entries, 1 w/ SSN as Sub
|
---|
149 | ; ID and other w/ blank Sub ID
|
---|
150 | ;
|
---|
151 | N SIDACT,SID,APPIEN,SIDSTR,SIDREQ,SIDSSN,SSN,INSSTR,INSSTR1,INREC
|
---|
152 | N SYMBOL,SUBID,SUBIDS,SIDCNT,MVER,VFLG
|
---|
153 | ;
|
---|
154 | S FRESHDT=$G(FRESHDT),VFLG=0
|
---|
155 | S APPIEN=$$PYRAPP^IBCNEUT5("IIV",PIEN)
|
---|
156 | S SIDSTR=$G(^IBE(365.12,PIEN,1,APPIEN,0))
|
---|
157 | S SIDREQ=$P(SIDSTR,U,8)
|
---|
158 | S SIDSSN=$P(SIDSTR,U,9)
|
---|
159 | S INSSTR="",(SID,SIDCNT)=0,INREC=$O(^DPT(DFN,.312,0)) S:'INREC INREC=1
|
---|
160 | ;
|
---|
161 | I $G(^DPT(DFN,.312,INREC,0)) F D Q:'INREC!VFLG
|
---|
162 | . S INSSTR=$G(^DPT(DFN,.312,INREC,0))
|
---|
163 | . S INSSTR1=$G(^DPT(DFN,.312,INREC,1))
|
---|
164 | . S SYMBOL=$$INSERROR^IBCNEUT3("I",+INSSTR)
|
---|
165 | . I $P(SYMBOL,U)="" D ; no IIV related error w/ ins. company
|
---|
166 | .. I PIEN'=$P(SYMBOL,U,2) Q ; wrong payer ien
|
---|
167 | .. S SUBID=$P(INSSTR,U,2)
|
---|
168 | .. I SUBID="" Q ; missing Subscriber ID
|
---|
169 | .. S MVER=$P(INSSTR1,U,3) ; last verified date
|
---|
170 | .. I MVER'="",FRESHDT'="",MVER>FRESHDT S VFLG=1 Q ; verified recently
|
---|
171 | .. S SUBIDS=$$STRIP(SUBID,,DFN)
|
---|
172 | .. I $D(SIDARRAY(SUBIDS_"_")) Q ; already in the array
|
---|
173 | .. S SIDARRAY(SUBIDS_"_"_INREC)="",SID=1,SIDCNT=SIDCNT+1
|
---|
174 | . S INREC=$O(^DPT(DFN,.312,INREC))
|
---|
175 | ;
|
---|
176 | I VFLG K SIDARRAY S SIDCNT=0,SIDACT=4 G SIDCK2X
|
---|
177 | I SID,SIDREQ,SIDSSN S SIDACT=1 D SSN(DFN) G SIDCK2X
|
---|
178 | I 'SID,SIDREQ,SIDSSN S SIDACT=2 D SSN(DFN) G SIDCK2X
|
---|
179 | I SID,SIDREQ,'SIDSSN S SIDACT=3 G SIDCK2X
|
---|
180 | I 'SID,SIDREQ,'SIDSSN S SIDACT=4 G SIDCK2X
|
---|
181 | I SID,'SIDREQ,'SIDSSN S SIDACT=5 G SIDCK2X
|
---|
182 | I 'SID,'SIDREQ,'SIDSSN S SIDACT=6 G SIDCK2X
|
---|
183 | I SID,'SIDREQ,SIDSSN S SIDACT=7 D SSN(DFN) G SIDCK2X
|
---|
184 | I 'SID,'SIDREQ,SIDSSN S SIDACT=8 D SSN(DFN) G SIDCK2X
|
---|
185 | ;
|
---|
186 | SIDCK2X ; EXIT POINT
|
---|
187 | ;
|
---|
188 | Q SIDACT_U_SIDCNT
|
---|
189 | ;
|
---|