- Timestamp:
- Dec 4, 2009, 8:26:01 PM (14 years ago)
- Location:
- FOIAVistA/tag/r
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
FOIAVistA/tag/r/INTEGRATED_BILLING-IB-PRQ--IBD--IBQ--PRQS/IBCEOB.m
r628 r636 1 1 IBCEOB ;ALB/TMP - 835 EDI EOB MESSAGE PROCESSING ;20-JAN-99 2 ;;2.0;INTEGRATED BILLING;**137,135,265,155,377**;21-MAR-94;Build 23 3 ;;Per VHA Directive 2004-038, this routine should not be modified. 4 ; 2 ;;2.0;INTEGRATED BILLING;**137,135,265,155**;21-MAR-94 5 3 Q 6 4 ; … … 24 22 ; Duplicate EOB Check 25 23 S IBFILE="^IBA(364.2,"_IBTDA_",2)" 26 I $$DUP(IBFILE,X) D DELMSG^IBCESRV2(IBTDA)G UPDQ24 I $$DUP(IBFILE,X) G UPDQ 27 25 ; 28 26 I '$$LOCK^IBCEM(IBTDA) G UPDQ ;Lock msg file 364.2 … … 50 48 5(IB0,IBEGBL,IBEOB) ; Record '05' 51 49 ; 52 N IBOK, DA,DR,DIE,X,Y50 N IBOK,IBBULL,DA,DR,DIE,X,Y 53 51 K IBZDATA 54 52 S DR=";",IBOK=1 55 53 S DIE="^IBM(361.1,",DA=IBEOB 56 54 ; 57 I $P(IB0,U,9) S DR=DR_"1.1///"_$$DATE^IBCEU($P(IB0,U,9))_";" ; statement start date 58 I $P(IB0,U,10) S DR=DR_"1.11///"_$$DATE^IBCEU($P(IB0,U,10))_";" ; statement end date 55 S IBBULL="" 56 I $$UPDNM^IBCEOB00(IBEOB,IB0,.IBBULL,.DR)!$$UPDID^IBCEOB00(IBEOB,IB0,.IBBULL,.DR) D ; New insured's name and/or HIC # found 57 . D CHGBULL^IBCEOB3(IBEOB,IBBULL) ;Send a bulletin reporting change 58 ; 59 I $P(IB0,U,9) S DR=DR_"1.1///"_$$DATE^IBCEU($P(IB0,U,9))_";" 60 I $P(IB0,U,10) S DR=DR_"1.11///"_$$DATE^IBCEU($P(IB0,U,10))_";" 59 61 S DR=$P(DR,";",2,$L(DR,";")-1) 60 62 I DR'="" D ^DIE S IBOK=$D(Y)=0 61 63 I 'IBOK S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Bad record 5 data" 62 64 Q IBOK 63 ;64 6(IB0,IBEGBL,IBEOB) ; Record '06' - corrected patient name and/or ID#65 ; This data is not going to be filed into file 361.1 so the value of this function will always be a 1 so as to66 ; not interrupt the filing process of the EOB/MRA data into file 361.1.67 ;68 ; perform overall integrity checks on the incoming 06 record. If anything is out of place, don't update anything69 ; and report the problem and get out.70 NEW CLM,SITE,IBM,IBIFN,IBIFN1,DFN,SEQ,DIE,DA,DR71 S DIE=361.1,DA=IBEOB,DR="61.01////^S X=IB0" D ^DIE ; archive the raw 06 record data72 S CLM=$P(IB0,U,2),SITE=+CLM,CLM=$P(CLM,"-",2) I CLM="" D MSG(IBEOB,"The claim# in piece 2 is invalid.") G Q673 S IBM=$G(^IBM(361.1,IBEOB,0))74 I $P(IBM,U,4)'=1 D MSG(IBEOB,"This is a non-Medicare EOB.") G Q675 S IBIFN=+$P(IBM,U,1) ; claim# from MRA76 S IBIFN1=+$O(^DGCR(399,"B",CLM,"")) ; claim# from 06 record77 I IBIFN'=IBIFN1 D MSG(IBEOB,"Claim mismatch error."_IBIFN_","_IBIFN1_","_CLM_".") G Q678 I $P($$SITE^VASITE,U,3)'=SITE D MSG(IBEOB,"Invalid station# mismatch."_$P($$SITE^VASITE,U,3)_","_SITE_".") G Q679 S SEQ=$$COBN^IBCEF(IBIFN) ; current payer sequence# on claim80 I '$$WNRBILL^IBEFUNC(IBIFN,SEQ) D MSG(IBEOB,"The current payer on this claim is not MEDICARE (WNR).") G Q681 S DFN=+$P($G(^DGCR(399,IBIFN,0)),U,2) ; patient ien82 I 'DFN D MSG(IBEOB,"The patient DFN cannot be determined.") G Q683 ;84 D UPD^IBCEOB01(IB0,IBEOB,IBIFN,DFN,SEQ) ; update patient insurance policy data85 ;86 Q6 ; exit point for $$6 function87 Q 188 65 ; 89 66 10(IB0,IBEGBL,IBEOB) ; Record '10' … … 106 83 ; 107 84 15(IB0,IBEGBL,IBEOB) ; Record '15' 108 ; Moved due to space constraints 109 Q15 Q $$15^IBCEOB00(IB0,IBEGBL,IBEOB) 85 ; 86 N A,IBOK 87 ; 88 S A="3;1.03;1;0;0^4;1.04;1;0;0^5;1.05;1;0;0^6;1.07;1;0;0^7;1.08;1;0;0^8;1.09;1;0;0^9;1.02;1;0;0^10;2.05;1;0;0" 89 ; 90 S IBOK=$$STORE^IBCEOB1(A,IB0,IBEOB) 91 I 'IBOK S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Bad record 15 data" G Q15 92 ; 93 ; For Medicare MRA's only: 94 ; If the Covered Amount is present (15 record, piece 3), then file 95 ; a claim level adjustment with Group code=OA, Reason code=AB3. 96 ; 97 I $P($G(^IBM(361.1,IBEOB,0)),U,4)=1,+$P(IB0,U,3) D 98 . N IB20 99 . S IB20=20_U_$P(IB0,U,2)_U_"OA"_U_"AB3"_U_$P(IB0,U,3)_U_"0000000000" 100 . S IB20=IB20_U_"Covered Amount" 101 . S IBOK=$$20(IB20,IBEGBL,IBEOB) 102 . I 'IBOK S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Could not file the OA-AB3 claim level adjustment for the Covered Amount" 103 . K ^TMP($J,20) 104 . Q 105 ; 106 Q15 Q IBOK 110 107 ; 111 108 17(IB0,IBEGBL,IBEOB) ; Record '17' … … 117 114 ; 118 115 20(IB0,IBEGBL,IBEOB) ; Record '20' 119 ; Moved due to space constraints 120 Q20 Q $$20^IBCEOB00(IB0,IBEGBL,IBEOB) 116 ; 117 N A,LEVEL,IBGRP,IBDA,IBOK 118 ; 119 S IBGRP=$P(IB0,U,3) 120 I IBGRP'="" S ^TMP($J,20)=IBGRP 121 I IBGRP="" S IBGRP=$G(^TMP($J,20)) 122 I IBGRP="" S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Missing claim level adjustment group code" G Q20 123 ; 124 S IBDA(1)=$O(^IBM(361.1,IBEOB,10,"B",IBGRP,0)) 125 ; 126 I 'IBDA(1) D ;Needs a new entry at group level 127 . N X,Y,DA,DD,DO,DIC,DLAYGO 128 . S DIC="^IBM(361.1,"_IBEOB_",10,",DIC(0)="L",DLAYGO=361.11,DA(1)=IBEOB 129 . S DIC("P")=$$GETSPEC^IBEFUNC(361.1,10) 130 . S X=IBGRP 131 . D FILE^DICN K DIC,DO,DD,DLAYGO 132 . I Y<0 K IBDA S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Adjustment group code could not be added" Q 133 . S IBDA(1)=+Y 134 ; 135 I $G(IBDA(1)) D ;Add a new entry at the reason code level 136 . S DIC="^IBM(361.1,"_IBEOB_",10,"_IBDA(1)_",1,",DIC(0)="L",DLAYGO=361.111,DA(2)=IBEOB,DA(1)=IBDA(1) 137 . S DIC("P")=$$GETSPEC^IBEFUNC(361.11,1) 138 . S X=$P(IB0,U,4) 139 . D FILE^DICN K DIC,DO,DD,DLAYGO 140 . I Y<0 K IBDA S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Adjustment reason code could not be added" Q 141 . S IBDA=+Y 142 ; 143 I $G(IBDA) D 144 . S LEVEL=10,LEVEL("DIE")="^IBM(361.1,"_IBEOB_",10,"_IBDA(1)_",1," 145 . S LEVEL(0)=IBDA,LEVEL(1)=IBDA(1),LEVEL(2)=IBEOB 146 . S A="5;.02;1;0;0^6;.03;0;1;1^7;.04;0;1;0" 147 . S IBOK=$$STORE^IBCEOB1(A,IB0,IBEOB,.LEVEL) 148 . I 'IBOK S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Bad adjustment reason code ("_$P(IB0,U,4)_") data" Q 149 Q20 Q $G(IBOK) 121 150 ; 122 151 30(IB0,IBEGBL,IBEOB) ; Record '30' … … 157 186 D 45^IBCEOB0(IB0,IBEOB,.IBOK) 158 187 Q $G(IBOK) 159 ;160 MSG(IBEOB,MSG) ; procedure to file message into field 6.03161 ; Results of processing of the "06" record type162 N DIE,DA,DR,Z163 S DIE=361.1,DA=+$G(IBEOB)164 I $G(MSG)="" G MSGX165 S Z=$P($G(^IBM(361.1,DA,6)),U,3) ; already existing message166 I Z'="" S MSG=Z_" "_MSG ; append new message to existing message167 S MSG=$E(MSG,1,190)168 S DR="6.03///^S X=MSG"169 D ^DIE170 MSGX ;171 Q172 188 ; 173 189 DOLLAR(X) ; Convert value in X to dollar format XXX.XX … … 182 198 ; IBFILE = array reference of raw EOB data 183 199 ; 184 N DIC,DA,DR,DO,DD,DLAYGO,Y,REVSTAT,BS ,MMI200 N DIC,DA,DR,DO,DD,DLAYGO,Y,REVSTAT,BS 185 201 F L +^IBM(361.1,0):10 Q:$T 186 202 ; … … 188 204 S BS=$P($G(^DGCR(399,X,0)),U,13) ; bill status 189 205 S REVSTAT=$S(BS=7:9,BS=3:3,BS=4:3,1:0) 190 S MMI=$$NET^XMRENT(IBMNUM) ; MailMan header info191 206 S DIC(0)="L",DIC="^IBM(361.1,",DLAYGO=361.1 192 207 S DIC("DR")=".16////"_REVSTAT_";.17////0"_";100.02////"_IBMNUM_$S('$G(IBAR):";.19////"_+IBTBILL_";100.01////"_IBBATCH,1:"") 193 S DIC("DR")=DIC("DR")_";100.05////"_$$CHKSUM^IBCEMU1(IBFILE) _";62.01////^S X=MMI"208 S DIC("DR")=DIC("DR")_";100.05////"_$$CHKSUM^IBCEMU1(IBFILE) 194 209 D FILE^DICN 195 210 L -^IBM(361.1,0)
Note:
See TracChangeset
for help on using the changeset viewer.