1 | IBCEOB0 ;ALB/TMP - 835 EDI EOB MSG PROCESSING ;18-FEB-99
|
---|
2 | ;;2.0;INTEGRATED BILLING;**135,280,155**;21-MAR-94
|
---|
3 | Q
|
---|
4 | ;
|
---|
5 | 30(IB0,IBEOB,IBOK) ; Process record type 30 for EOB
|
---|
6 | ; IB0 = the record being processed
|
---|
7 | ; IBEOB = the ien of the EOB entry in file 361.1
|
---|
8 | ; IBOK = Returned as 1 if record filed OK, 0 if error occurred
|
---|
9 | ;
|
---|
10 | N A
|
---|
11 | S A="3;4.01;0;1;1^5;4.02;0;1;1^6;4.03;1;0;0^7;4.05;1;0;0^8;4.06;1;0;0^9;4.07;1;0;0^10;4.08;1;0;0^11;4.09;1;0;0^12;4.1;1;0;0^13;4.11;1;0;0^14;4.19;0;1;1"
|
---|
12 | ;
|
---|
13 | S IBOK=$$STORE^IBCEOB1(A,IB0,IBEOB)
|
---|
14 | I 'IBOK S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Bad MEDICARE Inpt Adjudication data"
|
---|
15 | Q30 Q
|
---|
16 | ;
|
---|
17 | 40(IB0,IBEOB,IBOK) ; Process record type 40 for EOB
|
---|
18 | ; IB0 = the record being processed
|
---|
19 | ; IBEOB = the ien of the EOB entry in file 361.1
|
---|
20 | ; IBOK = Returned as 1 if record filed OK, 0 if error occurred
|
---|
21 | ;
|
---|
22 | ; IBZDATA is also assumed to exist or if not, it is created in FINDLN
|
---|
23 | ;
|
---|
24 | N A,LEVEL,IBSEQ,IBDA,IBPC,IBLREF,IBIFN,Q,X,Y,DA,DD,DO,DIC,DLAYGO
|
---|
25 | K ^TMP($J,40) ; the entry # for corresponding 41, 42, and 45 records
|
---|
26 | ;
|
---|
27 | S IBIFN=+$G(^IBM(361.1,IBEOB,0))
|
---|
28 | L +^IBM(361.1,IBEOB,15):0 I $T S IBSEQ=+$O(^IBM(361.1,IBEOB,15," "),-1)+1
|
---|
29 | I '$G(IBSEQ) S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Record lock failure - could not acquire next service line number" G Q40
|
---|
30 | ;
|
---|
31 | ; Update the 40 record data a little bit (pieces 3/4/16)
|
---|
32 | I $P(IB0,U,21)="NU" S $P(IB0,U,4)=$P(IB0,U,3),$P(IB0,U,3)=""
|
---|
33 | S $P(IB0,U,16)=$S(+$P(IB0,U,16):$P(IB0,U,16)/100,1:+$P(IB0,U,18)/100)
|
---|
34 | I $P(IB0,U,4)?1.N S $P(IB0,U,4)=+$P(IB0,U,4)
|
---|
35 | ;
|
---|
36 | ; Find the line item from original bill for this adjustment
|
---|
37 | S IBLREF=+$$FINDLN^IBCEOB1(IB0,IBEOB,.IBZDATA)
|
---|
38 | I 'IBLREF D G Q40
|
---|
39 | . N Z,Z0,CT
|
---|
40 | . S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Service line detail could not be matched to a billed item"
|
---|
41 | . D DET40^IBCEOB00(IB0,.Z0)
|
---|
42 | . S CT=+$O(^TMP(IBEGBL,$J,""),-1),Z=0 F S Z=$O(Z0(Z)) Q:'Z S CT=CT+1,^TMP(IBEGBL,$J,CT)=Z0(Z)
|
---|
43 | ;
|
---|
44 | S DIC="^IBM(361.1,"_IBEOB_",15,",DIC(0)="L",DLAYGO=361.115,DA(1)=IBEOB
|
---|
45 | S X=IBSEQ
|
---|
46 | S DIC("DR")=".12////"_+IBLREF_$S($P(IBLREF,U,2)="":"",1:";.15////"_$P(IBLREF,U,2))_";.16////"_$$DATE^IBCEU($P(IB0,U,19))_$S($P(IB0,U,20):";.17////"_$$DATE^IBCEU($P(IB0,U,20)),1:"")
|
---|
47 | D FILE^DICN K DIC,DO,DD,DLAYGO ;Add a new LINE LEVEL ADJUSTMENT ('SVC')
|
---|
48 | I Y<0 S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Could not add a LINE LEVEL ADJUSTMENT ("_IBSEQ_")" G Q40
|
---|
49 | ;
|
---|
50 | L -^IBM(361.1,IBEOB,15)
|
---|
51 | ;
|
---|
52 | S LEVEL=15.1,LEVEL(0)=+Y,LEVEL(1)=IBEOB,LEVEL("DIE")="^IBM(361.1,"_IBEOB_",15,"
|
---|
53 | S A="3;.04;0;0;0^4;.1;0;0;0^9;.09;0;0;0^17;.03;1;0;0^18;.11;0;1;D2^21;.18;0;0;0"
|
---|
54 | I '$P(IB0,U,18),$P(IB0,U,16) S $P(A,U,5)="16;.11;0;1;1"
|
---|
55 | I $$STORE^IBCEOB1(A,IB0,IBEOB,.LEVEL) S ^TMP($J,40)=LEVEL(0),IBOK=1
|
---|
56 | I '$G(IBOK) S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Bad data for line level adjustment "_IBSEQ G Q40
|
---|
57 | ;
|
---|
58 | ; Store modifiers in multiple
|
---|
59 | S DIC="^IBM(361.1,"_IBEOB_",15,"_LEVEL(0)_",2,",DIC(0)="L",DLAYGO=361.1152,DA(2)=IBEOB,DA(1)=LEVEL(0)
|
---|
60 | F Q=5:1:8 S X=$P(IB0,U,Q) I X'="" D FILE^DICN K DO,DD I Y<0 S IBOK=0 Q
|
---|
61 | K DLAYGO,DIC,DR,DA
|
---|
62 | I '$G(IBOK) S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Could not file modifier data for line level adjustment "_IBSEQ G Q40
|
---|
63 | Q40 Q
|
---|
64 | ;
|
---|
65 | 41(IB0,IBEOB,IBOK) ; Process record type 41 for EOB
|
---|
66 | ; IB0 = the record being processed
|
---|
67 | ; IBEOB = the ien of the EOB entry in file 361.1
|
---|
68 | ; IBOK = Returned as 1 if record filed OK, 0 if error occurred
|
---|
69 | ;
|
---|
70 | N DA,DR,DIE,X,Y,Z,Z0,CT
|
---|
71 | I '$G(^TMP($J,40)) D G Q41
|
---|
72 | . S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Service line adjustment has no corresponding service line"
|
---|
73 | . D DET4X^IBCEOB00(41,IB0,.Z0)
|
---|
74 | . S CT=+$O(^TMP(IBEGBL,$J,""),-1),Z=0 F S Z=$O(Z0(Z)) Q:'Z S CT=CT+1,^TMP(IBEGBL,$J,CT)=Z0(Z)
|
---|
75 | ;
|
---|
76 | S DR="",IBOK=1
|
---|
77 | S DA=+^TMP($J,40),DA(1)=IBEOB
|
---|
78 | S DIE="^IBM(361.1,"_DA(1)_",15,"
|
---|
79 | I +$P(IB0,U,3) S DR=".13///"_$$DOLLAR^IBCEOB($P(IB0,U,3))
|
---|
80 | I +$P(IB0,U,4) S DR=DR_$S(DR="":"",1:";")_".14///"_$$DOLLAR^IBCEOB($P(IB0,U,4))
|
---|
81 | I DR'="" D ^DIE S IBOK=($D(Y)=0)
|
---|
82 | I '$G(IBOK) S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Bad data for service line adjustment-2"
|
---|
83 | ;
|
---|
84 | ; For Medicare MRA's only:
|
---|
85 | ; If the Allowed Amount field is present, then we need to file an
|
---|
86 | ; adjustment: Group code PR, Reason code AAA, Amount, Quantity, and
|
---|
87 | ; Reason Text. This is data normally found on the 45 record, so we're
|
---|
88 | ; going to create our own "45" record and file it.
|
---|
89 | ;
|
---|
90 | I $P($G(^IBM(361.1,IBEOB,0)),U,4)=1,+$P(IB0,U,3) D
|
---|
91 | . N IB45,IBSAV40
|
---|
92 | . S IB45=45_U_$P(IB0,U,2)_U_"PR"_U_"AAA"_U_$P(IB0,U,3)_U_"0000000001"
|
---|
93 | . S IB45=IB45_U_"Allowed Amount"
|
---|
94 | . S IBSAV40=$G(^TMP($J,40))
|
---|
95 | . D 45(IB45,IBEOB,.IBOK)
|
---|
96 | . S ^TMP($J,40)=IBSAV40
|
---|
97 | . I '$G(IBOK) S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Could not file the PR-AAA adjustment for the Allowed Amount at line "_+^TMP($J,40)
|
---|
98 | . Q
|
---|
99 | ;
|
---|
100 | Q41 Q
|
---|
101 | ;
|
---|
102 | 42(IB0,IBEOB,IBOK) ; Process record type 42 for EOB
|
---|
103 | ; IB0 = the record being processed
|
---|
104 | ; IBEOB = the ien of the EOB entry in file 361.1
|
---|
105 | ; IBOK = Returned as 1 if record filed OK, 0 if error occurred
|
---|
106 | ;
|
---|
107 | N DO,DD,DLAYGO,DIC,DA,X,Y,Z,Z0,CT
|
---|
108 | S IBOK=0
|
---|
109 | I '$G(^TMP($J,40)) D G Q42
|
---|
110 | . S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Service line adjustment has no corresponding service line"
|
---|
111 | . D DET4X^IBCEOB00(42,IB0,.Z0)
|
---|
112 | . S CT=+$O(^TMP(IBEGBL,$J,""),-1),Z=0 F S Z=$O(Z0(Z)) Q:'Z S CT=CT+1,^TMP(IBEGBL,$J,CT)=Z0(Z)
|
---|
113 | ;
|
---|
114 | K DO,DD,DLAYGO
|
---|
115 | S IBOK=1
|
---|
116 | S DA(1)=+^TMP($J,40),DA(2)=IBEOB
|
---|
117 | S X=+$O(^IBM(361.1,DA(2),15,DA(1),4," "),-1)+1,DIC="^IBM(361.1,"_DA(2)_",15,"_DA(1)_",4,",DIC(0)="L",DLAYGO=361.1154
|
---|
118 | S DIC("DR")=$S($P(IB0,U,3)'="":".02////"_$P(IB0,U,3),1:"")
|
---|
119 | S DIC("DR")=DIC("DR")_$S($P(IB0,U,4)'="":$S($L(DIC("DR")):";",1:"")_".03////"_$TR($P(IB0,U,4),";"," "))
|
---|
120 | D FILE^DICN K DO,DD,DLAYGO
|
---|
121 | I Y'>0 S IBOK=0
|
---|
122 | I '$G(IBOK) S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Bad data for service line adjustment-3"
|
---|
123 | ;
|
---|
124 | ; For Medicare MRA's only:
|
---|
125 | ; Process and store the line level remark code as an LQ kludge line
|
---|
126 | ; level adjustment.
|
---|
127 | ;
|
---|
128 | I $P($G(^IBM(361.1,IBEOB,0)),U,4)=1,$P(IB0,U,3)'="" D
|
---|
129 | . N IB45,IBSAV40
|
---|
130 | . S IB45=45_U_$P(IB0,U,2)_U_"LQ"_U_$P(IB0,U,3)_U_0_U_0_U_$P(IB0,U,4)
|
---|
131 | . S IBSAV40=$G(^TMP($J,40))
|
---|
132 | . D 45(IB45,IBEOB,.IBOK)
|
---|
133 | . S ^TMP($J,40)=IBSAV40
|
---|
134 | . I '$G(IBOK) S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Could not file the LQ-remark code adjustment at line "_+^TMP($J,40)
|
---|
135 | . Q
|
---|
136 | Q42 Q
|
---|
137 | ;
|
---|
138 | 45(IB0,IBEOB,IBOK) ; Process record type 45 for EOB
|
---|
139 | ; IB0 = the record being processed
|
---|
140 | ; IBEOB = the ien of the EOB entry in file 361.1
|
---|
141 | ; IBOK = Returned as 1 if record filed OK, 0 if error occurred
|
---|
142 | ;
|
---|
143 | N IBDA,LEVEL,A,Z0,CT,Z
|
---|
144 | I '$G(^TMP($J,40)) D G Q45
|
---|
145 | . S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Service line adjustment has no corresponding service line"
|
---|
146 | . D DET4X^IBCEOB00(45,IB0,.Z0)
|
---|
147 | . S CT=+$O(^TMP(IBEGBL,$J,""),-1),Z=0 F S Z=$O(Z0(Z)) Q:'Z S CT=CT+1,^TMP(IBEGBL,$J,CT)=Z0(Z)
|
---|
148 | ;
|
---|
149 | I $P(IB0,U,3)'="" S $P(^TMP($J,40),U,2)=$P(IB0,U,3)
|
---|
150 | I $P(IB0,U,3)="" S $P(IB0,U,3)=$P(^TMP($J,40),U,2)
|
---|
151 | I $P(IB0,U,3)="" S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Service line adjustment is missing its group code" G Q45
|
---|
152 | ;
|
---|
153 | S IBDA(2)=+^TMP($J,40)
|
---|
154 | S IBDA(1)=+$O(^IBM(361.1,IBEOB,15,IBDA(2),1,"B",$P(IB0,U,3),0))
|
---|
155 | ;
|
---|
156 | I 'IBDA(1) D ;Needs a new entry at group level
|
---|
157 | . N X,Y,DA,DD,DO,DIC,DLAYGO
|
---|
158 | . S DIC="^IBM(361.1,"_IBEOB_",15,"_IBDA(2)_",1,",DIC(0)="L",DLAYGO=361.1151,DA(2)=IBEOB,DA(1)=IBDA(2)
|
---|
159 | . S DIC("P")=$$GETSPEC^IBEFUNC(361.115,1)
|
---|
160 | . S X=$P(IB0,U,3)
|
---|
161 | . D FILE^DICN K DIC,DO,DD,DLAYGO
|
---|
162 | . I Y<0 K IBDA S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Could not add adjustment group code ("_$P(IB0,U,3)_") at line adjustment "_+^TMP($J,40) Q
|
---|
163 | . S IBDA(1)=+Y
|
---|
164 | ;
|
---|
165 | ;Add a new entry at the reason code level
|
---|
166 | I $G(IBDA(1)) D
|
---|
167 | . S DIC="^IBM(361.1,"_IBEOB_",15,"_IBDA(2)_",1,"_IBDA(1)_",1,",DIC(0)="L",DLAYGO=361.11511,DA(1)=IBDA(1),DA(2)=IBDA(2),DA(3)=IBEOB
|
---|
168 | . S DIC("P")=$$GETSPEC^IBEFUNC(361.1151,1)
|
---|
169 | . S X=$P(IB0,U,4)
|
---|
170 | . D FILE^DICN K DIC,DO,DD,DLAYGO
|
---|
171 | . I Y<0 K IBDA S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Could not add reason code ("_$P(IB0,U,4)_") for adjustment group code ("_$P(IB0,U,3)_") at line adjustment "_+^TMP($J,40) Q
|
---|
172 | . S IBDA=+Y
|
---|
173 | ;
|
---|
174 | I $G(IBDA) D
|
---|
175 | . S LEVEL=15,LEVEL("DIE")="^IBM(361.1,"_IBEOB_",15,"_IBDA(2)_",1,"_IBDA(1)_",1,"
|
---|
176 | . S LEVEL(0)=IBDA,LEVEL(1)=IBDA(1),LEVEL(2)=IBDA(2),LEVEL(3)=IBEOB
|
---|
177 | . S A="5;.02;1;0;0^6;.03;0;1;1^7;.04;0;1;0"
|
---|
178 | . S IBOK=$$STORE^IBCEOB1(A,IB0,IBEOB,.LEVEL)
|
---|
179 | . I 'IBOK S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Bad data for reason code ("_$P(IB0,U,4)_"), adjustment group code ("_$P(IB0,U,3)_") at line adjustment "_+^TMP($J,40) Q
|
---|
180 | ;
|
---|
181 | Q45 Q
|
---|
182 | ;
|
---|