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