[613] | 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 | ;
|
---|