| 1 | BPSOSQF ;BHAM ISC/FCS/DRS/FLS - Insurer asleep - status 31 ;06/01/2004
 | 
|---|
| 2 |  ;;1.0;E CLAIMS MGMT ENGINE;**1,5**;JUN 2004;Build 45
 | 
|---|
| 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ; Check for insurer asleep claims
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 | STATUS31 ;EP - BPSOSQ2
 | 
|---|
| 9 |  ; Situation:  you have 1 or 2 or maybe 200 claims in status 31,
 | 
|---|
| 10 |  ; because we've determined that the insurer is asleep.
 | 
|---|
| 11 |  ; change at most one claim per insurer to status 30, to let it
 | 
|---|
| 12 |  ; go through and try again.  But if the insurer is awake for sure,
 | 
|---|
| 13 |  ; let all of the claims for that insurer go on through.
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  ; Initialization
 | 
|---|
| 16 |  N RETRY,PROBER,IEN59,PAYERSH,X
 | 
|---|
| 17 |  S IEN59=""
 | 
|---|
| 18 |  K ^TMP("BPSOSQF",$J) ; build ^TMP("BPSOSQF",$J,PAYERSH,IEN59)=""
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  ; Make sure we can get the lock
 | 
|---|
| 21 |  I '$$LOCK59^BPSOSQ2(31) Q
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 |  ; Loop through transaction that are 31 per cent
 | 
|---|
| 24 |  F  S IEN59=$$NEXT59^BPSOSQ2(IEN59,31) Q:'IEN59  D
 | 
|---|
| 25 |  . ; if $$NEXT59() returned us an IEN59, then the waiting time
 | 
|---|
| 26 |  . ; has expired - or better yet, the insurer has awakened
 | 
|---|
| 27 |  . ;
 | 
|---|
| 28 |  . ; Get the payer sheet for the transaction
 | 
|---|
| 29 |  . S PAYERSH=$$PAYERSH(IEN59)
 | 
|---|
| 30 |  . I PAYERSH="" D LOG^BPSOSL(IEN59,$T(+0)_"-No payersheet was found") Q
 | 
|---|
| 31 |  . ;
 | 
|---|
| 32 |  . ; Get Retry Time and Prober
 | 
|---|
| 33 |  . S X=$G(^BPSF(9002313.92,PAYERSH,1))
 | 
|---|
| 34 |  . S RETRY=$P(X,U,12),PROBER=$P(X,U,11)
 | 
|---|
| 35 |  . ;
 | 
|---|
| 36 |  . ; If still in wait, but wait expired, just allow one claim thru.
 | 
|---|
| 37 |  . ; But if wait has been canceled - that is, we had a successful
 | 
|---|
| 38 |  . ; transmit, meaning the insurer has awakened - then let them all
 | 
|---|
| 39 |  . ; go through to status 30.
 | 
|---|
| 40 |  . ; if somehow the prober became complete, without clearing 101;6
 | 
|---|
| 41 |  . ; (maybe this happens if cancellation takes place?)
 | 
|---|
| 42 |  . I PROBER D
 | 
|---|
| 43 |  .. S X=$P($G(^BPST(PROBER,0)),U,2)
 | 
|---|
| 44 |  .. I X=99!(X="") S PROBER=""
 | 
|---|
| 45 |  . I RETRY,PROBER,PROBER'=IEN59 Q  ; only prober can go thru during wait
 | 
|---|
| 46 |  . ;
 | 
|---|
| 47 |  . ; Don't we need to compare RETRY time to the current time?
 | 
|---|
| 48 |  . I RETRY S $P(^BPSF(9002313.92,PAYERSH,1),U,11)=IEN59,PROBER=IEN59
 | 
|---|
| 49 |  . S ^TMP("BPSOSQF",$J,PAYERSH,IEN59)=""
 | 
|---|
| 50 |  D UNLOCK59^BPSOSQ2(31)
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  ; Loop through payer sheet and transactions and change status to 30%
 | 
|---|
| 53 |  S PAYERSH="" F  S PAYERSH=$O(^TMP("BPSOSQF",$J,PAYERSH)) Q:'PAYERSH  D
 | 
|---|
| 54 |  . S IEN59="" F  S IEN59=$O(^TMP("BPSOSQF",$J,PAYERSH,IEN59)) Q:'IEN59  D
 | 
|---|
| 55 |  . . D SETSTAT^BPSOSU(IEN59,30) ; reset to status 30
 | 
|---|
| 56 |  . . D LOG^BPSOSL(IEN59,$T(+0)_"-Retrying Asleep Claim.  Prober? "_$S(PROBER=IEN59:"YES",1:"NO"))
 | 
|---|
| 57 |  Q
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 |  ; Function to get the payer sheet for a given transaction
 | 
|---|
| 60 | PAYERSH(IEN59) ;
 | 
|---|
| 61 |  N POS
 | 
|---|
| 62 |  S POS=$P($G(^BPST(IEN59,9)),U,1)
 | 
|---|
| 63 |  I POS="" Q ""
 | 
|---|
| 64 |  Q $$GET1^DIQ(9002313.59902,POS_","_IEN59_",",902.02,"I")
 | 
|---|