| 1 | BPSNCPD2 ;BHAM ISC/LJE - Continuation of BPSNCPDP (IB Billing Determiation) ;08/01/03
 | 
|---|
| 2 |  ;;1.0;E CLAIMS MGMT ENGINE;**1,5**;JUN 2004;Build 45
 | 
|---|
| 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  ;External reference $$RX^IBNCPDP supported by DBIA 4299
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  ; EN - Call IB Billing Determination.  If good to go, update MOREDATA array
 | 
|---|
| 8 |  ; Notes about variables
 | 
|---|
| 9 |  ;input:
 | 
|---|
| 10 |  ;   DFN - PATIENT file #2 ien
 | 
|---|
| 11 |  ;   BWHERE - shows where the code is called from and what needs to be done
 | 
|---|
| 12 |  ;   the following should be passed by reference:
 | 
|---|
| 13 |  ;   MOREDATA - Initialized by BPSNCPDP and more data is added here
 | 
|---|
| 14 |  ;   BPSARRY  - Created by STARRAY^BPSNCPD1 and used for IB Determination
 | 
|---|
| 15 |  ;   IB    - Returned to BPSNCPDP
 | 
|---|
| 16 |  ;   CERTIEN - BPS Certification IEN - Not passed but newed/set in BPSNCPDP
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 | EN(DFN,BWHERE,MOREDATA,BPSARRY,IB) ;
 | 
|---|
| 19 |  I '$G(CERTIEN) D  I IB=2 Q
 | 
|---|
| 20 |  . ;
 | 
|---|
| 21 |  . ;For NCPDP IB call to see if we need to 3rd Party Bill and if so, get insurance/payer sheet info
 | 
|---|
| 22 |  . S MOREDATA("BILL")=$$RX^IBNCPDP(DFN,.BPSARRY)  ;IB CALL
 | 
|---|
| 23 |  . Q:'$D(MOREDATA("BILL"))
 | 
|---|
| 24 |  . ;
 | 
|---|
| 25 |  . ; If calling program is the ECME user screen and we can't bill because of NEEDS SC DETERMINATION
 | 
|---|
| 26 |  . ; or EI, then prompt the user to see if they want to bill
 | 
|---|
| 27 |  . I BWHERE="ERES",$P(MOREDATA("BILL"),U,1)=0,$G(BPSARRY("SC/EI NO ANSW"))]"" D
 | 
|---|
| 28 |  .. N DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT,I,BPEISC
 | 
|---|
| 29 |  .. F I=1:1:$L($G(BPSARRY("SC/EI NO ANSW")),",") S BPEISC=$P($G(BPSARRY("SC/EI NO ANSW")),",",I) I BPEISC]"" D
 | 
|---|
| 30 |  ... W !,"The prescription is potentially ",BPEISC,"-related and needs ",BPEISC," determination."
 | 
|---|
| 31 |  ... W !,"Prescriptions related to ",BPEISC," cannot be billed to Third Party Insurance.",!
 | 
|---|
| 32 |  .. S DIR(0)="Y",DIR("A")="Are you sure you want to bill this prescription"
 | 
|---|
| 33 |  .. S DIR("B")="NO"
 | 
|---|
| 34 |  .. S DIR("?")="If you want to bill this prescription, enter 'Yes' - otherwise, enter 'No'"
 | 
|---|
| 35 |  .. W ! D ^DIR K DIR
 | 
|---|
| 36 |  .. I '+Y Q
 | 
|---|
| 37 |  .. S BPSARRY("SC/EI OVR")=1
 | 
|---|
| 38 |  .. S MOREDATA("BILL")=$$RX^IBNCPDP(DFN,.BPSARRY)  ;Call IB again
 | 
|---|
| 39 |  . ;
 | 
|---|
| 40 |  . ; Quit if no response from IB call
 | 
|---|
| 41 |  . Q:'$D(MOREDATA("BILL"))
 | 
|---|
| 42 |  . I $P(MOREDATA("BILL"),U,1)=0 S IB=2 Q  ;IB says not to bill
 | 
|---|
| 43 |  . S IB=1
 | 
|---|
| 44 |  . M MOREDATA("IBDATA")=BPSARRY("INS")
 | 
|---|
| 45 |  . S $P(MOREDATA("BPSDATA",1),U,1)=BPSARRY("QTY")
 | 
|---|
| 46 |  . S $P(MOREDATA("BPSDATA",1),U,2)=BPSARRY("COST")
 | 
