1 | BPSOSQL ;BHAM ISC/FCS/DRS/FLS - Process responses ;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 | ;
|
---|
5 | Q
|
---|
6 | ;
|
---|
7 | ; ONE(CLAIMIEN,RESPIEN)
|
---|
8 | ; Process the Response for the claim. Loop through the
|
---|
9 | ; transaction associated with the claim and call RESP1
|
---|
10 | ; RESP1
|
---|
11 | ; The real work of response handling for one IEN59 is in here
|
---|
12 | ; RESPBAD
|
---|
13 | ; Branch from RESP1 if there is no response value in the
|
---|
14 | ; prescription
|
---|
15 | ;
|
---|
16 | ; ONE - Both the claim and response record are correct and complete
|
---|
17 | ; Now update all of the prescription records affected by them.
|
---|
18 | ONE(CLAIMIEN,RESPIEN) ;
|
---|
19 | N ISREVERS,INDEX,IEN59
|
---|
20 | S ISREVERS=$$ISREVERS^BPSOSU(CLAIMIEN)
|
---|
21 | S INDEX=$S(ISREVERS:"AER",1:"AE")
|
---|
22 | S IEN59=0
|
---|
23 | F S IEN59=$O(^BPST(INDEX,CLAIMIEN,IEN59)) Q:IEN59="" D
|
---|
24 | . D RESP1(IEN59,ISREVERS,CLAIMIEN,RESPIEN)
|
---|
25 | Q
|
---|
26 | ;
|
---|
27 | ; RESP1 - Process each transaction associated with the claim
|
---|
28 | RESP1(IEN59,REVERSAL,CLAIMIEN,RESPIEN) ; called from ONE
|
---|
29 | N ERROR,ERRTXT,X,MSG
|
---|
30 | ;
|
---|
31 | ; Store pointer to response
|
---|
32 | N DIE,DA,DR
|
---|
33 | S DIE=9002313.59,DA=IEN59
|
---|
34 | S DR=$S(REVERSAL:402,1:4)_"////"_RESPIEN
|
---|
35 | D ^DIE
|
---|
36 | ;
|
---|
37 | ; Update the status
|
---|
38 | D SETSTAT^BPSOSU(IEN59,90) ; "Processing response"
|
---|
39 | ;
|
---|
40 | ; Get Position and log it
|
---|
41 | N POSITION S POSITION=$P(^BPST(IEN59,0),U,9)
|
---|
42 | I REVERSAL S POSITION=1 ; but reversals have only 1 transaction
|
---|
43 | ;
|
---|
44 | ;
|
---|
45 | S MSG=$T(+0)_"-Processing "
|
---|
46 | I REVERSAL S MSG=MSG_"Reversal "
|
---|
47 | S MSG=MSG_"Response #"_RESPIEN_" for Claim #"_CLAIMIEN_" and position "_POSITION
|
---|
48 | D LOG^BPSOSL(IEN59,MSG)
|
---|
49 | ;
|
---|
50 | ; If the Response Status is missing for the prescription, quit with error
|
---|
51 | I '$D(^BPSR(RESPIEN,1000,POSITION,500)) D G RESPBAD
|
---|
52 | . S ERROR=901,ERRTXT="Corrupted response `"_RESPIEN
|
---|
53 | ;
|
---|
54 | ; Get the Respose Status for the prescription and update the statistics
|
---|
55 | N RESP S RESP=$P(^BPSR(RESPIEN,1000,POSITION,500),U)
|
---|
56 | D INCSTAT^BPSOSUD("R",$S(RESP="R"&REVERSAL:7,RESP="R":2,RESP="P":3,RESP="D":4,RESP="C":5,RESP="A":6,1:19))
|
---|
57 | ;
|
---|
58 | ; Log Response and if Payable, Amount Paid
|
---|
59 | S MSG=$T(+0)_"-Response = "_RESP
|
---|
60 | I RESP="P" S MSG=MSG_"-$"_$$INSPAID1^BPSOS03(RESPIEN,POSITION)
|
---|
61 | D LOG^BPSOSL(IEN59,MSG)
|
---|
62 | ;
|
---|
63 | ; If the claims was rejected, log the reject reason
|
---|
64 | I RESP="R" D ; rejected, give rejection reasons
|
---|
65 | . N J S J=0 F S J=$O(^BPSR(RESPIEN,1000,POSITION,511,J)) Q:'J D
|
---|
66 | .. N R S R=$P($G(^BPSR(RESPIEN,1000,POSITION,511,J,0)),U)
|
---|
67 | .. N X
|
---|
68 | .. I R]"" D
|
---|
69 | ... S X=$O(^BPSF(9002313.93,"B",R,0))
|
---|
70 | ... I X]"" S X=$P($G(^BPSF(9002313.93,X,0)),U,2)
|
---|
71 | .. E S X=""
|
---|
72 | .. D LOG^BPSOSL(IEN59,"Reject Code: "_R_" - "_X)
|
---|
73 | . ;
|
---|
74 | . ; If there are reject codes and the claim is not a reversal, synch reject codes
|
---|
75 | . ; with Outpatient Pharmacy
|
---|
76 | . I 'REVERSAL D DURSYNC^BPSECMP2(IEN59)
|
---|
77 | ;
|
---|
78 | ; Get response messages and log them.
|
---|
79 | S X=$G(^BPSR(RESPIEN,504))
|
---|
80 | I X]"" D LOG^BPSOSL(IEN59,"Response Message: "_X)
|
---|
81 | S X=$G(^BPSR(RESPIEN,1000,POSITION,504))
|
---|
82 | I X]"" D LOG^BPSOSL(IEN59,"Response Message: "_X)
|
---|
83 | S X=$G(^BPSR(RESPIEN,1000,POSITION,526))
|
---|
84 | I X]"" D LOG^BPSOSL(IEN59,"Response Message: "_X)
|
---|
85 | ;
|
---|
86 | ; Get Payer Sheet and Payer Sheet name
|
---|
87 | N PAYSH,PAYSHNM
|
---|
88 | S PAYSH=$$PAYERSH^BPSOSQF(IEN59),PAYSHNM=$$GET1^DIQ(9002313.92,PAYSH_",",.01,"E")
|
---|
89 | ;
|
---|
90 | ; Check if the payer should go to sleep based on the reject codes
|
---|
91 | I $$REJSLEEP^BPSOSQ4(RESPIEN,POSITION) D ; ins. asleep: want to retry
|
---|
92 | . D SETSTAT^BPSOSU(IEN59,31)
|
---|
93 | . N RETRY
|
---|
94 | . S RETRY=$$INCSLEEP^BPSOSQ4(IEN59,PAYSH)
|
---|
95 | . D LOG^BPSOSL(IEN59,$T(+0)_"-Insurer asleep; retry scheduled for "_RETRY_" for "_$G(PAYSHNM))
|
---|
96 | E D ; else: a normal kind of response, so we are done
|
---|
97 | . D CLRSLEEP^BPSOSQ4(IEN59,PAYSH)
|
---|
98 | . N RESULT
|
---|
99 | . I REVERSAL S RESULT="Reversal "
|
---|
100 | . S RESULT=$G(RESULT)_$S(RESP="R":"Rejected",RESP="P":"Payable",RESP="D":"Duplicate",RESP="C":"Captured",RESP="A":"Accepted",1:"Completed")
|
---|
101 | . D SETRESU^BPSOSU(IEN59,0,RESULT)
|
---|
102 | . D SETSTAT^BPSOSU(IEN59,99) ; "Done"
|
---|
103 | Q
|
---|
104 | ;
|
---|
105 | RESPBAD ; corrupted response escape from RESP1 - reached by a GOTO from RESP
|
---|
106 | ; Log the error
|
---|
107 | D ERROR^BPSOSU($T(+0),IEN59,$G(ERROR),$G(ERRTXT))
|
---|
108 | Q
|
---|