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