|---|
| 47 |  . S $P(MOREDATA("BPSDATA",1),U,3)=BPSARRY("NDC")
 | 
|---|
| 48 |  . S $P(MOREDATA("BPSDATA",1),U,4)=BFILL
 | 
|---|
| 49 |  . S $P(MOREDATA("BPSDATA",1),U,5)=""  ; Certify Mode
 | 
|---|
| 50 |  . S $P(MOREDATA("BPSDATA",1),U,6)=""  ; Cert IEN
 | 
|---|
| 51 |  . S $P(MOREDATA("BPSDATA",1),U,7)=BPSARRY("UNITS")
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 |  ; If certification mode on and no IB result (somewhat redundant since IB is not called
 | 
|---|
| 54 |  ;   for certification), get data from BPS Certification table
 | 
|---|
| 55 |  I $G(CERTIEN),'$G(IB) D
 | 
|---|
| 56 |  . N NODE,FLD,NFLD,CERTARY
 | 
|---|
| 57 |  . S MOREDATA("BILL")=1
 | 
|---|
| 58 |  . S MOREDATA("IBDATA",1,1)="",MOREDATA("IBDATA",1,2)="",MOREDATA("BPSDATA",1)=""
 | 
|---|
| 59 |  . S $P(MOREDATA("BPSDATA",1),U,5)=1  ;Certify Mode
 | 
|---|
| 60 |  . S $P(MOREDATA("BPSDATA",1),U,6)=CERTIEN  ;Cert IEN
 | 
|---|
| 61 |  . S $P(MOREDATA("IBDATA",1,1),U,1)=1  ;Plan IEN
 | 
|---|
| 62 |  . S $P(MOREDATA("IBDATA",1,1),U,4)=$$GET1^DIQ(9002313.31,CERTIEN,.04,"E")  ;Payer Sheet
 | 
|---|
| 63 |  . S $P(MOREDATA("IBDATA",1,1),U,10)="01"  ;Home State Plan
 | 
|---|
| 64 |  . S $P(MOREDATA("IBDATA",1,1),U,11)=""  ;B2 Payer Sheet (reversal)
 | 
|---|
| 65 |  . S $P(MOREDATA("IBDATA",1,1),U,12)=""  ;B3 Payer Sheet (rebill)
 | 
|---|
| 66 |  . S $P(MOREDATA("IBDATA",1,1),U,14)=""  ;Plan Name
 | 
|---|
| 67 |  . S $P(MOREDATA("IBDATA",1,2),U,5)=0    ;Admin Fee
 | 
|---|
| 68 |  . ;
 | 
|---|
| 69 |  . ;Get data from non-mulitple fields and add to MOREDATA
 | 
|---|
| 70 |  . K CERTARY D GETS^DIQ(9002313.31,CERTIEN_",","1*","","CERTARY")
 | 
|---|
| 71 |  . S NODE="" F  S NODE=$O(CERTARY(9002313.311,NODE)) Q:NODE=""  D
 | 
|---|
| 72 |  .. S FLD="" F  S FLD=$O(CERTARY(9002313.311,NODE,FLD)) Q:FLD=""  D
 | 
|---|
| 73 |  ... I FLD=.01 S NFLD=CERTARY(9002313.311,NODE,FLD) D
 | 
|---|
| 74 |  .... I NFLD=101 S $P(MOREDATA("IBDATA",1,1),U,2)=CERTARY(9002313.311,NODE,.02) ;BIN
 | 
|---|
| 75 |  .... I NFLD=104 S $P(MOREDATA("IBDATA",1,1),U,3)=CERTARY(9002313.311,NODE,.02)  ;PCN
 | 
|---|
| 76 |  .... I NFLD=110 S $P(MOREDATA("IBDATA",1,1),U,13)=CERTARY(9002313.311,NODE,.02)  ;Certification ID
 | 
|---|
| 77 |  . ;
 | 
|---|
| 78 |  . ;Get data from mulitple fields and add to MOREDATA
 | 
|---|
| 79 |  . K CERTARY D GETS^DIQ(9002313.31,CERTIEN_",","2*","","CERTARY")
 | 
|---|
| 80 |  . S NODE="" F  S NODE=$O(CERTARY(9002313.3121,NODE)) Q:NODE=""  D
 | 
|---|
| 81 |  ..  S FLD="" F  S FLD=$O(CERTARY(9002313.3121,NODE,FLD)) Q:FLD=""  D
 | 
|---|
| 82 |  ... I FLD=.01 S NFLD=CERTARY(9002313.3121,NODE,FLD) D
 | 
