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

IBECEA1.m

Go to the documentation of this file.
  1. IBECEA1 ;ALB/RLW - Cancel/Edit/Add... Action Entry Points ; Sep 30, 2020@15:16:44
  1. ;;2.0;INTEGRATED BILLING;**15,27,45,176,312,663,630,784**;21-MAR-94;Build 8
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. PASS ; 'Pass a Charge' Entry Action (added by Jim Moore 4/30/92)
  1. N C,IBII,IBNOS,IBND,IBMSG,IBY,IBLINE,IBSTAT,IBAFY,IBATYP,IBHLDR,IBERROR
  1. N IBARTYP,IBN,IBSEQNO,IBSERV,IBTOTL,IBTRAN,IBIL,IBNOS2,Y,IBXA,IBVSTIEN,IBEXCOPAY
  1. N IBATYPE,IBBLNO,IBCDCHK,IBFR,IBMHVST,IBOEEVDT,IBOENC,IBSTOPDA,Z ; IB*2.0*784
  1. ;
  1. S VALMBCK="R" D EN^VALM2($G(XQORNOD(0)))
  1. I $D(VALMY) I '$$PFSSWARN^IBBSHDWN() S VALMBCK="R" Q
  1. ;
  1. ; Start of IB*2.0*630 changes
  1. N IBDUPCPY S IBDUPCPY="" ; IB*2.0*630
  1. S IBII="" F S IBII=$O(VALMY(IBII)) Q:'IBII D Q:IBDUPCPY
  1. . S IBY=1,IBLINE=^TMP("IBACM",$J,IBII,0)
  1. . S IBNOS2=+$P(^TMP("IBACMIDX",$J,IBII),"^",4)
  1. . ; Check for duplicate copay
  1. . S IBDUPCPY=$$DUPCPYCHK^IBECEA1(IBNOS2)
  1. . ; If duplicate copay exists, display message
  1. . I IBDUPCPY D Q
  1. . . D FULL^VALM1
  1. . . D CPYDISPLAY^IBECEA1(IBNOS2,IBDUPCPY)
  1. . . ; Send user back to selection prompt if duplicate copays exist
  1. . . S VALMBCK="R"
  1. . . Q
  1. . Q
  1. ; If duplicate was found, return user to Action list
  1. Q:IBDUPCPY
  1. ; End of IB*2.0*630 changes
  1. ;
  1. S IBII="" F S IBII=$O(VALMY(IBII)) Q:'IBII D L -^IB(IBNOS2) D MSG
  1. .S IBY=1,IBLINE=^TMP("IBACM",$J,IBII,0)
  1. .S (IBNOS,IBNOS2)=+$P(^TMP("IBACMIDX",$J,IBII),"^",4)
  1. .;
  1. .; - perform up-front edits
  1. .L +^IB(IBNOS2):5 I '$T S IBMSG="was not passed - record not available, please try again" Q
  1. .S IBND=$G(^IB(IBNOS2,0)) I IBND="" S IBMSG="was not passed - record missing the zeroth node" Q
  1. .I $P(IBND,"^",12) S IBMSG="was not passed - the charge already has an AR Transaction Number" Q
  1. .S IBSTAT=+$P(IBND,"^",5) I $P($G(^IBE(350.21,IBSTAT,0)),"^",4) S IBMSG="was not passed - the status indicates that the charge is billed" Q
  1. .I $P(IBND,"^",7)'>0 S IBMSG="was not passed - there is no charge amount" Q
  1. .S IBATYPE=+$P(IBND,U,3) ; IB*2.0*784
  1. .S IBSEQNO=$P($G(^IBE(350.1,IBATYPE,0)),"^",5) I 'IBSEQNO S IBMSG="was not passed (Bulletin will be generated)",IBY="-1^IB023" Q ; IB*2.0*784
  1. .I $P($G(^IBE(350.1,IBATYPE,0)),"^",11)=6 S IBMSG="was not passed - CHAMPVA charges must be cancelled and rebilled" Q ; IB*2.0*784
  1. .S IBHLDR=(IBSTAT=21)
  1. .; - pass charge to AR and update list
  1. .D ^IBR S IBY=$G(Y)
  1. .S IBND=$G(^IB(IBNOS2,0))
  1. .S (IBSTAT,Y)=$P(IBND,"^",5),C=$P($G(^DD(350,.05,0)),"^",2) D Y^DIQ
  1. .S IBLINE=$$SETSTR^VALM1(Y,IBLINE,+$P(VALMDDF("STATUS"),"^",2),+$P(VALMDDF("STATUS"),"^",3))
  1. .S IBBLNO=$P(IBND,U,11) ; IB*2.0*784
  1. .S IBLINE=$$SETSTR^VALM1($P(IBBLNO,"-",2),IBLINE,+$P(VALMDDF("BILL#"),"^",2),+$P(VALMDDF("BILL#"),"^",3)) ; IB*2.0*784
  1. .S ^TMP("IBACM",$J,IBII,0)=IBLINE
  1. .S IBMSG=$S(+IBY=-1:"was not passed -",IBSTAT=8:"has now been placed ON HOLD",1:"has now been passed")
  1. .S IBFR=$P(IBND,U,14) ; IB*2.0*784
  1. .;IB*2.0*663 If charge successfully passed, extract the bill number and update the visit tracking database if this is a CC URGENT CARE Charge
  1. .I IBBLNO'="",$P($G(^IBE(350.1,IBATYPE,0)),U)["CC URGENT CARE" D ; IB*2.0*784
  1. .. ; send update to the Visit Tracking file.
  1. .. S IBVSTIEN=$$FNDVST^IBECEA4("ON HOLD",IBFR,$P(IBND,U,2)) ; IB*2.0*784
  1. .. ;ADD THE NOT FOUND MESSAGE HERE?
  1. .. D:+IBVSTIEN UPDATE^IBECEA38(IBVSTIEN,2,IBBLNO,"",1,.IBERROR) ; IB*2.0*784
  1. .; IB*2.0*784
  1. .S IBSTOPDA=$P(IBND,U,20),IBOEEVDT=$P(IBND,U,17),IBOENC=$P($P(IBND,U,4),";"),IBCDCHK=0
  1. .I $P($G(^IBE(350.1,IBATYPE,0)),U)["CC MH" S IBCDCHK=1
  1. .I 'IBCDCHK,$$CDCHK^IBECEAMH($$GET1^DIQ(352.5,IBSTOPDA_",",.01,"E"),IBFR) S IBCDCHK=1
  1. .I 'IBCDCHK,$$ISCDELIG^IBECEAMH(IBFR) I $P(IBOENC,":")="409.68" S IBCDCHK=$$CHKST44^IBECEAMH($P(IBOENC,":",2))
  1. .I 'IBCDCHK,$P(IBOENC,":")=409.68 S IBCDCHK=$$OECHK^IBECEAMH($P(IBOENC,":",2),IBOEEVDT)
  1. .I IBBLNO'="",IBCDCHK D
  1. ..S IBMHVST=$O(^IBMH(351.83,"D",IBNOS2,"")) Q:'IBMHVST
  1. ..D MESS2B^IBECEAMH S Z=$$UPDATE^IBECEAMH(0,IBMHVST,2,IBBLNO,"",1,.IBERROR)
  1. ..Q
  1. .;
  1. .; - if there is no active billing clock, add one
  1. .; added check for LTC, don't do this for LTC
  1. .S IBXA=$P($G(^IBE(350.1,IBATYPE,0)),"^",11) ; IB*2.0*784
  1. .I $P(IBND,"^",14),'$P($G(^IB(IBNOS2,1)),"^",5),'$D(^IBE(351,"ACT",DFN)),IBXA'=8,IBXA'=9 D
  1. ..W !,"This patient has no active billing clock. Adding a new one... "
  1. ..S IBCLDT=$P(IBND,"^",14)
  1. ..I '$D(IBSERV) D SERV^IBAUTL2
  1. ..D CLADD^IBAUTL3 W $S(IBY>0:"done.",1:"error (see msg)")
  1. .;
  1. .; - if charge was on hold pending review, pass data to IVM
  1. .I IBHLDR W !,"Passing billing data to the IVM package... " D IVM^IBAMTV32(IBND) W "done."
  1. Q
  1. ;
  1. MSG ; Display results message.
  1. Q:+$G(IBDUPCPY)>0 ; IB*2.0*630
  1. W !,"Charge #"_IBII_" "_IBMSG I +IBY=-1 D ^IBAERR1
  1. W ! S DIR(0)="E" D ^DIR K DIR W !
  1. Q
  1. ;
  1. ;
  1. ADD ; 'Add a Charge' Entry Action
  1. I '$$PFSSWARN^IBBSHDWN() S VALMBCK="R" Q ;IB*2.0*312
  1. G ^IBECEA3
  1. ;
  1. UPD ; 'Edit a Charge' Entry Action
  1. S IBAUPD=1
  1. ;
  1. CAN ; 'Cancel a Charge' Entry Action
  1. D EN^VALM2(IBNOD(0)) I '$O(VALMY(0)) S VALMBCK="" G CANQ
  1. I $G(IBAUPD) I '$$PFSSWARN^IBBSHDWN() S VALMBCK="R" Q ;IB*2.0*312
  1. ;
  1. S (IBNBR,IBCOMMIT)=0,VALMBCK="R"
  1. F S IBNBR=$O(VALMY(IBNBR)) Q:'IBNBR D ^@$S($G(IBAUPD):"IBECEA2",1:"IBECEA4")
  1. I IBCOMMIT S IBBG=VALMBG W !,"Rebuilding list of charges..." D ARRAY^IBECEA0 S VALMBG=IBBG
  1. K IBBG,IBNBR,IBAUPD,IBCOMMIT
  1. CANQ Q
  1. ;
  1. PAUSE ; Keep this around for awhile.
  1. W ! S DIR(0)="E" D ^DIR K DIR W !
  1. Q
  1. ;
  1. ; Beginning of IB*2.0*630 changes
  1. DUPCPYCHK(IBIENS) ;
  1. ; Input: IBIENS = A single charge IEN to release or a series of charge IENs separated by commas
  1. ; Output: 0: No Duplicate Copay exists for the patient/date
  1. ; #: IEN of the Duplicate Copay
  1. ; If the charge currently being released is a Copay charge, then check for duplicates
  1. ; All charges including ON HOLD Copay charges will be in the ACHDT x-ref
  1. N IBARY,IBDT,IBDUPCPY,IBIEN,IBPRTY
  1. ; Initialize Copay check to 0:No duplicate copay for Patient/Date
  1. S IBDUPCPY=0
  1. ; Prioritize charges in Y into IBARY array
  1. D IBARY(IBIENS,.IBARY)
  1. ; Quit if no entries in IBARY
  1. Q:'$D(IBARY) 0
  1. ; Loop through charges in IBARY by Date, Priority and IEN
  1. S IBDT=""
  1. F S IBDT=$O(IBARY(IBDT)) Q:IBDT="" D Q:IBDUPCPY
  1. . S IBPRTY=""
  1. . F S IBPRTY=$O(IBARY(IBDT,IBPRTY)) Q:'IBPRTY D Q:IBDUPCPY
  1. . . S IBIEN=""
  1. . . F S IBIEN=$O(IBARY(IBDT,IBPRTY,IBIEN)) Q:'IBIEN D Q:IBDUPCPY
  1. . . . ; Check charge in IBARY against any existing charge in AR
  1. . . . S IBDUPCPY=$$COPAYCHK^IBAUTL8(DFN,IBIEN,1)
  1. . . . ; If a duplicate copay was found Quit
  1. . . . Q:IBDUPCPY
  1. . . Q
  1. . Q
  1. Q IBDUPCPY
  1. ;
  1. IBARY(IBIENS,IBARY) ; Process user selection and save in IBARY ordered by priority
  1. ; IBARY will only contain the Copay related charges that need to be checked for duplicates.
  1. ; Input: Y = A single charge IEN to release or a series of charge IENs separated by commas
  1. ; IBARY = Array name passed by reference for return array.
  1. ; Output: IBARY(Date of Interest, Priority Index, IEN in "#350)=""
  1. N IBAT,IBDATA0,IBDT,IBINDX,IBIEN
  1. ; Loop through selected IENs
  1. F IBINDX=1:1 S IBIEN=$P(IBIENS,",",IBINDX) Q:IBIEN="" D
  1. . S IBDATA0=$G(^IB(IBIEN,0))
  1. . Q:IBDATA0=""
  1. . ; Load ACTION TYPE (#.03)
  1. . S IBAT=$P(IBDATA0,U,3)
  1. . Q:IBAT=""
  1. . ; Load EVENT DATE (#.17)
  1. . S IBDT=$P(IBDATA0,U,17)
  1. . ; If EVENT DATE not defined, use DATE BILLED FROM (#.14)
  1. . I IBDT="" S IBAT=$P(IBDATA0,U,14)
  1. . Q:IBDT=""
  1. . ; Check prioritization Billing Group #1
  1. . I IBAT=130 S IBARY(IBDT,1,IBIEN)="" Q
  1. . ; Billing Group #2
  1. . I "^16^17^18^19^20^21^22^23^24^"[("^"_IBAT_"^") D Q
  1. . . S IBARY(IBDT,2,IBIEN)=""
  1. . ; Billing Group #3
  1. . I "^45^48^133^"[("^"_IBAT_"^") D Q
  1. . . S IBARY(IBDT,3,IBIEN)=""
  1. . ; Billing Group #4 - Outpatient Observation Copays have precedence over other copays in Billing Group #3
  1. . I IBAT=74 S IBARY(IBDT,4,IBIEN)="" Q
  1. . ; Billing Group #4 - Everything but Outpatient Observation Copays
  1. . I "^51^136^203^"[("^"_IBAT_"^") D Q
  1. . . S IBARY(IBDT,5,IBIEN)=""
  1. . ; Billing Group #8
  1. . I "^89^92^95^105^108^"[("^"_IBAT_"^") D Q
  1. . . S IBARY(IBDT,6,IBIEN)=""
  1. Q
  1. ;
  1. GETINFO(IBIEN) ; Display Duplicate Copay info to the user.
  1. ; IBIEN = Existing Copay already charged for Patient/Date
  1. N IBBIL,IBCSTOP,IBDATE,IBTCH,IBTEXT,IBTRN,IBATYP
  1. ; Get data in External format for charge being passed to AR
  1. S IBATYP=$$GET1^DIQ(350,IBIEN_",",".03","E") ; ACTION TYPE
  1. S IBATYP=$E(IBATYP,1,25)
  1. S IBTCH=$$GET1^DIQ(350,IBIEN_",",".07","E") ; TOTAL CHARGE
  1. S IBBIL=$$GET1^DIQ(350,IBIEN_",",".11","E") ; AR BILL NUMBER
  1. S IBTRN=$$GET1^DIQ(350,IBIEN_",",".12","E") ; AR TRANSACTION NUMBER
  1. S IBCSTOP=$$GET1^DIQ(350,IBIEN_",",".2","E") ; CLINIC STOP
  1. S IBCSTOP=$J(IBCSTOP,3)
  1. S IBDATE=$$GET1^DIQ(350,IBIEN_",",".17","I") ; EVENT DATE
  1. I IBDATE="" S IBDATE=$$GET1^DIQ(350,IBIEN_",",".14","I") ; DATE BILLED FROM
  1. S IBDATE=$$FMTE^XLFDT(IBDATE,"2Z")
  1. S IBTEXT=IBDATE,$E(IBTEXT,10)=" "
  1. S IBTEXT=IBTEXT_IBATYP,$E(IBTEXT,37)=" "
  1. S IBTEXT=IBTEXT_IBCSTOP,$E(IBTEXT,44)="$"
  1. S IBTEXT=IBTEXT_$J(IBTCH,9,2),$E(IBTEXT,55)=" "
  1. S IBTEXT=IBTEXT_IBBIL,$E(IBTEXT,69)=" "
  1. S IBTEXT=IBTEXT_IBTRN
  1. Q IBTEXT
  1. ;
  1. CPYDISPLAY(IBIEN1,IBIEN2) ; Display Duplicate Copay info to the user.
  1. ; Input: IBIEN1 - IEN of 1st charge - Currently in IB
  1. ; IBIEN2 - IEN of 2nd charge - Could be in IB or AR
  1. ;
  1. ; Output: Info related to the duplicate charges
  1. ;
  1. Q:IBIEN1=""!(IBIEN2="")
  1. ; Get info to display
  1. N IBFLAG,IBTEXT1,IBTEXT2,IBTEXT3,IBTRANS
  1. S IBTEXT1=$$GETINFO^IBECEA1(IBIEN1)
  1. S IBTEXT2=$$GETINFO^IBECEA1(IBIEN2)
  1. S IBTEXT3=""
  1. ; Load AR TRANSACTION NUMBER of Duplicate Copay found
  1. S IBTRANS=$$GET1^DIQ(350,IBIEN2_",",".12","I")
  1. S IBFLAG=+IBTRANS
  1. ; For Inpatient copays, check for an existing Outpatient Observation copays
  1. ; and display that info if it exists.
  1. I $P(IBIEN2,U,2) S IBTEXT3=$$GETINFO^IBECEA1($P(IBIEN2,U,2))
  1. ;
  1. W !
  1. ; Display message if both charges are only in IB
  1. I 'IBFLAG D
  1. . W !,"There are ",$S(IBTEXT3'="":"three ",1:"two "),"On Hold copay charges in the selection you made for the same"
  1. . W !,"patient/date."
  1. . I IBTEXT3'="" D
  1. . . W !,"Also check the following Outpatient Observation charge."
  1. . W !!,"Date Charge Type Stop Charge"
  1. ;
  1. ; Display message if the duplicate charge has already been passed AR
  1. I IBFLAG D
  1. . W !,"There are ",$S(IBTEXT3'="":"three ",1:"two "),"copay charges for this Patient/Date."
  1. . W !,"The first charge is currently On Hold, the second charge has already been"
  1. . W !,"passed to AR:"
  1. . I IBTEXT3'="" D
  1. . . W !,"Also check the following Outpatient Observation charge."
  1. . W !!,"Date Charge Type Stop Charge Bill Transaction"
  1. ;
  1. ; Display info for the charges
  1. W !,"================================================================================"
  1. W !,IBTEXT1
  1. W !,IBTEXT2
  1. I IBTEXT3'="" W !,IBTEXT3
  1. ;
  1. W !!,"Please review these charges and determine what action(s) should be taken."
  1. D PAUSE
  1. Q
  1. ; End of IB*2.0*630 changes