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