Ignore:
Timestamp:
Dec 4, 2009, 8:26:01 PM (14 years ago)
Author:
George Lilly
Message:

WorldVistAEHR overlayed on FOIAVistA

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  
    11IBCEOB ;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
    53 Q
    64 ;
     
    2422 ; Duplicate EOB Check
    2523 S IBFILE="^IBA(364.2,"_IBTDA_",2)"
    26  I $$DUP(IBFILE,X) D DELMSG^IBCESRV2(IBTDA) G UPDQ
     24 I $$DUP(IBFILE,X) G UPDQ
    2725 ;
    2826 I '$$LOCK^IBCEM(IBTDA) G UPDQ ;Lock msg file 364.2
     
    50485(IB0,IBEGBL,IBEOB) ; Record '05'
    5149 ;
    52  N IBOK,DA,DR,DIE,X,Y
     50 N IBOK,IBBULL,DA,DR,DIE,X,Y
    5351 K IBZDATA
    5452 S DR=";",IBOK=1
    5553 S DIE="^IBM(361.1,",DA=IBEOB
    5654 ;
    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))_";"
    5961 S DR=$P(DR,";",2,$L(DR,";")-1)
    6062 I DR'="" D ^DIE S IBOK=$D(Y)=0
    6163 I 'IBOK S ^TMP(IBEGBL,$J,+$O(^TMP(IBEGBL,$J,""),-1)+1)="Bad record 5 data"
    6264 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 to
    66  ; 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 anything
    69  ; and report the problem and get out.
    70  NEW CLM,SITE,IBM,IBIFN,IBIFN1,DFN,SEQ,DIE,DA,DR
    71  S DIE=361.1,DA=IBEOB,DR="61.01////^S X=IB0" D ^DIE    ; archive the raw 06 record data
    72  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 Q6
    73  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 Q6
    75  S IBIFN=+$P(IBM,U,1)                    ; claim# from MRA
    76  S IBIFN1=+$O(^DGCR(399,"B",CLM,""))     ; claim# from 06 record
    77  I IBIFN'=IBIFN1 D MSG(IBEOB,"Claim mismatch error."_IBIFN_","_IBIFN1_","_CLM_".") G Q6
    78  I $P($$SITE^VASITE,U,3)'=SITE D MSG(IBEOB,"Invalid station# mismatch."_$P($$SITE^VASITE,U,3)_","_SITE_".") G Q6
    79  S SEQ=$$COBN^IBCEF(IBIFN)               ; current payer sequence# on claim
    80  I '$$WNRBILL^IBEFUNC(IBIFN,SEQ) D MSG(IBEOB,"The current payer on this claim is not MEDICARE (WNR).") G Q6
    81  S DFN=+$P($G(^DGCR(399,IBIFN,0)),U,2)   ; patient ien
    82  I 'DFN D MSG(IBEOB,"The patient DFN cannot be determined.") G Q6
    83  ;
    84  D UPD^IBCEOB01(IB0,IBEOB,IBIFN,DFN,SEQ)     ; update patient insurance policy data
    85  ;
    86 Q6 ; exit point for $$6 function
    87  Q 1
    8865 ;
    896610(IB0,IBEGBL,IBEOB) ; Record '10'
     
    10683 ;
    1078415(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 ;
     106Q15 Q IBOK
    110107 ;
    11110817(IB0,IBEGBL,IBEOB) ; Record '17'
     
    117114 ;
    11811520(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
     149Q20 Q $G(IBOK)
    121150 ;
    12215130(IB0,IBEGBL,IBEOB) ; Record '30'
     
    157186 D 45^IBCEOB0(IB0,IBEOB,.IBOK)
    158187 Q $G(IBOK)
    159  ;
    160 MSG(IBEOB,MSG) ; procedure to file message into field 6.03
    161  ; Results of processing of the "06" record type
    162  N DIE,DA,DR,Z
    163  S DIE=361.1,DA=+$G(IBEOB)
    164  I $G(MSG)="" G MSGX
    165  S Z=$P($G(^IBM(361.1,DA,6)),U,3)    ; already existing message
    166  I Z'="" S MSG=Z_"  "_MSG            ; append new message to existing message
    167  S MSG=$E(MSG,1,190)
    168  S DR="6.03///^S X=MSG"
    169  D ^DIE
    170 MSGX ;
    171  Q
    172188 ;
    173189DOLLAR(X) ; Convert value in X to dollar format XXX.XX
     
    182198 ; IBFILE = array reference of raw EOB data
    183199 ;
    184  N DIC,DA,DR,DO,DD,DLAYGO,Y,REVSTAT,BS,MMI
     200 N DIC,DA,DR,DO,DD,DLAYGO,Y,REVSTAT,BS
    185201 F  L +^IBM(361.1,0):10 Q:$T
    186202 ;
     
    188204 S BS=$P($G(^DGCR(399,X,0)),U,13)   ; bill status
    189205 S REVSTAT=$S(BS=7:9,BS=3:3,BS=4:3,1:0)
    190  S MMI=$$NET^XMRENT(IBMNUM)         ; MailMan header info
    191206 S DIC(0)="L",DIC="^IBM(361.1,",DLAYGO=361.1
    192207 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)
    194209 D FILE^DICN
    195210 L -^IBM(361.1,0)
Note: See TracChangeset for help on using the changeset viewer.