source: WorldVistAEHR/trunk/r/INTEGRATED_BILLING-IB-PRQ--IBD--IBQ--PRQS/IBCE277.m@ 949

Last change on this file since 949 was 623, checked in by George Lilly, 15 years ago

revised back to 6/30/08 version

File size: 9.5 KB
Line 
1IBCE277 ;ALB/TMP - 277 EDI CLAIM STATUS MESSAGE PROCESSING ;15-JUL-98
2 ;;2.0;INTEGRATED BILLING;**137,155**;21-MAR-94
3 Q
4 ; MESSAGE HEADER DATA STRING =
5 ; type of message^msg queue^msg #^bill #^REF NUM/Batch #^date/time
6 ;
7HDR(ENTITY,ENTVAL,IBTYPE,IBD) ;Process header data
8 ; INPUT:
9 ; ENTITY = "BATCH" if batch level message
10 ; "CLAIM" if claim level message
11 ; ENTVAL = batch # or claim #
12 ; IBTYPE = the type of status msg this piece of the message represents
13 ; (837REC1, 837REJ1)
14 ; ^TMP("IBMSGH",$J,0) = header message text
15 ;
16 ; OUTPUT:
17 ; IBD array returned with processed data
18 ; "LINE" = The last line # populated in the message
19 ; "DATE" = Date/Time of status (Fileman format)
20 ; "MRA" = 1 if MRA, 0 if not "X12" = 1 if X12, 0 if not
21 ; "BATCH" = Batch ien for batch level calls
22 ; "SOURCE" = Source of message code^source name, if known
23 ;
24 ; ^TMP("IBMSG",$J,"BATCH",batch #,0)=MESSAGE HEADER DATA STRING
25 ; if called from batch level
26 ; ,"D",0,1)=header record raw data
27 ; ,line #)=batch status message lines
28 ;
29 ; ^TMP("IBMSG",$J,"CLAIM",claim #,0)=MESSAGE HEADER DATA STRING
30 ; if called from claim level
31 ; ,"D",0,1)=header record raw data
32 ; ,line #)=claim status message lines
33 ;
34 N CT,CT1,IBBILL,IBD0,L,LINE,PC,Z,X,Y
35 S IBD0=$G(^TMP("IBMSGH",$J,0)),IBD("LINE")=0
36 Q:IBD0=""
37 S Y=0,X=$$DATE($P(IBD0,U,3))_"@"_$E($P(IBD0,U,4)_"0000",1,4)
38 I X S %DT="XTS" D ^%DT
39 S IBD("DATE")=$S(Y>0:Y,1:"")
40 S IBD("MRA")=$P(IBD0,U,5),IBD("X12")=($P(IBD0,U,2)="X")
41 S IBD("SOURCE")=$P(IBD0,U,12,13)
42 S CT=0
43 ;
44 I ENTITY="BATCH",ENTVAL'="" D ;Only pertinent for batch level extract
45 . S IBD("BATCH")=$O(^IBA(364.1,"B",ENTVAL,0))
46 . F PC=6:1:9 D
47 .. I $P(IBD0,U,PC)'="" S DATA=$P("# Claims Submitted^# Claims Rejected^Total Charges Submitted^Total Charges Rejected",U,PC-5)_": "_$S(PC<8:+$P(IBD0,U,PC),1:$FNUMBER($P(IBD0,U,PC)/100,"",2))_" "
48 .. I CT,$L($G(LINE(CT)))+$L(DATA)>80 S CT=CT+1
49 .. S:'CT CT=1 S LINE(CT)=$G(LINE(CT))_DATA
50 ;
51 I ENTVAL'="",$TR($P(IBD0,U,10,13),U)'="" S CT1=CT,CT=CT+1 F PC=10,11,12 D ;Both batch, claim levels extract
52 . Q:$P(IBD0,U,PC)=""
53 . I PC<12 S LINE(CT)=$G(LINE(CT))_$P("Payer Name^Payer ID",U,PC-9)_": "_$P(IBD0,U,PC)_" ",CT1=CT Q
54 . I $P(IBD0,U,12)'=""!($P(IBD0,U,13)'="") S:$P(IBD0,U,10)'=""!($P(IBD0,U,11)'="") CT=CT+1 S LINE(CT)="Source: "_$S($P(IBD0,U,12)="Y":"Sent by payer",$P(IBD0,U,13)'="":"Sent by non-payer ("_$P(IBD0,U,13)_")",1:"UNKNOWN")_" "
55 ;
56 I CT D
57 . S (L,Z)=0
58 . F S Z=$O(LINE(Z)) Q:'Z S L=L+1,^TMP("IBMSG-H",$J,ENTITY,ENTVAL,L)=LINE(Z)
59 . ;S IBD("LINE")=$G(IBD("LINE"))+CT
60 ;
61 I ENTITY="CLAIM" D
62 . N Z0
63 . S Z0=+$O(^DGCR(399,"B",ENTVAL,0))
64 . I $G(IBD("BATCH")) S IBBILL=$O(^IBA(364,"ABABI",+$G(IBD("BATCH")),Z0,""),-1) Q
65 . S IBBILL=$$LAST364^IBCEF4(Z0)
66 S ^TMP("IBMSG",$J,ENTITY,ENTVAL,0)=IBTYPE_U_$G(IBD("MSG#"))_U_$G(IBD("SUBJ"))_U_$S(ENTITY="CLAIM":IBBILL,1:"")_U_$S(ENTITY="BATCH":ENTVAL,1:"")_U_IBD("DATE")_U_IBD("SOURCE")
67 ;
68 S ^TMP("IBMSG",$J,ENTITY,ENTVAL,"D",0,1)="##RAW DATA: "_IBD0
69 Q
70 ;
715(IBD) ; Process batch status data
72 ; INPUT:
73 ; IBD must be passed by reference = entire message line
74 ; OUTPUT:
75 ; IBD array returned with processed data
76 ; "LINE" = The last line # populated in the message
77 ;
78 ; ^TMP("IBMSG",$J,"BATCH",batch #,line#)=batch status message lines
79 ; ,"D",5,msg seq #)=
80 ; batch status message raw data
81 ;
82 N CT,DATA,IBBTCH,IBTYPE,L,LINE,Z
83 K ^TMP("IBCONF",$J)
84 S IBBTCH=+$P(IBD,U,2)
85 S IBTYPE=$S($P(IBD,U,3)="R":"837REJ1",1:"837REC1")
86 I '$D(^TMP("IBMSG",$J,"BATCH",IBBTCH)) D HDR("BATCH",IBBTCH,IBTYPE,.IBD) ;Process header data if not already done for batch
87 S CT=0,LINE(1)=""
88 S DATA=$P(IBD,U,4)
89 I DATA'="",$TR($P(IBD,U,5,7),U)'="" D
90 . Q:$G(^TMP("IBMSG",$J,"BATCH",IBBTCH))=DATA
91 . S:'CT CT=CT+1 S LINE(CT)=$G(LINE(CT))_$S(DATA="W":"Warning",DATA="E":"Error",1:"Informational")_" "
92 S ^TMP("IBMSG",$J,"BATCH",IBBTCH)=DATA
93 I $P(IBD,U,5)'="" S:'CT CT=CT+1 S LINE(CT)=$G(LINE(CT))_"Code: "_$P(IBD,U,5)
94 I $P(IBD,U,6)'="" S:'CT CT=CT+1 S LINE(CT)=$G(LINE(CT))_" "_$P(IBD,U,6),CT=CT+1
95 I $P(IBD,U,7)'="" S:'CT CT=CT+1 S LINE(CT)=$G(LINE(CT))_" "_$P(IBD,U,7)
96 I CT D
97 . S L=$G(IBD("LINE")),Z=0
98 . F S Z=$O(LINE(Z)) Q:'Z S L=L+1,^TMP("IBMSG",$J,"BATCH",IBBTCH,L)=LINE(Z)
99 . S ^TMP("IBMSG",$J,"BATCH",IBBTCH,"D",5,$O(^TMP("IBMSG",$J,"BATCH",IBBTCH,"D",5,""),-1)+1)="##RAW DATA: "_IBD
100 . S IBD("LINE")=$G(IBD("LINE"))+CT
101 Q
102 ;
10310(IBD) ; Process claim status data
104 ; INPUT:
105 ; IBD must be passed by reference = entire message line
106 ; OUTPUT:
107 ; IBD array returned with processed data
108 ; "CLAIM" = The claim #
109 ; "LINE" = The last line # populated in the message
110 ;
111 ; ^TMP("IBMSG",$J,"CLAIM",claim #,line#)=claim status message lines
112 ; ,"D",10,msg seq #)=
113 ; claim status raw data
114 ; ^TMP("IBCONF",$J,claim #")="" for invalid claims within the batch
115 ;
116 N CT,DATA,IBCLM,IBTYPE,L,LINE,Z
117 S IBCLM=$$GETCLM($P(IBD,U,2))
118 Q:IBCLM=""
119 S:$P(IBD,U,3)="R" ^TMP("IBCONF",$J,+$O(^DGCR(399,"B",IBCLM,0)))=""
120 S IBTYPE=$S($P(IBD,U,3)="R":"837REJ1",1:"837REC1")
121 I '$D(^TMP("IBMSG",$J,"CLAIM",IBCLM)) D HDR("CLAIM",IBCLM,IBTYPE,.IBD) ;Process header data if not already done for claim
122 I IBTYPE="837REJ1",$P($G(^TMP("IBMSG",$J,"CLAIM",IBCLM,0)),U,1)'="837REJ1" D HDR("CLAIM",IBCLM,IBTYPE,.IBD)
123 S CT=0,DATA=$P(IBD,U,4)
124 I DATA'="",$TR($P(IBD,U,5,7),U)'="" D
125 . Q:$G(^TMP("IBMSG",$J,"CLAIM",IBCLM))=DATA
126 . S ^TMP("IBMSG",$J,"CLAIM",IBCLM)=DATA
127 . S CT=CT+1,LINE(CT)=$G(LINE(CT))_$S(DATA="W":"Warning",DATA="E":"Error",1:"Informational")_" "
128 I $P(IBD,U,5)'="" S CT=$S('CT:1,1:CT),LINE(CT)=$G(LINE(CT))_"Code: "_$P(IBD,U,5)
129 I $P(IBD,U,6)'="" S CT=$S('CT:1,1:CT),LINE(CT)=$G(LINE(CT))_" "_$P(IBD,U,6)
130 I $P(IBD,U,7)'="" S CT=CT+1,LINE(CT)=" "_$P(IBD,U,7)
131 I CT D
132 . S L=$G(IBD("LINE")),Z=0
133 . F S Z=$O(LINE(Z)) Q:'Z S L=L+1,^TMP("IBMSG",$J,"CLAIM",IBCLM,L)=LINE(Z)
134 . S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",10,$O(^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",10,""),-1)+1)="##RAW DATA: "_IBD
135 . S IBD("LINE")=$G(IBD("LINE"))+CT
136 Q
137 ;
13815(IBD) ; Process subscriber/patient data
139 ; Claim must have been referenced by a previous '10' level
140 ; INPUT:
141 ; IBD must be passed by reference = entire message line
142 ;
143 ; OUTPUT:
144 ; IBD("LINE") = The last line # populated in the message
145 ;
146 ; ^TMP("IBMSG",$J,"CLAIM",claim #,line#)=formatted service dates
147 ; ,"D",15,msg seq #)=
148 ; subscr/patient raw data
149 ;
150 N CT,Z,L,LINE,DATA,IBCLM,IBNM,IBNUM,IBDFN
151 S IBCLM=$$GETCLM($P(IBD,U,2)),CT=0,L=$G(IBD("LINE"))
152 Q:$S(IBCLM="":1,1:'$D(^TMP("IBMSG",$J,"CLAIM",IBCLM)))
153 S IBDFN=+$G(^DGCR(+$O(^DGCR(399,"B",IBCLM,0)),0))
154 S IBNM=$S($P(IBD,U,3)'="":$P(IBD,U,3)_","_$P(IBD,U,4)_$S($P(IBD,U,5)'="":" "_$P(IBD,U,5),1:""),1:$P($G(^DPT(IBDFN,0)),U))
155 S IBNUM=$S($P(IBD,U,6)'="":$P(IBD,U,6),1:$P($G(^DPT(IBDFN,0)),U,9))
156 S CT=CT+1,LINE(CT)="Patient: "_IBNM_" "_IBNUM
157 I $P(IBD,U,11) D
158 . S DATA=$$DATE($P(IBD,U,11)),CT=CT+1
159 . S LINE(CT)="Service Dates: "_DATA_" - "_$S($P(IBD,U,12):$$DATE($P(IBD,U,12)),1:DATA)_" "
160 . ; Add additional lines of display data here for record 15
161 S Z=0 F S Z=$O(LINE(Z)) Q:'Z S L=L+1,^TMP("IBMSG",$J,"CLAIM",IBCLM,L)=LINE(Z)
162 S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",15,$O(^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",15,""),-1)+1)="##RAW DATA: "_IBD
163 S IBD("LINE")=$G(IBD("LINE"))+CT
164 Q
165 ;
16620(IBD) ; Process service line status data
167 ; Claim must have been referenced by a previous '10' level
168 ; INPUT:
169 ; IBD must be passed by reference = entire message line
170 ; OUTPUT:
171 ; IBD array returned with processed data
172 ; "LINE" = The last line # populated in the message
173 ; "TYPE" = The msg type of status record (Confirmation/rejection)
174 ; Note: returned if not already set at batch or claim level
175 ;
176 ; ^TMP("IBMSG",$J,"CLAIM",claim #)=""
177 ; ,line#)=service line status msg lines
178 ; ,"D",20,msg seq #)=
179 ; service line status raw data
180 ;
181 N CT,DATA,L,LINE,Z,IBCLM,IBLNUM
182 S IBCLM=$$GETCLM($P(IBD,U,2)),IBLNUM=$P(IBD,U,8)
183 Q:'$D(^TMP("IBMSG",$J,"CLAIM",IBCLM))
184 S CT=0
185 I IBLNUM'="" S CT=CT+1,LINE(CT)="Claim Line: "_IBLNUM,^TMP("IBMSG",$J,"LINE",IBCLM,IBLNUM)=""
186 S DATA=$P(IBD,U,4)
187 I DATA'="",$TR($P(IBD,U,5,7),U)'="" S:'CT CT=CT+1 S LINE(CT)=$S(DATA="W":"Warning",DATA="E":"Error",1:"Informational")_" "_$G(LINE(CT))
188 S:$G(IBD("TYPE"))="" IBD("TYPE")=$S(DATA="E":"837REJ1",1:"837REC1")
189 I $P(IBD,U,5)'="" S:'CT CT=CT+1 S LINE(CT)=LINE(CT)_$P(IBD,U,5)
190 I $P(IBD,U,6)'="" S CT=CT+1,LINE(CT)=" "_$P(IBD,U,6)
191 I $P(IBD,U,7)'="" S CT=CT+1,LINE(CT)=" "_$P(IBD,U,7)
192 I CT D
193 . S L=$G(IBD("LINE")),Z=0
194 . F S Z=$O(LINE(Z)) Q:'Z S L=L+1,^TMP("IBMSG",$J,"CLAIM",IBCLM,L)=LINE(Z)
195 . S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",20,$O(^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",20,""),-1)+1)="##RAW DATA: "_IBD
196 . S IBD("LINE")=$G(IBD("LINE"))+CT
197 Q
198 ;
19921(IBD) ; Process service line ID data
200 ; Moved for size too big
201 D 21^IBCE277A(IBD)
202 Q
203 ;
204DATE(DT) ; Convert YYMMDD Date into MM/DD/YY or YYYYMMDD into MM/DD/YYYY
205 N D,Y
206 S D=DT,Y=""
207 I $L(DT)=8 S D=$E(DT,3,8),Y=$E(DT,1,2)
208 Q ($E(D,3,4)_"/"_$E(D,5,6)_"/"_Y_$E(D,1,2))
209 ;
210GETCLM(X) ; Extract the claim # without site id from the data in X
211 N IBCLM
212 S IBCLM=$P(X,"-",2)
213 I IBCLM="",X'="" S IBCLM=$E(X,$S($L(X)>7:4,1:1),$L(X))
214 ;S IBCLM=$E(X,$L(IBCLM)-6,$L(IBCLM)) ; Only take last 7 char
215 Q IBCLM
216 ;
Note: See TracBrowser for help on using the repository browser.