[613] | 1 | IBCNEDE1 ;DAOU/DAC - IIV INSURANCE BUFFER EXTRACT ;04-JUN-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 | ;**Program Description**
|
---|
| 6 | ; This routine loops through the insurance buffer and
|
---|
| 7 | ; creates IIV transaction queue entries when approriate.
|
---|
| 8 | ; Periodically check for stop request for background task
|
---|
| 9 | ;
|
---|
| 10 | Q ; no direct calls allowed
|
---|
| 11 | ;
|
---|
| 12 | EN ; Loop through designated cross-references for updates
|
---|
| 13 | ; Insurance Buffer Extract
|
---|
| 14 | ;
|
---|
| 15 | N TODAYSDT,FRESHDAY,LOOPDT,IEN,OVRFRESH,FRESHDT
|
---|
| 16 | N DFN,PDOD,SRVICEDT,VERIFDDT,PAYERSTR,PAYERID,SYMBOL,PAYRNAME
|
---|
| 17 | N PIEN,PNIEN,TQIEN,TRIEN,TRSRVCDT,TQCRTDT,TRANSNO,DISYS
|
---|
| 18 | N ORIGINSR,ORGRPSTR,ORGRPNUM,ORGRPNAM,ORGSUBCR
|
---|
| 19 | N MAXCNT,CNT,ISYMBOLM,DATA1,DATA2,ORIG,SETSTR,ISYMBOL,IBCNETOT
|
---|
| 20 | N SIDDATA,SID,SIDACT,BSID,FDA,PASSBUF,SCNT5,SIDCNT,SIDARRAY
|
---|
| 21 | N TQDT,TQIENS,TQOK,STATIEN
|
---|
| 22 | ;
|
---|
| 23 | S SETSTR=$$SETTINGS^IBCNEDE7(1) ; Returns buffer extract settings
|
---|
| 24 | I 'SETSTR Q ; Quit if extract is not active
|
---|
| 25 | S MAXCNT=$P(SETSTR,U,4) ; Max # TQ entries that may be created
|
---|
| 26 | S:MAXCNT="" MAXCNT=9999999999
|
---|
| 27 | ;
|
---|
| 28 | S FRESHDAY=$P($G(^IBE(350.9,1,51)),U,1) ; System freshness days
|
---|
| 29 | ;
|
---|
| 30 | S CNT=0 ; Initialize count of TQ entries created
|
---|
| 31 | S IBCNETOT=0 ; Initialize count for periodic TaskMan check
|
---|
| 32 | ;
|
---|
| 33 | S LOOPDT="" ; Date used to loop throught the IB global
|
---|
| 34 | F S LOOPDT=$O(^IBA(355.33,"AEST","E",LOOPDT)) Q:LOOPDT=""!(CNT=MAXCNT) D Q:$G(ZTSTOP)
|
---|
| 35 | . S IEN=""
|
---|
| 36 | . F S IEN=$O(^IBA(355.33,"AEST","E",LOOPDT,IEN)) Q:IEN=""!(CNT=MAXCNT) D Q:$G(ZTSTOP)
|
---|
| 37 | .. ; Update count for periodic check
|
---|
| 38 | .. S IBCNETOT=IBCNETOT+1
|
---|
| 39 | .. ; Check for request to stop background job, periodically
|
---|
| 40 | .. I $D(ZTQUEUED),IBCNETOT#100=0,$$S^%ZTLOAD() S ZTSTOP=1 Q
|
---|
| 41 | .. ;
|
---|
| 42 | .. ; Get symbol, if symbol'=" " OR "!" then quit
|
---|
| 43 | .. S ISYMBOL=$$SYMBOL^IBCNBLL(IEN) ; Insurance buffer symbol
|
---|
| 44 | .. I (ISYMBOL'=" ")&(ISYMBOL'="!") Q
|
---|
| 45 | .. ;
|
---|
| 46 | .. ; Get the IIV STATUS IEN and quit for response related errors
|
---|
| 47 | .. S STATIEN=+$P($G(^IBA(355.33,IEN,0)),U,12)
|
---|
| 48 | .. I ",11,12,15,"[(","_STATIEN_",") Q ; Prevent update for response errors
|
---|
| 49 | .. ;
|
---|
| 50 | .. S OVRFRESH=$P($G(^IBA(355.33,IEN,0)),U,13) ; Freshness OvrRd flag
|
---|
| 51 | .. S DFN=$P($G(^IBA(355.33,IEN,60)),U,1) ; Patient DFN
|
---|
| 52 | .. Q:DFN=""
|
---|
| 53 | .. I $P($G(^DPT(DFN,0)),U,21) Q ; Exclude if test patient
|
---|
| 54 | .. ;
|
---|
| 55 | .. S PDOD=$P($G(^DPT(DFN,.35)),U,1)\1 ; Patient's date of death
|
---|
| 56 | .. S SRVICEDT=DT I PDOD S SRVICEDT=PDOD ; Service Date
|
---|
| 57 | .. S FRESHDT=$$FMADD^XLFDT(SRVICEDT,-FRESHDAY)
|
---|
| 58 | .. S PAYERSTR=$$INSERROR^IBCNEUT3("B",IEN) ; Payer String
|
---|
| 59 | .. S PAYERID=$P(PAYERSTR,U,3),PIEN=$P(PAYERSTR,U,2) ; Payer ID
|
---|
| 60 | .. S SYMBOL=+PAYERSTR ; Payer Symbol
|
---|
| 61 | .. ;
|
---|
| 62 | .. ; If payer symbol is returned set symbol in Ins. Buffer and quit
|
---|
| 63 | .. I SYMBOL D BUFF^IBCNEUT2(IEN,SYMBOL) Q
|
---|
| 64 | .. ;
|
---|
| 65 | .. D CLEAR^IBCNEUT4(IEN) ; remove any existing symbol
|
---|
| 66 | .. ;
|
---|
| 67 | .. ; If no payer ID or no payer IEN is returned quit
|
---|
| 68 | .. I (PAYERID="")!('PIEN) Q
|
---|
| 69 | .. ;
|
---|
| 70 | .. ; Update service date and freshness date based on payer's allowed
|
---|
| 71 | .. ; date range
|
---|
| 72 | .. D UPDDTS^IBCNEDE6(PIEN,.SRVICEDT,.FRESHDT)
|
---|
| 73 | .. ;
|
---|
| 74 | .. ; Update service dates for inquiries to be transmitted
|
---|
| 75 | .. D TQUPDSV^IBCNEUT5(DFN,PIEN,SRVICEDT)
|
---|
| 76 | .. ;
|
---|
| 77 | .. ; If freshness overide flag is set, file to TQ and quit
|
---|
| 78 | .. I OVRFRESH=1 D Q
|
---|
| 79 | ... NEW DIE,X,Y,DISYS
|
---|
| 80 | ... S FDA(355.33,IEN_",",.13)="" D FILE^DIE("","FDA") K FDA
|
---|
| 81 | ... D TQ
|
---|
| 82 | .. ;
|
---|
| 83 | .. ; If ADDTQ^IBCNEUT5 is 1 set TQ, otherwise stop processing that entry
|
---|
| 84 | .. I '$$ADDTQ^IBCNEUT5(DFN,PIEN,SRVICEDT,FRESHDAY) Q
|
---|
| 85 | .. ; Check the existing TQ entries to confirm that this buffer IEN is
|
---|
| 86 | .. ; not included
|
---|
| 87 | .. S (TQDT,TQIENS)="",TQOK=1
|
---|
| 88 | .. F S TQDT=$O(^IBCN(365.1,"AD",DFN,PIEN,TQDT)) Q:'TQDT!'TQOK D
|
---|
| 89 | ... F S TQIENS=$O(^IBCN(365.1,"AD",DFN,PIEN,TQDT,TQIENS)) Q:'TQIENS!'TQOK D
|
---|
| 90 | .... I $P($G(^IBCN(365.1,TQIENS,0)),U,5)=IEN S TQOK=0 Q
|
---|
| 91 | .. I TQOK D TQ
|
---|
| 92 | Q
|
---|
| 93 | TQ ; Determine how many entries to create in the TQ file and set entries
|
---|
| 94 | ;
|
---|
| 95 | S BSID=$P($G(^IBA(355.33,IEN,60)),U,4) ; Subscriber ID from buffer
|
---|
| 96 | K SIDARRAY
|
---|
| 97 | S SIDDATA=$$SIDCHK^IBCNEDE5(PIEN,DFN,BSID,.SIDARRAY,FRESHDT) ;determine rules to follow
|
---|
| 98 | S SIDACT=$P(SIDDATA,U,1)
|
---|
| 99 | S SIDCNT=$P(SIDDATA,U,2) ;Pull cnt of SIDs - shd be 1
|
---|
| 100 | ;
|
---|
| 101 | I SIDACT=3 D BUFF^IBCNEUT2(IEN,18) Q ; update buffer w/ bang & quit
|
---|
| 102 | S SCNT5=$S(SIDACT=5:1,1:0)
|
---|
| 103 | I CNT+SCNT5+SIDCNT>MAXCNT Q
|
---|
| 104 | S SID=""
|
---|
| 105 | F S SID=$O(SIDARRAY(SID)) Q:SID="" D
|
---|
| 106 | . I SIDACT=5 D SET(IEN,OVRFRESH,0,$P(SID,"_")) Q ; set TQ w/o 'Pass Buffer' flag
|
---|
| 107 | . D SET(IEN,OVRFRESH,1,$P(SID,"_")) ; set TQ w/ 'Pass Buffer' flag
|
---|
| 108 | I SIDACT=4!(SIDACT=5) D SET(IEN,OVRFRESH,1,"") ; set TQ w/ 'Pass Buffer' flag
|
---|
| 109 | Q
|
---|
| 110 | ;
|
---|
| 111 | RET ; Record Retrieval - Insurance Buffer
|
---|
| 112 | ;
|
---|
| 113 | S ORIGINSR=$P($G(^IBA(355.33,IEN,20)),U,1) ;Original ins. co.
|
---|
| 114 | S ORGRPSTR=$G(^IBA(355.33,IEN,40)) ; Original group string
|
---|
| 115 | S ORGRPNUM=$P(ORGRPSTR,U,3) ;Original group number
|
---|
| 116 | S ORGRPNAM=$P(ORGRPSTR,U,2) ;Original group name
|
---|
| 117 | S ORGSUBCR=$P($G(^IBA(355.33,IEN,60)),U,4) ; Original subscriber
|
---|
| 118 | ;
|
---|
| 119 | Q
|
---|
| 120 | ;
|
---|
| 121 | SET(BUFFIEN,OVRFRESH,PASSBUF,SID1) ; Set data and check if set already
|
---|
| 122 | D RET
|
---|
| 123 | ;
|
---|
| 124 | ; The hard coded '1' in the 3rd piece of DATA1 sets the Transmission
|
---|
| 125 | ; status of file 365.1 to "Ready to Transmit"
|
---|
| 126 | S DATA1=DFN_U_PIEN_U_1_U_$G(BUFFIEN)_U_SID1_U_FRESHDT_U_PASSBUF ; SETTQ parameter 1
|
---|
| 127 | ;
|
---|
| 128 | ;The hardcoded '1' in the 1st piece of DATA2 is the value to tell
|
---|
| 129 | ; the file 365.1 that it is the buffer extract.
|
---|
| 130 | S DATA2=1_U_"V"_U_SRVICEDT_U_"" ; SETTQ parameter 2
|
---|
| 131 | ;
|
---|
| 132 | S ORIG=ORIGINSR_U_ORGRPNUM_U_ORGRPNAM_U_ORGSUBCR ; SETTQ parameter 3
|
---|
| 133 | S TQIEN=$$SETTQ^IBCNEDE7(DATA1,DATA2,ORIG,$G(OVRFRESH)) ; File TQ entry
|
---|
| 134 | I TQIEN'="" S CNT=CNT+1 ; If filed increment count
|
---|
| 135 | ;
|
---|
| 136 | Q
|
---|