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

BPSNCPD2.m

Go to the documentation of this file.
  1. BPSNCPD2 ;BHAM ISC/LJE - Continuation of BPSNCPDP (IB Billing Determination) ;11/7/07 16:01
  1. ;;1.0;E CLAIMS MGMT ENGINE;**1,5,6,7,8,10,11,20,28**;JUN 2004;Build 22
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. ;External reference $$RX^IBNCPDP supported by DBIA 4299
  1. ;
  1. ; EN - Call IB Billing Determination. If good to go, update MOREDATA array
  1. ; Notes about variables
  1. ;Input:
  1. ; DFN - PATIENT file #2 ien
  1. ; BWHERE - Where the code is called from and what needs to be done
  1. ; MOREDATA - Initialized by BPSNCPDP and more data is added here.
  1. ; Should be passed by reference.
  1. ; BPSARRY - Created by STARRAY^BPSNCPD1 and used for IB Determination
  1. ; IB - Returned to calling routine. Should be passed by reference.
  1. ; 1 = Billable
  1. ; 0 or 2 - Not Billable
  1. ;
  1. ; Variable used/needed but not passed in as a parameter
  1. ; CERTIEN - BPS Certification IEN - Not passed but newed/set in BPSNCPDP
  1. ; BPJOBFLG - Not passed in but newed/set in BPSNCPCP
  1. ;
  1. EN(DFN,BWHERE,MOREDATA,BPSARRY,IB) ;
  1. I '$G(CERTIEN) D
  1. . ;
  1. . I $G(BPSARRY("ACT DTY OVR")),'$G(BPSARRY("PLAN")) D
  1. . . N IEN5902
  1. . . S IEN5902=$$GET1^DIQ(9002313.59,IEN59,901,"I")
  1. . . I 'IEN5902 S IEN5902=1
  1. . . S BPSARRY("PLAN")=$$GET1^DIQ(9002313.59902,IEN5902_","_IEN59_",",".01","I")
  1. . ;
  1. . ;For NCPDP IB call to see if we need to 3rd Party Bill and if so, get insurance/payer sheet info
  1. . S MOREDATA("BILL")=$$RX^IBNCPDP(DFN,.BPSARRY) ;IB CALL
  1. . Q:'$D(MOREDATA("BILL"))
  1. . ;
  1. . ; If calling program is the ECME user screen and we can't bill because of NEEDS SC DETERMINATION
  1. . ; or EI, then prompt the user to see if they want to bill
  1. . I $F(".ERES.ERWV.ERNB.","."_BWHERE_"."),$P(MOREDATA("BILL"),U,1)=0,$G(BPSARRY("SC/EI NO ANSW"))]"",$G(BPJOBFLG)'="B" D
  1. .. N DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT,I,BPEISC
  1. .. F I=1:1:$L($G(BPSARRY("SC/EI NO ANSW")),",") S BPEISC=$P($G(BPSARRY("SC/EI NO ANSW")),",",I) I BPEISC]"" D
  1. ... W !,"The prescription is potentially ",BPEISC,"-related and needs ",BPEISC," determination."
  1. ... W !,"Prescriptions related to ",BPEISC," cannot be billed to Third Party Insurance.",!
  1. .. S DIR(0)="Y",DIR("A")="Are you sure you want to bill this prescription"
  1. .. S DIR("B")="NO"
  1. .. S DIR("?")="If you want to bill this prescription, enter 'Yes' - otherwise, enter 'No'"
  1. .. W ! D ^DIR K DIR
  1. .. I '+Y Q
  1. .. S BPSARRY("SC/EI OVR")=1
  1. .. S MOREDATA("BILL")=$$RX^IBNCPDP(DFN,.BPSARRY) ;Call IB again
  1. . ;
  1. . ; Quit if no response from IB call
  1. . Q:'$D(MOREDATA("BILL"))
  1. . ;
  1. . S MOREDATA("ELIG")=$P(MOREDATA("BILL"),U,3) ; patient eligibility V, T, or C
  1. . ;
  1. . S IB=1 ; assume it is billable for now
  1. . ;
  1. . M MOREDATA("IBDATA")=BPSARRY("INS") ; insurance array nodes from IB billing determination
  1. . ;
  1. . ; Clean up the "IBDATA" array nodes as necessary
  1. . ; The code below checks if Sequence #1 is missing and move the next number down if needed.
  1. . ; This can happen when the COB indicator in IB has multiple insurances assigned as secondary but none are
  1. . ; assigned as primary
  1. . I '$D(MOREDATA("IBDATA",1)) D
  1. .. N WW
  1. .. S WW=$O(MOREDATA("IBDATA",""))
  1. .. I WW'="" M MOREDATA("IBDATA",1)=MOREDATA("IBDATA",WW) K MOREDATA("IBDATA",WW)
  1. .. Q
  1. . ;
  1. . S MOREDATA("PATIENT")=$G(DFN)
  1. . S MOREDATA("RX")=$G(BPSARRY("IEN"))
  1. . S $P(MOREDATA("BPSDATA",1),U,1)=$G(BPSARRY("NCPDP QTY"))
  1. . S $P(MOREDATA("BPSDATA",1),U,2)=$G(BPSARRY("COST"))
  1. . S $P(MOREDATA("BPSDATA",1),U,3)=$G(BPSARRY("NDC"))
  1. . S $P(MOREDATA("BPSDATA",1),U,4)=$G(BPSARRY("FILL NUMBER"))
  1. . S $P(MOREDATA("BPSDATA",1),U,5)="" ; Certification Mode
  1. . S $P(MOREDATA("BPSDATA",1),U,6)="" ; Certification IEN
  1. . S $P(MOREDATA("BPSDATA",1),U,7)=$G(BPSARRY("NCPDP UNITS"))
  1. . S $P(MOREDATA("BPSDATA",1),U,8)=$G(BPSARRY("QTY")) ; Billing Quantity
  1. . S $P(MOREDATA("BPSDATA",1),U,9)=$G(BPSARRY("UNITS")) ; Billing Units
  1. . ;
  1. . ; now check IB billing determination results and set variable IB
  1. . I $P(MOREDATA("BILL"),U,1)=0 S IB=2 ;IB says not to bill
  1. . ;
  1. . ; bps*1*20 - file TRI/CVA Non-Billable entries into BPS Transaction
  1. . I IB=2,MOREDATA("ELIG")="T"!(MOREDATA("ELIG")="C") D BPTCNB(.MOREDATA,.BPSARRY)
  1. . Q
  1. ;
  1. ; If certification mode on and no IB result (somewhat redundant since IB is not called
  1. ; for certification), get data from BPS Certification table
  1. I $G(CERTIEN),'$G(IB) D
  1. . N NODE,FLD,NFLD,CERTARY
  1. . S MOREDATA("IBDATA",1,1)="",MOREDATA("IBDATA",1,2)=""
  1. . S MOREDATA("IBDATA",1,3)="",MOREDATA("BPSDATA",1)=""
  1. . S MOREDATA("BILL")="1^^V",IB=1
  1. . S MOREDATA("PATIENT")=$$GET1^DIQ(9002313.31,CERTIEN,903,"I") ;Patient from certification record
  1. . I 'MOREDATA("PATIENT") S MOREDATA("PATIENT")=$G(DFN) ; Patient
  1. . S MOREDATA("RX")=$G(BPSARRY("IEN")) ; RX
  1. . S MOREDATA("ELIG")="V" ; Eligibility
  1. . S $P(MOREDATA("BPSDATA",1),U,5)=1 ;Certify Mode
  1. . S $P(MOREDATA("BPSDATA",1),U,6)=CERTIEN ;Cert IEN
  1. . S $P(MOREDATA("BPSDATA",1),U,8)="" ; Billing Quantity
  1. . S $P(MOREDATA("BPSDATA",1),U,9)="" ; Billing Units
  1. . S $P(MOREDATA("IBDATA",1,1),U,1)=1 ;Plan IEN
  1. . S $P(MOREDATA("IBDATA",1,1),U,4)=$$GET1^DIQ(9002313.31,CERTIEN,.04,"E") ;Billing Payer Sheet Name
  1. . S $P(MOREDATA("IBDATA",1,1),U,10)="01" ;Home State Plan
  1. . S $P(MOREDATA("IBDATA",1,1),U,11)=$$GET1^DIQ(9002313.31,CERTIEN,.05,"E") ;Reversal Payer Sheet Name
  1. . S $P(MOREDATA("IBDATA",1,1),U,12)="" ;Rebill Payer Sheet Name
  1. . S $P(MOREDATA("IBDATA",1,1),U,14)="" ;Plan Name
  1. . S $P(MOREDATA("IBDATA",1,1),U,15)=$$GET1^DIQ(9002313.31,CERTIEN,.08,"E") ;Eligibility Payer Sheet Name
  1. . S $P(MOREDATA("IBDATA",1,1),U,16)=$$GET1^DIQ(9002313.31,CERTIEN,.04,"I") ;Billing Payer Sheet IEN
  1. . S $P(MOREDATA("IBDATA",1,1),U,17)=$$GET1^DIQ(9002313.31,CERTIEN,.05,"I") ;Reversal Payer Sheet IEN
  1. . S $P(MOREDATA("IBDATA",1,1),U,18)="" ; Rebill Payer Sheet IEN
  1. . S $P(MOREDATA("IBDATA",1,1),U,19)=$$GET1^DIQ(9002313.31,CERTIEN,.08,"I") ;Eligibility Payer Sheet IEN
  1. . S $P(MOREDATA("IBDATA",1,2),U,5)=0 ;Admin Fee
  1. . S $P(MOREDATA("IBDATA",1,3),U,1)="" ;Group Name
  1. . S $P(MOREDATA("IBDATA",1,3),U,2)="" ;Insurance Company Phone Number
  1. . S $P(MOREDATA("IBDATA",1,3),U,3)="T00010" ;Plan ID
  1. . S $P(MOREDATA("IBDATA",1,3),U,4)="V" ;Plan Type
  1. . S $P(MOREDATA("IBDATA",1,3),U,5)="" ;Insurance Company IEN
  1. . S $P(MOREDATA("IBDATA",1,3),U,6)=$$GET1^DIQ(9002313.31,CERTIEN,.07,"I") ;COB Indicator
  1. . I $P(MOREDATA("IBDATA",1,3),U,6)="" S $P(MOREDATA("IBDATA",1,3),U,6)=1
  1. . S $P(MOREDATA("IBDATA",1,3),U,7)=1 ;Policy Number (needed for eligibility transmissions)
  1. . S $P(MOREDATA("IBDATA",1,3),U,8)=1 ;Maximum Transactions
  1. . ;
  1. . ;Get data from non-multiple fields and add to MOREDATA
  1. . K CERTARY D GETS^DIQ(9002313.31,CERTIEN_",","1*","","CERTARY")
  1. . S NODE="" F S NODE=$O(CERTARY(9002313.311,NODE)) Q:NODE="" D
  1. .. S FLD="" F S FLD=$O(CERTARY(9002313.311,NODE,FLD)) Q:FLD="" D
  1. ... I FLD=.01 S NFLD=CERTARY(9002313.311,NODE,FLD) D
  1. .... I NFLD=101 S $P(MOREDATA("IBDATA",1,1),U,2)=CERTARY(9002313.311,NODE,.02) ;BIN
  1. .... I NFLD=104 S $P(MOREDATA("IBDATA",1,1),U,3)=CERTARY(9002313.311,NODE,.02) ;PCN
  1. .... I NFLD=110 S $P(MOREDATA("IBDATA",1,1),U,13)=CERTARY(9002313.311,NODE,.02) ;Certification ID
  1. . ;
  1. . ;Get data from multiple fields and add to MOREDATA
  1. . K CERTARY D GETS^DIQ(9002313.31,CERTIEN_",","2*","","CERTARY")
  1. . S NODE="" F S NODE=$O(CERTARY(9002313.3121,NODE)) Q:NODE="" D
  1. .. S FLD="" F S FLD=$O(CERTARY(9002313.3121,NODE,FLD)) Q:FLD="" D
  1. ... I FLD=.01 S NFLD=CERTARY(9002313.3121,NODE,FLD) D
  1. .... I NFLD=301 S $P(MOREDATA("IBDATA",1,1),U,5)=CERTARY(9002313.3121,NODE,.02) ;Group ID
  1. .... I NFLD=302 S $P(MOREDATA("IBDATA",1,1),U,6)=CERTARY(9002313.3121,NODE,.02) ;Cardholder ID
  1. .... I NFLD=306 S $P(MOREDATA("IBDATA",1,1),U,7)=CERTARY(9002313.3121,NODE,.02) ;Patient Rel Code
  1. .... I NFLD=312 S $P(MOREDATA("IBDATA",1,1),U,8)=CERTARY(9002313.3121,NODE,.02) ;Cardholder First Name
  1. .... I NFLD=313 S $P(MOREDATA("IBDATA",1,1),U,9)=CERTARY(9002313.3121,NODE,.02) ;Cardholder Last Name
  1. .... I NFLD=412 S $P(MOREDATA("IBDATA",1,2),U,1)=CERTARY(9002313.3121,NODE,.02) ;Dispensing Fee
  1. .... I NFLD=423 S $P(MOREDATA("IBDATA",1,2),U,2)=CERTARY(9002313.3121,NODE,.02) ;Basis of Cost Determination
  1. .... I NFLD=426 S $P(MOREDATA("IBDATA",1,2),U,3)=CERTARY(9002313.3121,NODE,.02) ;Usual & Customary - Base Price
  1. .... I NFLD=430 S $P(MOREDATA("IBDATA",1,2),U,4)=CERTARY(9002313.3121,NODE,.02) ;Gross Amt Due
  1. .... I NFLD=442 S $P(MOREDATA("BPSDATA",1),U,1)=CERTARY(9002313.3121,NODE,.02) ;Quantity Dispensed
  1. .... I NFLD=409 S $P(MOREDATA("BPSDATA",1),U,2)=CERTARY(9002313.3121,NODE,.02) ;Unit Cost
  1. .... I NFLD=407 S $P(MOREDATA("BPSDATA",1),U,3)=CERTARY(9002313.3121,NODE,.02) ;NDC
  1. .... I NFLD=403 S $P(MOREDATA("BPSDATA",1),U,4)=+CERTARY(9002313.3121,NODE,.02) ;Fill #
  1. .... I NFLD=600 S $P(MOREDATA("BPSDATA",1),U,7)=CERTARY(9002313.3121,NODE,.02) ;Unit of Measure
  1. . ;
  1. . ; If Gross Amt Due is missing, use Usual and Customary
  1. . I $P(MOREDATA("IBDATA",1,2),U,4)="" S $P(MOREDATA("IBDATA",1,2),U,4)=$P(MOREDATA("IBDATA",1,2),U,3)
  1. . Q
  1. ;
  1. ; Uppercase the IBDATA
  1. S MOREDATA("IBDATA",1,1)=$$UP^XLFSTR($G(MOREDATA("IBDATA",1,1)))
  1. S MOREDATA("IBDATA",1,2)=$$UP^XLFSTR($G(MOREDATA("IBDATA",1,2)))
  1. S MOREDATA("BPSDATA",1)=$$UP^XLFSTR($G(MOREDATA("BPSDATA",1)))
  1. ;
  1. Q
  1. ;
  1. BPTCNB(MOREDATA,BPSARRY) ; Add TRICARE/CHAMPVA non-billable entry to BPS Transaction - BPS*1*20
  1. ;
  1. N BPSELD,IEN59,RXIEN,FILL,COB
  1. ;
  1. ; Uppercase the IBDATA before going further
  1. S MOREDATA("IBDATA",1,1)=$$UP^XLFSTR($G(MOREDATA("IBDATA",1,1)))
  1. S MOREDATA("IBDATA",1,2)=$$UP^XLFSTR($G(MOREDATA("IBDATA",1,2)))
  1. S MOREDATA("BPSDATA",1)=$$UP^XLFSTR($G(MOREDATA("BPSDATA",1)))
  1. ;
  1. S BPSELD=$S(MOREDATA("ELIG")="T":"TRICARE",MOREDATA("ELIG")="C":"CHAMPVA",1:"UNKNOWN")
  1. S MOREDATA("REQ TYPE")="N" ; TRICARE/CHAMPVA non-billable entry
  1. S MOREDATA("SUBMIT TIME")=$$NOW^XLFDT ; submit time is right now
  1. S MOREDATA("PAYER SEQUENCE")=$G(BPSARRY("RXCOB")) ; payer sequence/COB
  1. S MOREDATA("POLICY")=$P($G(MOREDATA("IBDATA",1,3)),U,7) ; 2.312 policy# ien
  1. S MOREDATA("NON-BILLABLE REASON")=$P($G(MOREDATA("BILL")),U,2) ; reason not billable
  1. S MOREDATA("NON-BILLABLE CLOSED")=0 ; open by default when it is created
  1. ;
  1. S RXIEN=$G(MOREDATA("RX"))
  1. S FILL=$G(BPSARRY("FILL NUMBER"))
  1. S COB=$G(BPSARRY("RXCOB"))
  1. S IEN59=$$IEN59^BPSOSRX(RXIEN,FILL,COB)
  1. I 'IEN59 G BPTCNBX
  1. ;
  1. D LOG^BPSOSL(IEN59,$T(+0)_"-Start of Adding BPS Transaction for Non-Billable Entry")
  1. D LOG^BPSOSL(IEN59,$T(+0)_"-Patient Eligibility is "_BPSELD)
  1. ;
  1. D EN^BPSOSIZ(IEN59,.MOREDATA,"",1) ; adds the entry to 9002313.59
  1. ;
  1. D LOG^BPSOSL(IEN59,$T(+0)_"-Validating the BPS Transaction for Non-Billable Entry")
  1. D LOG^BPSOSL(IEN59,$T(+0)_"-Contents of ^BPST("_IEN59_"):")
  1. D LOG59^BPSOSQA(IEN59)
  1. ;
  1. D LOG^BPSOSL(IEN59,$T(+0)_"-End of Adding BPS Transaction for Non-Billable Entry")
  1. ;
  1. ; Update the status of this newly created BPS Transaction to be 99 so it gets filed in BPS Log of Transactions also
  1. D SETSTAT^BPSOSU(IEN59,99) ; for non-billable entries
  1. ;
  1. BPTCNBX ;
  1. Q
  1. ;