| [613] | 1 | IBCNEDE6 ;DAOU/DAC - IIV DATA EXTRACTS ;15-OCT-2002 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**184,271,345**;21-MAR-94;Build 28 | 
|---|
|  | 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | Q    ; no direct calls allowed | 
|---|
|  | 6 | ; | 
|---|
|  | 7 | INAC(IBCNCNT,MAXNUM,IBDDI,SRVICEDT,FDAYS,APPTFLG) ;Get Inactive Insurances | 
|---|
|  | 8 | ; DAOU/BHS - 10/15/2002 - Replaced VRFDT w/ FDAYS (fresh days value) | 
|---|
|  | 9 | ; APPTFLG - Appt extract flag ONLY set from IBCNEDE2 - optional 0/1 | 
|---|
|  | 10 | ; | 
|---|
|  | 11 | NEW IDATA,INCP,IEN,TQIEN,INS,INACT,DATA1,DATA2,FRESHDT | 
|---|
|  | 12 | NEW PAYER,PAYERID,RESULT,FOUND,SIDARRAY,SIDACT,SIDCNT,SID,INREC | 
|---|
|  | 13 | ; | 
|---|
|  | 14 | ; Need FOUND to avoid the creation of a no payer inquiry the day after | 
|---|
|  | 15 | ; the original inquiry for pre-reg (appt) extract and no insurance | 
|---|
|  | 16 | ; extract was created. | 
|---|
|  | 17 | S FOUND=0 ; set flag to 1 if potential inquiry was found | 
|---|
|  | 18 | ; | 
|---|
|  | 19 | S APPTFLG=$G(APPTFLG) | 
|---|
|  | 20 | S IDATA=$G(^IBE(350.9,1,51)) | 
|---|
|  | 21 | S INACT=$P(IDATA,U,8) | 
|---|
|  | 22 | S FRESHDT=$$FMADD^XLFDT(SRVICEDT,-FDAYS) | 
|---|
|  | 23 | ; | 
|---|
|  | 24 | ;  If the search for inactive insurances is 'No', quit | 
|---|
|  | 25 | I 'INACT G INACX | 
|---|
|  | 26 | ; | 
|---|
|  | 27 | S INCP="" F  S INCP=$O(IBDDI(INCP)) Q:INCP=""  D  Q:IBCNCNT'<MAXNUM | 
|---|
|  | 28 | . S IEN="" F  S IEN=$O(^DPT(DFN,.312,"B",INCP,IEN)) Q:IEN=""  D | 
|---|
|  | 29 | .. S INS=$P(^DPT(DFN,.312,IEN,0),U) | 
|---|
|  | 30 | .. ; | 
|---|
|  | 31 | .. ;Check for Medicare/Medicaid | 
|---|
|  | 32 | .. I $$EXCLUDE^IBCNEUT4($P($G(^DIC(36,INS,0)),U)) Q | 
|---|
|  | 33 | .. ; | 
|---|
|  | 34 | .. ;  Check for insurance company payer, etc. | 
|---|
|  | 35 | .. S RESULT=$$INSERROR^IBCNEUT3("I",INS) | 
|---|
|  | 36 | .. I $P(RESULT,U)'="" Q | 
|---|
|  | 37 | .. ; | 
|---|
|  | 38 | .. S PAYER=$P(RESULT,U,2),PAYERID=$P(RESULT,U,3) | 
|---|
|  | 39 | .. I ('PAYER)!(PAYERID="") Q | 
|---|
|  | 40 | .. ; | 
|---|
|  | 41 | .. S FOUND=1  ; potential inquiry | 
|---|
|  | 42 | .. ; | 
|---|
|  | 43 | .. ; Update service date based on payer's allowed range | 
|---|
|  | 44 | .. D UPDDTS(PAYER,.SRVICEDT,.FRESHDT) | 
|---|
|  | 45 | .. ;  update service dates for inquiries to be transmitted | 
|---|
|  | 46 | .. D TQUPDSV^IBCNEUT5(DFN,PAYER,SRVICEDT) | 
|---|
|  | 47 | .. ;  check for outstanding/current entries in File 356.1 | 
|---|
|  | 48 | .. I '$$ADDTQ^IBCNEUT5(DFN,PAYER,SRVICEDT,FDAYS) Q | 
|---|
|  | 49 | .. ; | 
|---|
|  | 50 | .. ; Call function to set IIV TRANSMISSION QUEUE file #365.1 | 
|---|
|  | 51 | .. ; | 
|---|
|  | 52 | .. K SIDARRAY | 
|---|
|  | 53 | .. S SIDACT=$$SIDCHK2^IBCNEDE5(DFN,PAYER,.SIDARRAY,FRESHDT) | 
|---|
|  | 54 | .. S SIDCNT=$P(SIDACT,U,2),SIDACT=$P(SIDACT,U) | 
|---|
|  | 55 | .. ;  Add to SIDCNT to compensate for a TQ entry w/ blank Sub ID | 
|---|
|  | 56 | .. I SIDACT=5!(SIDACT=6)!(SIDACT=7)!(SIDACT=8) S SIDCNT=SIDCNT+1 | 
|---|
|  | 57 | .. I IBCNCNT+SIDCNT>MAXNUM S IBCNCNT=MAXNUM Q  ; see if TQ entries will exceed MAXNUM | 
|---|
|  | 58 | .. S SID="" F  S SID=$O(SIDARRAY(SID)) Q:SID=""  D | 
|---|
|  | 59 | ... S INREC=$P(SID,"_",2)   ; which patient ins rec ID is from | 
|---|
|  | 60 | ... D INACSET($P(SID,"_"),INREC) | 
|---|
|  | 61 | ... ; | 
|---|
|  | 62 | .. ;  Create TQ entry w/ blank Sub ID | 
|---|
|  | 63 | .. I (SIDACT=5)!(SIDACT=6)!(SIDACT=7)!(SIDACT=8) S SID="" D INACSET("","") | 
|---|
|  | 64 | K SIDARRAY | 
|---|
|  | 65 | INACX ; | 
|---|
|  | 66 | Q FOUND | 
|---|
|  | 67 | ; | 
|---|
|  | 68 | INACSET(SID,INREC) ; INAC. SET | 
|---|
|  | 69 | ; The hard coded '1' in the 3rd piece of DATA1 sets the Transmission | 
|---|
|  | 70 | ; status of file 365.1 to "Ready to Transmit" | 
|---|
|  | 71 | N FRESH | 
|---|
|  | 72 | S FRESH=$$FMADD^XLFDT(SRVICEDT,-FDAYS) | 
|---|
|  | 73 | S DATA1=DFN_U_PAYER_U_1_U_""_U_SID_U_FRESH | 
|---|
|  | 74 | ; | 
|---|
|  | 75 | ; The hardcoded 1st piece of DATA2 tells file 365.1 which extract | 
|---|
|  | 76 | ; it is. | 
|---|
|  | 77 | I APPTFLG S DATA2=2    ; appt extract IBCNEDE2 | 
|---|
|  | 78 | I 'APPTFLG S DATA2=4   ; no ins extract IBCNEDE4 | 
|---|
|  | 79 | S DATA2=DATA2_U_"I"_U_SRVICEDT_U_$G(INREC) | 
|---|
|  | 80 | ; | 
|---|
|  | 81 | S TQIEN=$$SETTQ^IBCNEDE7(DATA1,DATA2) | 
|---|
|  | 82 | I TQIEN'="" S IBCNCNT=IBCNCNT+1 | 
|---|
|  | 83 | ; | 
|---|
|  | 84 | Q | 
|---|
|  | 85 | ; | 
|---|
|  | 86 | UPDDTS(PIEN,SVDT,FRDT) ;  Update service date and freshness date per payer | 
|---|
|  | 87 | ; date parameters FUTURE SERVICE DAYS (365.121,.14) and PAST SERVICE | 
|---|
|  | 88 | ; DAYS (365.121,.15) | 
|---|
|  | 89 | ; Output: | 
|---|
|  | 90 | ;  SVDT - passed by reference - updates service date | 
|---|
|  | 91 | ;  FRDT - passed by reference - updates freshness date - except for | 
|---|
|  | 92 | ;         INAC where it is optional | 
|---|
|  | 93 | N FDAYS,PDAYS,DIFF,AIEN,DATA,OSVDT,EDTFLG | 
|---|
|  | 94 | ; | 
|---|
|  | 95 | ; Init vars - save original service date to calc diff | 
|---|
|  | 96 | S (FDAYS,PDAYS,EDTFLG)=0,OSVDT=SVDT | 
|---|
|  | 97 | ; Determine Payer App IEN | 
|---|
|  | 98 | S AIEN=$$PYRAPP^IBCNEUT5("IIV",PIEN) | 
|---|
|  | 99 | I AIEN="" Q  ; Quit without changing if app is not defined | 
|---|
|  | 100 | S DATA=$G(^IBE(365.12,PIEN,1,AIEN,0)) | 
|---|
|  | 101 | I DATA="" Q  ; Quit without changing if node is not defined | 
|---|
|  | 102 | S FDAYS=$P(DATA,U,14),PDAYS=$P(DATA,U,15) | 
|---|
|  | 103 | ; DAOU/WCW - Overriding this to allow service date of only today | 
|---|
|  | 104 | ;            for the time being - setting params to 0 | 
|---|
|  | 105 | S FDAYS=0,PDAYS=0 | 
|---|
|  | 106 | ; Process past service days if not null | 
|---|
|  | 107 | I PDAYS'="" D | 
|---|
|  | 108 | . ; If zero, reset to today | 
|---|
|  | 109 | . I PDAYS=0 S SVDT=$$DT^XLFDT,EDTFLG=1 | 
|---|
|  | 110 | . ; If non-zero and service date is earlier than the allowed | 
|---|
|  | 111 | . ;  payer service date range, reset service date to earliest allowed | 
|---|
|  | 112 | . ;  date for the payer | 
|---|
|  | 113 | . I PDAYS,SVDT<$$FMADD^XLFDT($$DT^XLFDT,-PDAYS+1) D | 
|---|
|  | 114 | . . S SVDT=$$FMADD^XLFDT($$DT^XLFDT,-PDAYS+1),EDTFLG=1 | 
|---|
|  | 115 | ; Process future service days if not edited and if not null | 
|---|
|  | 116 | I EDTFLG=0,FDAYS'="" D | 
|---|
|  | 117 | . ; If zero, reset to today | 
|---|
|  | 118 | . I FDAYS=0 S SVDT=$$DT^XLFDT,EDTFLG=1 | 
|---|
|  | 119 | . ; If non-zero and service date is later than the allowed | 
|---|
|  | 120 | . ;  payer service date range, reset service date to latest allowed | 
|---|
|  | 121 | . ;  date for the payer | 
|---|
|  | 122 | . I FDAYS,SVDT>$$FMADD^XLFDT($$DT^XLFDT,FDAYS-1) D | 
|---|
|  | 123 | . . S SVDT=$$FMADD^XLFDT($$DT^XLFDT,FDAYS-1),EDTFLG=1 | 
|---|
|  | 124 | ; | 
|---|
|  | 125 | ; Determine if difference exists | 
|---|
|  | 126 | I EDTFLG,$G(FRDT)'="" S FRDT=$$FMADD^XLFDT(FRDT,$$FMDIFF^XLFDT(SVDT,OSVDT)) | 
|---|
|  | 127 | ; | 
|---|
|  | 128 | Q | 
|---|
|  | 129 | ; | 
|---|
|  | 130 | BLANKTQ(SRVICEDT,FRESHDT,YDAYS,IBCNCNT) ; | 
|---|
|  | 131 | ; This tag is only called from PROCESS^IBCNEDE4 | 
|---|
|  | 132 | ; No new records were created in file 365.1 for this DFN. | 
|---|
|  | 133 | ; Need to check if an inquiry for any payer exists for this DFN within | 
|---|
|  | 134 | ; the freshness period.  If it doesn't exist create a new blank inquiry | 
|---|
|  | 135 | ; | 
|---|
|  | 136 | ; Input | 
|---|
|  | 137 | ;    SRVICEDT - Service Date | 
|---|
|  | 138 | ;    FRESHDT - Freshness Date | 
|---|
|  | 139 | ;    YDAYS - | 
|---|
|  | 140 | ;    IBCNCNT - updated - Counter for the extract | 
|---|
|  | 141 | ; | 
|---|
|  | 142 | I $$TFL^IBCNEDE6(DFN)=0 Q | 
|---|
|  | 143 | ; | 
|---|
|  | 144 | N PAYER,DATA1,DATA2,TQIEN | 
|---|
|  | 145 | ; | 
|---|
|  | 146 | S PAYER=$$FIND1^DIC(365.12,,"X","~NO PAYER") | 
|---|
|  | 147 | ; | 
|---|
|  | 148 | ; Update service date and freshness date based on payer allowed | 
|---|
|  | 149 | ;  date range | 
|---|
|  | 150 | D UPDDTS^IBCNEDE6(PAYER,.SRVICEDT,.FRESHDT) | 
|---|
|  | 151 | ; | 
|---|
|  | 152 | ; Update service dates for inquiries to be transmitted | 
|---|
|  | 153 | D TQUPDSV^IBCNEUT5(DFN,PAYER,SRVICEDT) | 
|---|
|  | 154 | ; | 
|---|
|  | 155 | ; Are we allowed to add it to the TQ file | 
|---|
|  | 156 | I '$$ADDTQ^IBCNEUT5(DFN,PAYER,SRVICEDT,YDAYS,1) G BLANKXT | 
|---|
|  | 157 | ; | 
|---|
|  | 158 | ; The hard coded '1' in the 3rd piece of DATA1 sets the Transmission | 
|---|
|  | 159 | ; status of file 365.1 to "Ready to Transmit" | 
|---|
|  | 160 | S DATA1=DFN_U_PAYER_U_1_U_""_U_""_U_FRESHDT | 
|---|
|  | 161 | ; | 
|---|
|  | 162 | ; The hardcoded '4' in the 1st piece of DATA2 is the value to tell | 
|---|
|  | 163 | ; the file 365.1 that it is the no active insurance extract. | 
|---|
|  | 164 | S DATA2=4_U_"I"_U_SRVICEDT | 
|---|
|  | 165 | ; | 
|---|
|  | 166 | S TQIEN=$$SETTQ^IBCNEDE7(DATA1,DATA2),PAYER="" | 
|---|
|  | 167 | I TQIEN'="" S IBCNCNT=IBCNCNT+1 | 
|---|
|  | 168 | ; | 
|---|
|  | 169 | BLANKXT ; | 
|---|
|  | 170 | Q | 
|---|
|  | 171 | ; | 
|---|
|  | 172 | TFL(DFN) ; Examines treating facility list, | 
|---|
|  | 173 | ; value returned is 1 if patient has visited at least one other site | 
|---|
|  | 174 | N IBC,IBZ,IBS | 
|---|
|  | 175 | D TFL^VAFCTFU1(.IBZ,DFN) Q:-$G(IBZ(1))=1 0 | 
|---|
|  | 176 | S IBS=+$P($$SITE^VASITE,"^",3),(IBZ,IBC)=0 | 
|---|
|  | 177 | ; Look for remote facilities of type VAMC: | 
|---|
|  | 178 | F  S IBZ=$O(IBZ(IBZ)) Q:IBZ<1  I +IBZ(IBZ)>0,+IBZ(IBZ)'=IBS,$P(IBZ(IBZ),U,5)="VAMC" S IBC=1 Q | 
|---|
|  | 179 | Q IBC | 
|---|