Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: IBCEMSR

IBCEMSR.m

Go to the documentation of this file.
  1. IBCEMSR ;WOIFO/AAT - MRA STATISTICS REPORT ;09/03/04
  1. ;;2.0;INTEGRATED BILLING;**155,288,294,349,447**;21-MAR-94;Build 80
  1. ;;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;
  1. EN ;
  1. N IBQ,IBDIV,IBBDT,IBEDT,IBSUM,IBSCR
  1. W !!,"Report requires 132 Columns"
  1. S IBQ=0 ; quit flag
  1. ; Prompts to the user:
  1. D DIV Q:IBQ ; Division(s)
  1. D SUM Q:IBQ ; Summary only?
  1. W !!,"Normal processing time for a MRA is 10-12 days. If you select a date range of"
  1. W !,"less than 2 weeks, do not expect to have received many MRAs."
  1. D DTR Q:IBQ ; From-To date range
  1. D DEVICE Q:IBQ
  1. D RUN
  1. Q
  1. ;
  1. DIV N DIC,DIR,DIRUT,Y
  1. W ! S DIR("B")="ALL",DIR("A")="Run this report for All divisions or Selected Divisions: "
  1. S DIR(0)="SA^ALL:All divisions;S:Selected divisions" D ^DIR
  1. I $D(DIRUT) S IBQ=1 Q
  1. S IBDIV=Y Q:Y="ALL"
  1. ; Collect divisions
  1. F D Q:Y'>0
  1. . W ! S DIC("A")="Division: ",DIC=40.8,DIC(0)="AEQM" D ^DIC
  1. . I $D(DIRUT) S IBQ=1 Q
  1. . I Y'>0 Q
  1. . S IBDIV(+Y)=""
  1. I $O(IBDIV(""))="" S IBQ=1 Q ; None selected
  1. Q
  1. ;
  1. DTR ;date range
  1. N %DT,Y
  1. S (IBBDT,IBEDT)=DT
  1. S %DT="AEX"
  1. S %DT("A")="Start with MRA Request Transmission Date: " ; No default,%DT("B")="TODAY"
  1. W ! D ^%DT K %DT
  1. I Y<0 S IBQ=1 Q
  1. S IBBDT=+Y
  1. S %DT="AEX"
  1. S %DT("A")="Go to MRA Request Transmission Date: ",%DT("B")="TODAY"
  1. D ^%DT K %DT
  1. I Y<0 S IBQ=1 Q
  1. S IBEDT=+Y
  1. Q
  1. ;
  1. SUM N DIR,DIRUT,Y
  1. W ! S DIR("B")="YES",DIR("A")="Do you want to print a summary only? "
  1. S DIR(0)="YA" D ^DIR
  1. I $D(DIRUT) S IBQ=1 Q
  1. S IBSUM=+Y
  1. Q
  1. ;
  1. DEVICE N %ZIS,IOP,ZTSK,ZTRTN,ZTIO,ZTDESC,ZTSAVE,POP
  1. K IO("Q")
  1. S %ZIS="QM"
  1. W ! D ^%ZIS
  1. I POP S IBQ=1 Q
  1. S IBSCR=$S($E($G(IOST),1,2)="C-":1,1:0)
  1. ;
  1. I $D(IO("Q")) D S IBQ=1
  1. . S ZTRTN="RUN^IBCEMSR"
  1. . S ZTIO=ION
  1. . S ZTSAVE("IB*")=""
  1. . S ZTDESC="IB MRA STATISTICS REPORT"
  1. . D ^%ZTLOAD
  1. . W !,$S($D(ZTSK):"REQUEST QUEUED TASK="_ZTSK,1:"REQUEST CANCELLED")
  1. . D HOME^%ZIS
  1. U IO
  1. Q
  1. ;
  1. ;
  1. RUN N REF
  1. S REF=$NA(^TMP($J,"IBCEMSR"))
  1. K @REF
  1. D COLLECT ; Collect the data in ^TMP
  1. U IO
  1. D REPORT^IBCEMSR1
  1. I 'IBSCR W !,@IOF
  1. D ^%ZISC
  1. K @REF
  1. Q
  1. ;
  1. COLLECT ; Collect Information
  1. ; Input: IBDIV, IBBDT,IBEDT
  1. N IBDT,IBBAT,IBTRAN,IBZ,MRAUSR,NUMDIV,IBDV,ALLDIV
  1. S IBDV=0 F NUMDIV=0:1 S IBDV=$O(IBDIV(IBDV)) Q:'IBDV
  1. S ALLDIV=" "
  1. I IBDIV="ALL" S ALLDIV=" *** ALL DIVISIONS ***"
  1. I NUMDIV>1 S ALLDIV=" *** ALL SELECTED DIVISIONS ***"
  1. ;
  1. S MRAUSR=$$MRAUSR^IBCEMU1() ;Auto-authorizer
  1. S IBDT=IBBDT-.000001
  1. F S IBDT=$O(^IBA(364.1,"ALT",IBDT)) Q:'IBDT Q:IBDT\1>IBEDT D
  1. . S IBBAT=0 F S IBBAT=$O(^IBA(364.1,"ALT",IBDT,IBBAT)) Q:'IBBAT D
  1. .. S IBTRAN=0 F S IBTRAN=$O(^IBA(364,"C",IBBAT,IBTRAN)) Q:'IBTRAN D
  1. ... S IBZ=$G(^IBA(364,IBTRAN,0)) Q:IBZ=""
  1. ... N IBIFN,IBSTAT,IBSEQ,IBBILZ,IBBILST,IBFORM,IBCLERK,IBDV,IBDVN,REFX,REFS,REFT,REFTX,MRACNT,IBREJECT
  1. ... S IBIFN=+IBZ
  1. ... I '$P($G(^DGCR(399,IBIFN,"S")),U,7) Q ; no MRA request
  1. ... S IBSTAT=$P(IBZ,U,3)
  1. ... S IBSEQ=$P(IBZ,U,8) Q:"T"[IBSEQ
  1. ... I '$$WNRBILL^IBEFUNC(IBIFN,IBSEQ) Q ; payer sequence must be Medicare for this transmission
  1. ... S IBBILZ=$G(^DGCR(399,IBIFN,0))
  1. ... S IBBILST=$P(IBBILZ,U,13)
  1. ... S IBFORM=+$P(IBBILZ,U,19)
  1. ... I IBFORM'=2,IBFORM'=3 Q ; not 1500 or UB
  1. ... S IBCLERK=+$P($G(^DGCR(399,IBIFN,"S")),U,8) ; Who requested MRA?
  1. ... S IBCLERK=$P($G(^VA(200,IBCLERK,0)),U)
  1. ... S:IBCLERK="" IBCLERK="UNKNOWN"
  1. ... S IBDV=+$P(IBBILZ,U,22) ; Default division
  1. ... S IBDVN=$P($G(^DG(40.8,IBDV,0)),U) ; Div name
  1. ... S:IBDVN="" IBDVN="UNKNOWN"
  1. ... I IBDIV'="ALL",'$D(IBDIV(IBDV)) Q ;Division filter
  1. ... I 'IBSUM S REFX=$NA(@REF@(IBDVN,IBCLERK,IBFORM)) I NUMDIV'=1 S REFTX=$NA(@REF@(ALLDIV,IBCLERK,IBFORM)) ; all divisions detail
  1. ... S REFS=$NA(@REF@(IBDVN,0,IBFORM)) ; Summary by division
  1. ... I NUMDIV'=1 S REFT=$NA(@REF@(ALLDIV,0,IBFORM)) ; all divisions
  1. ... D TXSTS^IBCEMU2(IBIFN,IBTRAN,.IBREJECT) ; rejected?
  1. ... S MRACNT=$$MRACNT^IBCEMU1(IBIFN) ; how many MRAs?
  1. ... D INC("ALL") ; total no of requests
  1. ... I IBSTAT="C" D INC("ALLC") ;cancelled
  1. ... I IBSTAT="R" D INC("ALLR") ;resubmitted
  1. ... I '$D(@REFS@("TOT",IBIFN)) S ^(IBIFN)="" D INC("TOT") ;unique requests
  1. ... ;no response?
  1. ... I 'IBREJECT,'MRACNT,'$D(@REFS@("NON",IBIFN)) S ^(IBIFN)="" D INC("NON")
  1. ... ;final reject?
  1. ... I 'MRACNT,IBREJECT,'$D(@REFS@("REJF",IBIFN)),IBTRAN=$$LAST364^IBCEF4(IBIFN) D
  1. .... S @REFS@("REJF",IBIFN)="" D INC("REJF")
  1. .... ; MRA?
  1. ... I MRACNT,'$D(@REFS@("MRA",IBIFN)) S ^(IBIFN)="" D
  1. .... D INC("MRA")
  1. .... I $$DENIED(IBIFN) D INC("MRAD")
  1. ... ;any secondary claims?
  1. ... D SECOND
  1. Q
  1. ;
  1. INC(NODE,VALUE) ;Increase the respective value in ^TMP
  1. I 'IBSUM D
  1. . S @REFX@(NODE)=$G(@REFX@(NODE))+$G(VALUE,1)
  1. . I $D(REFTX) S @REFTX@(NODE)=$G(@REFTX@(NODE))+$G(VALUE,1)
  1. . Q
  1. S @REFS@(NODE)=$G(@REFS@(NODE))+$G(VALUE,1)
  1. I $D(REFT) S @REFT@(NODE)=$G(@REFT@(NODE))+$G(VALUE,1)
  1. Q
  1. ;
  1. DENIED(IBIFN) ;MRA requests denied?
  1. ; 361.1 for this bill#
  1. ; if at least one request is 'processed' - MRA is NOT DENIED
  1. N IBDEN,IEN,IBZ
  1. S IBDEN=1
  1. S IEN=0 F S IEN=$O(^IBM(361.1,"B",+$G(IBIFN),IEN)) Q:'IEN D Q:'IBDEN
  1. . S IBZ=$G(^IBM(361.1,IEN,0))
  1. . I $P(IBZ,U,4)'=1 Q ; only MEDICARE
  1. . I $P(IBZ,U,13)=1 S IBDEN=0
  1. Q IBDEN
  1. ;
  1. SECOND ;Secondary claims
  1. N IBAUT,IBTX,IBCBPS,IBNEXT,IBBILS,IBTOT,IBUNR,IB2ND,IBNODE,IBGRPN,IBTYPLN,IBPRP
  1. I $D(@REFS@("SEC",IBIFN)) Q ; Already included
  1. S IBCBPS=$P(IBBILZ,U,21) ; current bill sequence
  1. S IBNEXT=$S(IBSEQ="S":"T",1:"S") ;Next (after MRA) sequence
  1. I IBCBPS'=IBNEXT Q
  1. ; Number of unique sec claims
  1. S @REFS@("SEC",IBIFN)=""
  1. D INC("SEC")
  1. S IBBILS=$G(^DGCR(399,IBIFN,"S")) Q:'$P(IBBILS,U,10) ; Not even authorized
  1. ; Authorized but not yet printed?
  1. I $P(IBBILS,U,10),'$P(IBBILS,U,13) D Q
  1. . I +$$TXMT^IBCEF4(IBIFN)'=1 D INC("AUT") ; Exclude transmittable
  1. ; Check the field 'AUTHORIZER'
  1. S IBAUT=($P(IBBILS,U,11)=MRAUSR) ; Auto-authorized?
  1. S IBTX=$$TRANSM(IBIFN,IBNEXT) ; Transmitted? (present in 364?)
  1. I IBAUT,IBTX S IBNODE="AT" ; Auto-gen Tx
  1. I 'IBAUT,IBTX S IBNODE="MT" ; Manually Tx
  1. I IBAUT,'IBTX S IBNODE="AP" ; Auto-gen Prn
  1. I 'IBAUT,'IBTX S IBNODE="MP" ; Manually Prn
  1. ;
  1. ;Calculate amounts
  1. S IBTOT=+$G(^DGCR(399,IBIFN,"U1"))
  1. S IBUNR=$P($G(^PRCA(430,IBIFN,13)),U,2) ; Medicare Unreimbursable
  1. ; IB*2.0*447 calculate differently for claims w/Medicare supplemental, need plan type now and prior payments
  1. ;S IB2ND=$$PREOBTOT^IBCEU0(IBIFN)
  1. S IBGRPN=+$P($G(^DGCR(399,IBIFN,"I"_$S(IBCBPS="S":2,IBCBPS="T":3,1:1))),U,18),IBTYPLN=$P($G(^IBA(355.3,IBGRPN,0)),U,9)
  1. S IBPRP=$P($G(^DGCR(399,IBIFN,"U2")),U,4) S:IBCBPS="T" IBPRP=IBPRP+$P($G(^DGCR(399,IBIFN,"U2")),U,5)
  1. ; if current payer is primary, or prior payments are a negative amt., set prior payments to 0
  1. I IBCBPS="P"!(IBPRP<0) S IBPRP=0
  1. ; if plan type does NOT have any special calculations, just calculate the old way (PR only)
  1. S IB2ND=$S($$MSEDT^IBCEMU4(IBIFN,IBTYPLN)'="":IBTOT-IBPRP,1:$$PREOBTOT^IBCEU0(IBIFN))
  1. D INC(IBNODE)
  1. D INC(IBNODE_"1",IBTOT)
  1. D INC(IBNODE_"2",IBUNR)
  1. D INC(IBNODE_"3",IB2ND)
  1. Q
  1. ;
  1. TRANSM(IBIFN,IBSEQ) ;was the claim ever transmitted?
  1. ; Does the claim present in 364?
  1. N RES,IBI
  1. S RES=0
  1. S IBI="" F S IBI=$O(^IBA(364,"B",IBIFN,IBI),-1) Q:IBI="" D Q:RES
  1. . I $P($G(^IBA(364,IBI,0)),U,8)=IBSEQ S RES=1
  1. Q RES
  1. ;