source: FOIAVistA/tag/r/E_CLAIMS_MGMT_ENGINE-BPS/BPSOSQL.m@ 628

Last change on this file since 628 was 628, checked in by George Lilly, 14 years ago

initial load of FOIAVistA 6/30/08 version

File size: 3.9 KB
Line 
1BPSOSQL ;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.
18ONE(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
28RESP1(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 ;
105RESPBAD ; 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
Note: See TracBrowser for help on using the repository browser.