|---|
| 83 |  .... I NFLD=301 S $P(MOREDATA("IBDATA",1,1),U,5)=CERTARY(9002313.3121,NODE,.02)  ;Group ID
 | 
|---|
| 84 |  .... I NFLD=302 S $P(MOREDATA("IBDATA",1,1),U,6)=CERTARY(9002313.3121,NODE,.02)  ;Cardholder ID
 | 
|---|
| 85 |  .... I NFLD=306 S $P(MOREDATA("IBDATA",1,1),U,7)=CERTARY(9002313.3121,NODE,.02)  ;Patient Rel Code
 | 
|---|
| 86 |  .... I NFLD=312 S $P(MOREDATA("IBDATA",1,1),U,8)=CERTARY(9002313.3121,NODE,.02)  ;Cardholder First Name
 | 
|---|
| 87 |  .... I NFLD=313 S $P(MOREDATA("IBDATA",1,1),U,9)=CERTARY(9002313.3121,NODE,.02)  ;Cardholder Last Name
 | 
|---|
| 88 |  .... I NFLD=412 S $P(MOREDATA("IBDATA",1,2),U,1)=CERTARY(9002313.3121,NODE,.02)  ;Dispensing Fee
 | 
|---|
| 89 |  .... I NFLD=423 S $P(MOREDATA("IBDATA",1,2),U,2)=CERTARY(9002313.3121,NODE,.02)  ;Basis of Cost Determination
 | 
|---|
| 90 |  .... I NFLD=426 S $P(MOREDATA("IBDATA",1,2),U,3)=CERTARY(9002313.3121,NODE,.02)  ;Usual & Customary - Base Price
 | 
|---|
| 91 |  .... I NFLD=430 S $P(MOREDATA("IBDATA",1,2),U,4)=CERTARY(9002313.3121,NODE,.02)  ;Gross Amt Due
 | 
|---|
| 92 |  .... I NFLD=442 S $P(MOREDATA("BPSDATA",1),U,1)=CERTARY(9002313.3121,NODE,.02)  ;Qty
 | 
|---|
| 93 |  .... I NFLD=409 S $P(MOREDATA("BPSDATA",1),U,2)=CERTARY(9002313.3121,NODE,.02)  ;Unit Cost
 | 
|---|
| 94 |  .... I NFLD=407 S $P(MOREDATA("BPSDATA",1),U,3)=CERTARY(9002313.3121,NODE,.02)  ;NDC
 | 
|---|
| 95 |  .... I NFLD=403 S $P(MOREDATA("BPSDATA",1),U,4)=CERTARY(9002313.3121,NODE,.02)  ;Fill #
 | 
|---|
| 96 |  .... I NFLD=600 S $P(MOREDATA("BPSDATA",1),U,7)=CERTARY(9002313.3121,NODE,.02)  ;Unit of Measure
 | 
|---|
| 97 |  . ;
 | 
|---|
| 98 |  . ; If Gross Amt Due is missing, use Usual and Customary
 | 
|---|
| 99 |  . I $P(MOREDATA("IBDATA",1,2),U,4)="" S $P(MOREDATA("IBDATA",1,2),U,4)=$P(MOREDATA("IBDATA",1,2),U,3)
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 |  ; The code below checks if Sequence one is missing and move the next number down if needed.
 | 
|---|
| 102 |  ; DMB - This is existing code so I am not sure if it is needed or not.
 | 
|---|
| 103 |  I '$D(MOREDATA("IBDATA",1)) D
 | 
|---|
| 104 |  . N WW
 | 
|---|
| 105 |  . S WW=$O(MOREDATA("IBDATA",""))
 | 
|---|
| 106 |  . I WW'="" M MOREDATA("IBDATA",1)=MOREDATA("IBDATA",WW) K MOREDATA("IBDATA",WW)
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 |  ; Uppercase the IBDATA
 | 
|---|
| 109 |  ; DMB - Assume this was adding in case any of the BPS Certification data was entered as lowercase
 | 
|---|
| 110 |  S MOREDATA("IBDATA",1,1)=$TR(MOREDATA("IBDATA",1,1),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
 | 
|---|
| 111 |  S MOREDATA("IBDATA",1,2)=$TR(MOREDATA("IBDATA",1,2),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
 | 
|---|
| 112 |  S MOREDATA("BPSDATA",1)=$TR(MOREDATA("BPSDATA",1),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 |  Q
 | 
|---|