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