BPSOSIY ;BHAM ISC/FCS/DRS/DLF - Updating BPS Transaction record ;11/7/07 17:29
;;1.0;E CLAIMS MGMT ENGINE;**1,3,5,6,7,8,10,11,20,26,29,36,40**;JUN 2004;Build 25
;;Per VA Directive 6402, this routine should not be modified.
;
Q
;
; INIT - Update BPS Transaction
; Input
; IEN59 - BPS Transaction
; MOREDATA is not passed but assumed to exist
; BP77 - BPS REQUEST ien
; BPSNB - Flag indicating a Non-Billable Entry
; Returns
; ERROR - 0 or error number
;
INIT(IEN59,BP77,BPSNB) ;EP - from BPSOSIZ
;
S BPSNB=+$G(BPSNB)
;
; Update the BPS Request with the Transaction IEN
I $G(BP77)>0 D UPD7759^BPSOSRX4(BP77,IEN59)
;
N B1,BPCOB,BPSTIME,DIV,DUR,DURREC,ERROR,EXPDATE,FDA,FN,IENS
N MSG,REC,RXI,RXR,SEQ,X1,X2,X3,X4
;
S FN=9002313.59
S REC=IEN59_","
S ERROR=0
;
; Change status to 0% (Waiting to Start), which will reset START TIME,
; and then to 10% (Building transaction)
D SETSTAT^BPSOSU(IEN59,0)
D SETSTAT^BPSOSU(IEN59,10)
;
; Get the Outpatient Site
S DIV=MOREDATA("DIVISION")
I 'DIV,MOREDATA("REQ TYPE")="C" D
. S RXI=$P(IEN59,".",1)
. S RXR=+$E($P(IEN59,".",2),1,4)
. S DIV=$$GETDIV^BPSOSQC(RXI,RXR)
;
; If there are Prior Auth or Sub Clar Code override, create override
; record. Note that setting of MOREDATA("BPOVRIEN") in this routine
; will not conflict with prior setting of this value of BPOVRIEN
; since BPOVRIEN and BPSAUTH/BPSCLARF are mutually exclusive.
; Diagnosis code will also result in an override record being created.
I $G(MOREDATA("BPSAUTH"))]""!($G(MOREDATA("BPSCLARF"))]"")!($G(MOREDATA("BPSDELAY"))]"")!($G(MOREDATA("BPSDX"))]"") S MOREDATA("BPOVRIEN")=$$OVERRIDE(IEN59)
;
; Set BPSDATA into local variable
S B1=$G(MOREDATA("BPSDATA",1))
;
; Get first record from MOREDATA("IBDATA"), as there are some
; non-multiple fields that need it.
S X2=""
S SEQ=$O(MOREDATA("IBDATA",""))
I SEQ S X2=$G(MOREDATA("IBDATA",SEQ,2))
;
; Set non-multiple fields
S FDA(FN,REC,1.05)=$G(MOREDATA("POLICY")) ; Policy Number
S FDA(FN,REC,1.07)=$$GETPHARM^BPSUTIL(DIV) ;BPS Pharmacy
S FDA(FN,REC,1.08)=1 ;PINS piece
S FDA(FN,REC,1.11)=$G(MOREDATA("RX")) ;Prescription
I $P($G(^BPST(IEN59,1)),U,12)=1 S FDA(FN,REC,1.12)=2 ;Resubmit after reversal
S FDA(FN,REC,1.13)=$G(MOREDATA("BPOVRIEN")) ;NCPDP Overrides
S FDA(FN,REC,5)=$G(MOREDATA("PATIENT")) ;Patient
I '$P($G(^BPST(IEN59,1)),U,12) S FDA(FN,REC,6)=$G(MOREDATA("SUBMIT TIME")) ;Submit Date/Time
S FDA(FN,REC,9)=$P(B1,U,4) ;Fill
S FDA(FN,REC,10)=$P(B1,U,3) ;NDC
S FDA(FN,REC,11)=DIV ;Outpatient Site
S FDA(FN,REC,13)=$G(MOREDATA("USER")) ;User
S FDA(FN,REC,16)=$G(MOREDATA("REQ IEN")) ;Request IEN
S FDA(FN,REC,17)=$G(MOREDATA("REQ DTTM")) ;Request Date/Time
S FDA(FN,REC,18)=$G(MOREDATA("PAYER SEQUENCE")) ;COB Indicator
S FDA(FN,REC,19)=$G(MOREDATA("REQ TYPE")) ;Transaction Type
I BPSNB S FDA(FN,REC,301)=$G(MOREDATA("NON-BILLABLE REASON")) ;Non-Billable reason text from IB
I BPSNB S FDA(FN,REC,302)=$G(MOREDATA("NON-BILLABLE CLOSED")) ;Non-Billable closed flag
S FDA(FN,REC,501)=$P(B1,U,1) ;Drug/Billing Quantity
S FDA(FN,REC,502)=$P(B1,U,2) ;Unit Price
S FDA(FN,REC,504)=$P(X2,U,1) ;Dispense Fee
S FDA(FN,REC,505)=$P(X2,U,4) ;Total Price
S FDA(FN,REC,507)=$P(X2,U,5) ;Administrative Fee
S FDA(FN,REC,508)=$E($P(B1,U,7),1,2) ;Dispense Unit
S FDA(FN,REC,509)=$P(B1,U,8) ;Billing Quantity
S FDA(FN,REC,510)=$P(B1,U,9) ;Billing Unit
S FDA(FN,REC,901)=1 ;Current VA Insurer
S FDA(FN,REC,1201)=$G(MOREDATA("RX ACTION")) ;RX Action
;
; If the expiration date of the prescription is on or before
; the date of service, then attempt to use the date of
; service from the initial claim sent for this transaction.
;
S FDA(FN,REC,1202)=$G(MOREDATA("DATE OF SERVICE")) ;Date of Service
S EXPDATE=$$GET1^DIQ(52,MOREDATA("RX"),26,"I")
I EXPDATE'="",EXPDATE'>MOREDATA("DATE OF SERVICE") D
. ; Determine DOS from initial submission.
. N DOS,INITTRAN
. S INITTRAN=$O(^BPSTL("B",IEN59,""))
. I INITTRAN="" Q
. S DOS=$$GET1^DIQ(9002313.57,INITTRAN,1202,"I")
. I DOS'="" S FDA(FN,REC,1202)=DOS
. Q
;
S FDA(FN,REC,901.04)=$G(MOREDATA("ELIG")) ;Eligibility info returned from billing determination
;
; File secondary billing fields
I $$COB59^BPSUTIL2(IEN59)=2 D SECBIL59^BPSPRRX6(.MOREDATA,IEN59)
;
; File non-multiple fields - Record is already defined
D FILE^DIE("","FDA","MSG")
I $D(MSG) D Q ERROR
. S ERROR=12
. D LOG^BPSOSL(IEN59,$T(+0)_"-Non-multiple fields did not file")
. D LOG^BPSOSL(IEN59,"MSG Array:")
. D LOGARRAY^BPSOSL(IEN59,"MSG")
. D LOG^BPSOSL(IEN59,"FDA Array:")
. D LOGARRAY^BPSOSL(IEN59,"FDA")
;
; Build Multiple
S SEQ=""
F S SEQ=$O(MOREDATA("IBDATA",SEQ)) Q:SEQ="" D I ERROR Q
. I $G(MOREDATA("NON-BILLABLE REASON"))="NOT INSURED" Q
. ;
. K FDA,MSG,IENS
. S FN=9002313.59902
. S IENS="+1,"_REC
. S IENS(1)=SEQ
. ;
. S X1=$G(MOREDATA("IBDATA",SEQ,1))
. S X2=$G(MOREDATA("IBDATA",SEQ,2))
. S X3=$G(MOREDATA("IBDATA",SEQ,3))
. S X4=$G(MOREDATA("IBDATA",SEQ,4))
. ;
. ; Update fields
. S FDA(FN,IENS,.01)=$P(X1,U,1) ;Plan ID
. S FDA(FN,IENS,902.02)=$P(X1,U,16) ;B1 Payer Sheet (Billing Request)
. S FDA(FN,IENS,902.03)=$P(X1,U,2) ;BIN
. S FDA(FN,IENS,902.04)=$P(X1,U,3) ;PCN
. S FDA(FN,IENS,902.05)=$P(X1,U,5) ;Group ID
. S FDA(FN,IENS,902.06)=$P(X1,U,6) ;Cardholder ID
. S FDA(FN,IENS,902.07)=$P(X1,U,7) ;Patient Relationship Code
. S FDA(FN,IENS,902.08)=$P($P(X1,U,8)," ") ;Cardholder First Name
. S FDA(FN,IENS,902.09)=$P(X1,U,9) ;Cardholder Last Name
. S FDA(FN,IENS,902.1)=$P(X1,U,20) ;Person Code
. S FDA(FN,IENS,902.11)=$P(X1,U,10) ;Home Plan State
. S FDA(FN,IENS,902.12)=$P(X2,U,1) ;Dispense Fee
. S FDA(FN,IENS,902.13)=$P(X2,U,2) ;Basis of Cost Determination
. S FDA(FN,IENS,902.14)=$P(X2,U,7) ;Usual & Customary Charge
. S FDA(FN,IENS,902.15)=$P(X2,U,4) ;Gross Amt Due
. S FDA(FN,IENS,902.16)=$P(X2,U,5) ;Administrative Fee
. S FDA(FN,IENS,902.17)=$P(B1,U,4) ;Fill Number
. S FDA(FN,IENS,902.18)=$P(X1,U,13) ;Software/Vendor Cert ID
. S FDA(FN,IENS,902.19)=$P(X1,U,17) ;B2 Payer Sheet (Reversal)
. S FDA(FN,IENS,902.2)=$P(X2,U,6) ;Ingredient Cost
. S FDA(FN,IENS,902.21)=$P(X1,U,18) ;B3 Payer Sheet (Rebill)
. S FDA(FN,IENS,902.22)=$P(B1,U,5) ;Certify Mode
. S FDA(FN,IENS,902.23)=$P(B1,U,6) ;Certification IEN
. S FDA(FN,IENS,902.24)=$P(X1,U,14) ;Plan Name
. S FDA(FN,IENS,902.25)=$P(X3,U,1) ;Group Name
. S FDA(FN,IENS,902.26)=$P(X3,U,2) ;Insurance Co Phone #
. S FDA(FN,IENS,902.27)=$P(X3,U,3) ;Pharmacy Plan ID
. S FDA(FN,IENS,902.28)=$P(X3,U,4) ;Eligibility
. S FDA(FN,IENS,902.32)=$P(X3,U,6) ;COB Indicator
. S FDA(FN,IENS,902.33)=$P(X3,U,5) ;Insurance Co IEN
. S FDA(FN,IENS,902.34)=$P(X1,U,19) ;E1 Payer Sheet (Eligibility)
. S FDA(FN,IENS,902.35)=$P(X3,U,7) ;Policy Number
. S FDA(FN,IENS,902.36)=$P(X3,U,8) ;Max Transactions/Transmission
. ;
. ; The following fields are used only for secondary billing and for
. ; primary Tricare billing. In both cases, only entry = 1 in the
. ; multiple will be created even if the sequence is 2 (for secondary).
. ; Note: Only the entry = 1 is used for primary billing as well,
. ; others are never used.
. I SEQ=1 D
. . S FDA(FN,IENS,902.29)=$G(MOREDATA("RTYPE")) ;Rate Type
. . S FDA(FN,IENS,902.3)=$G(MOREDATA("PRIMARY BILL")) ;Primary bill ien
. . S FDA(FN,IENS,902.31)=$G(MOREDATA("PRIOR PAYMENT")) ;Prior payment amount
. . Q
. ;
. ; File the data
. D UPDATE^DIE("","FDA","IENS","MSG")
. I $D(MSG) D
. . S ERROR=13
. . D LOG^BPSOSL(IEN59,$T(+0)_"-Multiple fields did not file, SEQ="_SEQ)
. . D LOG^BPSOSL(IEN59,"MSG Array:")
. . D LOGARRAY^BPSOSL(IEN59,"MSG")
. . D LOG^BPSOSL(IEN59,"IENS Array:")
. . D LOGARRAY^BPSOSL(IEN59,"IENS")
. . D LOG^BPSOSL(IEN59,"FDA Array:")
. . D LOGARRAY^BPSOSL(IEN59,"FDA")
. . Q
. Q
;
; Quit if there was an error filing the Insurance multiple
I ERROR Q ERROR
;
; Store DUR multiple if it exists
S FN=9002313.5913
S DUR=0
F S DUR=$O(MOREDATA("DUR",DUR)) Q:DUR="" D I ERROR Q
. K FDA,MSG,IENS
. S DURREC=$G(MOREDATA("DUR",DUR,0))
. S IENS="+1,"_REC
. S IENS(1)=DUR
. S FDA(FN,IENS,.01)=DUR ; DUR Counter
. S FDA(FN,IENS,1)=$P(DURREC,U,2) ; DUR Professional Service Code
. S FDA(FN,IENS,2)=$P(DURREC,U,1) ; DUR Reason for Service Code
. S FDA(FN,IENS,3)=$P(DURREC,U,3) ; DUR Result of Service Code
. D UPDATE^DIE("","FDA","IENS","MSG")
. I $D(MSG) D
. . S ERROR=15
. . D LOG^BPSOSL(IEN59,$T(+0)_"-DUR fields did not file, DUR="_DUR)
. . D LOG^BPSOSL(IEN59,"DURREC="_DURREC)
. . D LOG^BPSOSL(IEN59,"MSG Array:")
. . D LOGARRAY^BPSOSL(IEN59,"MSG")
. . D LOG^BPSOSL(IEN59,"IENS Array:")
. . D LOGARRAY^BPSOSL(IEN59,"IENS")
. . D LOG^BPSOSL(IEN59,"FDA Array:")
. . D LOGARRAY^BPSOSL(IEN59,"FDA")
. . Q
. Q
;
Q ERROR
;
; OVERRIDE - Function to create override record
OVERRIDE(IEN59) ;
;Save values into BPS NCPDP OVERRIDES (#9002313.511)
N BPOVRIEN,BPSFDA,BPSFLD,BPSMSG,BPSQ,BPSVALUE
;
; Set Name (.01) to transaction number
S BPSFDA(9002313.511,"+1,",.01)=IEN59
;
; Set Created On (.02) to current date/time
S BPSFDA(9002313.511,"+1,",.02)=$$NOW^BPSOSRX()
;
; Submission Clarification Code
I $G(MOREDATA("BPSCLARF"))]"" D
. S BPSFLD=$O(^BPSF(9002313.91,"B",420,""))
. I BPSFLD]"" S BPSFDA(9002313.5111,"+2,+1,",.01)=BPSFLD,BPSFDA(9002313.5111,"+2,+1,",.02)=$E(MOREDATA("BPSCLARF"),1,8)
;
; Prior Auth Fields (Code and Number)
I $G(MOREDATA("BPSAUTH"))]"" D
. S BPSFLD=$O(^BPSF(9002313.91,"B",461,""))
. I BPSFLD]"" S BPSFDA(9002313.5111,"+3,+1,",.01)=BPSFLD,BPSFDA(9002313.5111,"+3,+1,",.02)=$E($P(MOREDATA("BPSAUTH"),U,1),1,2)
. S BPSFLD=$O(^BPSF(9002313.91,"B",462,""))
. I BPSFLD]"" S BPSFDA(9002313.5111,"+4,+1,",.01)=BPSFLD,BPSFDA(9002313.5111,"+4,+1,",.02)=$E($P(MOREDATA("BPSAUTH"),U,2),1,11)
;
; Delay Reason Code (IEN to file #9002313.29, not external)
I $G(MOREDATA("BPSDELAY"))]"" D
. S BPSVALUE=$P($G(^BPS(9002313.29,MOREDATA("BPSDELAY"),0)),U,1)
. I BPSVALUE="" Q
. S BPSFLD=$O(^BPSF(9002313.91,"B",357,""))
. I BPSFLD]"" S BPSFDA(9002313.5111,"+5,+1,",.01)=BPSFLD,BPSFDA(9002313.5111,"+5,+1,",.02)=$E(MOREDATA("BPSDELAY"),1,2)
;
; Diagnosis Code
I $G(MOREDATA("BPSDX"))]"" D
. S BPSFLD=$O(^BPSF(9002313.91,"B",424,""))
. I BPSFLD]"" S BPSFDA(9002313.5111,"+6,+1,",.01)=BPSFLD,BPSFDA(9002313.5111,"+6,+1,",.02)=MOREDATA("BPSDX")
;
; Create the record
D UPDATE^DIE("","BPSFDA","BPOVRIEN","BPSMSG")
;
I $G(BPOVRIEN(1))]"" S BPSQ=BPOVRIEN(1)
E S BPSQ=""
Q BPSQ
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HBPSOSIY 10751 printed Sep 23, 2025@19:27:56 Page 2
BPSOSIY ;BHAM ISC/FCS/DRS/DLF - Updating BPS Transaction record ;11/7/07 17:29
+1 ;;1.0;E CLAIMS MGMT ENGINE;**1,3,5,6,7,8,10,11,20,26,29,36,40**;JUN 2004;Build 25
+2 ;;Per VA Directive 6402, this routine should not be modified.
+3 ;
+4 QUIT
+5 ;
+6 ; INIT - Update BPS Transaction
+7 ; Input
+8 ; IEN59 - BPS Transaction
+9 ; MOREDATA is not passed but assumed to exist
+10 ; BP77 - BPS REQUEST ien
+11 ; BPSNB - Flag indicating a Non-Billable Entry
+12 ; Returns
+13 ; ERROR - 0 or error number
+14 ;
INIT(IEN59,BP77,BPSNB) ;EP - from BPSOSIZ
+1 ;
+2 SET BPSNB=+$GET(BPSNB)
+3 ;
+4 ; Update the BPS Request with the Transaction IEN
+5 IF $GET(BP77)>0
DO UPD7759^BPSOSRX4(BP77,IEN59)
+6 ;
+7 NEW B1,BPCOB,BPSTIME,DIV,DUR,DURREC,ERROR,EXPDATE,FDA,FN,IENS
+8 NEW MSG,REC,RXI,RXR,SEQ,X1,X2,X3,X4
+9 ;
+10 SET FN=9002313.59
+11 SET REC=IEN59_","
+12 SET ERROR=0
+13 ;
+14 ; Change status to 0% (Waiting to Start), which will reset START TIME,
+15 ; and then to 10% (Building transaction)
+16 DO SETSTAT^BPSOSU(IEN59,0)
+17 DO SETSTAT^BPSOSU(IEN59,10)
+18 ;
+19 ; Get the Outpatient Site
+20 SET DIV=MOREDATA("DIVISION")
+21 IF 'DIV
IF MOREDATA("REQ TYPE")="C"
Begin DoDot:1
+22 SET RXI=$PIECE(IEN59,".",1)
+23 SET RXR=+$EXTRACT($PIECE(IEN59,".",2),1,4)
+24 SET DIV=$$GETDIV^BPSOSQC(RXI,RXR)
End DoDot:1
+25 ;
+26 ; If there are Prior Auth or Sub Clar Code override, create override
+27 ; record. Note that setting of MOREDATA("BPOVRIEN") in this routine
+28 ; will not conflict with prior setting of this value of BPOVRIEN
+29 ; since BPOVRIEN and BPSAUTH/BPSCLARF are mutually exclusive.
+30 ; Diagnosis code will also result in an override record being created.
+31 IF $GET(MOREDATA("BPSAUTH"))]""!($GET(MOREDATA("BPSCLARF"))]"")!($GET(MOREDATA("BPSDELAY"))]"")!($GET(MOREDATA("BPSDX"))]"")
SET MOREDATA("BPOVRIEN")=$$OVERRIDE(IEN59)
+32 ;
+33 ; Set BPSDATA into local variable
+34 SET B1=$GET(MOREDATA("BPSDATA",1))
+35 ;
+36 ; Get first record from MOREDATA("IBDATA"), as there are some
+37 ; non-multiple fields that need it.
+38 SET X2=""
+39 SET SEQ=$ORDER(MOREDATA("IBDATA",""))
+40 IF SEQ
SET X2=$GET(MOREDATA("IBDATA",SEQ,2))
+41 ;
+42 ; Set non-multiple fields
+43 ; Policy Number
SET FDA(FN,REC,1.05)=$GET(MOREDATA("POLICY"))
+44 ;BPS Pharmacy
SET FDA(FN,REC,1.07)=$$GETPHARM^BPSUTIL(DIV)
+45 ;PINS piece
SET FDA(FN,REC,1.08)=1
+46 ;Prescription
SET FDA(FN,REC,1.11)=$GET(MOREDATA("RX"))
+47 ;Resubmit after reversal
IF $PIECE($GET(^BPST(IEN59,1)),U,12)=1
SET FDA(FN,REC,1.12)=2
+48 ;NCPDP Overrides
SET FDA(FN,REC,1.13)=$GET(MOREDATA("BPOVRIEN"))
+49 ;Patient
SET FDA(FN,REC,5)=$GET(MOREDATA("PATIENT"))
+50 ;Submit Date/Time
IF '$PIECE($GET(^BPST(IEN59,1)),U,12)
SET FDA(FN,REC,6)=$GET(MOREDATA("SUBMIT TIME"))
+51 ;Fill
SET FDA(FN,REC,9)=$PIECE(B1,U,4)
+52 ;NDC
SET FDA(FN,REC,10)=$PIECE(B1,U,3)
+53 ;Outpatient Site
SET FDA(FN,REC,11)=DIV
+54 ;User
SET FDA(FN,REC,13)=$GET(MOREDATA("USER"))
+55 ;Request IEN
SET FDA(FN,REC,16)=$GET(MOREDATA("REQ IEN"))
+56 ;Request Date/Time
SET FDA(FN,REC,17)=$GET(MOREDATA("REQ DTTM"))
+57 ;COB Indicator
SET FDA(FN,REC,18)=$GET(MOREDATA("PAYER SEQUENCE"))
+58 ;Transaction Type
SET FDA(FN,REC,19)=$GET(MOREDATA("REQ TYPE"))
+59 ;Non-Billable reason text from IB
IF BPSNB
SET FDA(FN,REC,301)=$GET(MOREDATA("NON-BILLABLE REASON"))
+60 ;Non-Billable closed flag
IF BPSNB
SET FDA(FN,REC,302)=$GET(MOREDATA("NON-BILLABLE CLOSED"))
+61 ;Drug/Billing Quantity
SET FDA(FN,REC,501)=$PIECE(B1,U,1)
+62 ;Unit Price
SET FDA(FN,REC,502)=$PIECE(B1,U,2)
+63 ;Dispense Fee
SET FDA(FN,REC,504)=$PIECE(X2,U,1)
+64 ;Total Price
SET FDA(FN,REC,505)=$PIECE(X2,U,4)
+65 ;Administrative Fee
SET FDA(FN,REC,507)=$PIECE(X2,U,5)
+66 ;Dispense Unit
SET FDA(FN,REC,508)=$EXTRACT($PIECE(B1,U,7),1,2)
+67 ;Billing Quantity
SET FDA(FN,REC,509)=$PIECE(B1,U,8)
+68 ;Billing Unit
SET FDA(FN,REC,510)=$PIECE(B1,U,9)
+69 ;Current VA Insurer
SET FDA(FN,REC,901)=1
+70 ;RX Action
SET FDA(FN,REC,1201)=$GET(MOREDATA("RX ACTION"))
+71 ;
+72 ; If the expiration date of the prescription is on or before
+73 ; the date of service, then attempt to use the date of
+74 ; service from the initial claim sent for this transaction.
+75 ;
+76 ;Date of Service
SET FDA(FN,REC,1202)=$GET(MOREDATA("DATE OF SERVICE"))
+77 SET EXPDATE=$$GET1^DIQ(52,MOREDATA("RX"),26,"I")
+78 IF EXPDATE'=""
IF EXPDATE'>MOREDATA("DATE OF SERVICE")
Begin DoDot:1
+79 ; Determine DOS from initial submission.
+80 NEW DOS,INITTRAN
+81 SET INITTRAN=$ORDER(^BPSTL("B",IEN59,""))
+82 IF INITTRAN=""
QUIT
+83 SET DOS=$$GET1^DIQ(9002313.57,INITTRAN,1202,"I")
+84 IF DOS'=""
SET FDA(FN,REC,1202)=DOS
+85 QUIT
End DoDot:1
+86 ;
+87 ;Eligibility info returned from billing determination
SET FDA(FN,REC,901.04)=$GET(MOREDATA("ELIG"))
+88 ;
+89 ; File secondary billing fields
+90 IF $$COB59^BPSUTIL2(IEN59)=2
DO SECBIL59^BPSPRRX6(.MOREDATA,IEN59)
+91 ;
+92 ; File non-multiple fields - Record is already defined
+93 DO FILE^DIE("","FDA","MSG")
+94 IF $DATA(MSG)
Begin DoDot:1
+95 SET ERROR=12
+96 DO LOG^BPSOSL(IEN59,$TEXT(+0)_"-Non-multiple fields did not file")
+97 DO LOG^BPSOSL(IEN59,"MSG Array:")
+98 DO LOGARRAY^BPSOSL(IEN59,"MSG")
+99 DO LOG^BPSOSL(IEN59,"FDA Array:")
+100 DO LOGARRAY^BPSOSL(IEN59,"FDA")
End DoDot:1
QUIT ERROR
+101 ;
+102 ; Build Multiple
+103 SET SEQ=""
+104 FOR
SET SEQ=$ORDER(MOREDATA("IBDATA",SEQ))
if SEQ=""
QUIT
Begin DoDot:1
+105 IF $GET(MOREDATA("NON-BILLABLE REASON"))="NOT INSURED"
QUIT
+106 ;
+107 KILL FDA,MSG,IENS
+108 SET FN=9002313.59902
+109 SET IENS="+1,"_REC
+110 SET IENS(1)=SEQ
+111 ;
+112 SET X1=$GET(MOREDATA("IBDATA",SEQ,1))
+113 SET X2=$GET(MOREDATA("IBDATA",SEQ,2))
+114 SET X3=$GET(MOREDATA("IBDATA",SEQ,3))
+115 SET X4=$GET(MOREDATA("IBDATA",SEQ,4))
+116 ;
+117 ; Update fields
+118 ;Plan ID
SET FDA(FN,IENS,.01)=$PIECE(X1,U,1)
+119 ;B1 Payer Sheet (Billing Request)
SET FDA(FN,IENS,902.02)=$PIECE(X1,U,16)
+120 ;BIN
SET FDA(FN,IENS,902.03)=$PIECE(X1,U,2)
+121 ;PCN
SET FDA(FN,IENS,902.04)=$PIECE(X1,U,3)
+122 ;Group ID
SET FDA(FN,IENS,902.05)=$PIECE(X1,U,5)
+123 ;Cardholder ID
SET FDA(FN,IENS,902.06)=$PIECE(X1,U,6)
+124 ;Patient Relationship Code
SET FDA(FN,IENS,902.07)=$PIECE(X1,U,7)
+125 ;Cardholder First Name
SET FDA(FN,IENS,902.08)=$PIECE($PIECE(X1,U,8)," ")
+126 ;Cardholder Last Name
SET FDA(FN,IENS,902.09)=$PIECE(X1,U,9)
+127 ;Person Code
SET FDA(FN,IENS,902.1)=$PIECE(X1,U,20)
+128 ;Home Plan State
SET FDA(FN,IENS,902.11)=$PIECE(X1,U,10)
+129 ;Dispense Fee
SET FDA(FN,IENS,902.12)=$PIECE(X2,U,1)
+130 ;Basis of Cost Determination
SET FDA(FN,IENS,902.13)=$PIECE(X2,U,2)
+131 ;Usual & Customary Charge
SET FDA(FN,IENS,902.14)=$PIECE(X2,U,7)
+132 ;Gross Amt Due
SET FDA(FN,IENS,902.15)=$PIECE(X2,U,4)
+133 ;Administrative Fee
SET FDA(FN,IENS,902.16)=$PIECE(X2,U,5)
+134 ;Fill Number
SET FDA(FN,IENS,902.17)=$PIECE(B1,U,4)
+135 ;Software/Vendor Cert ID
SET FDA(FN,IENS,902.18)=$PIECE(X1,U,13)
+136 ;B2 Payer Sheet (Reversal)
SET FDA(FN,IENS,902.19)=$PIECE(X1,U,17)
+137 ;Ingredient Cost
SET FDA(FN,IENS,902.2)=$PIECE(X2,U,6)
+138 ;B3 Payer Sheet (Rebill)
SET FDA(FN,IENS,902.21)=$PIECE(X1,U,18)
+139 ;Certify Mode
SET FDA(FN,IENS,902.22)=$PIECE(B1,U,5)
+140 ;Certification IEN
SET FDA(FN,IENS,902.23)=$PIECE(B1,U,6)
+141 ;Plan Name
SET FDA(FN,IENS,902.24)=$PIECE(X1,U,14)
+142 ;Group Name
SET FDA(FN,IENS,902.25)=$PIECE(X3,U,1)
+143 ;Insurance Co Phone #
SET FDA(FN,IENS,902.26)=$PIECE(X3,U,2)
+144 ;Pharmacy Plan ID
SET FDA(FN,IENS,902.27)=$PIECE(X3,U,3)
+145 ;Eligibility
SET FDA(FN,IENS,902.28)=$PIECE(X3,U,4)
+146 ;COB Indicator
SET FDA(FN,IENS,902.32)=$PIECE(X3,U,6)
+147 ;Insurance Co IEN
SET FDA(FN,IENS,902.33)=$PIECE(X3,U,5)
+148 ;E1 Payer Sheet (Eligibility)
SET FDA(FN,IENS,902.34)=$PIECE(X1,U,19)
+149 ;Policy Number
SET FDA(FN,IENS,902.35)=$PIECE(X3,U,7)
+150 ;Max Transactions/Transmission
SET FDA(FN,IENS,902.36)=$PIECE(X3,U,8)
+151 ;
+152 ; The following fields are used only for secondary billing and for
+153 ; primary Tricare billing. In both cases, only entry = 1 in the
+154 ; multiple will be created even if the sequence is 2 (for secondary).
+155 ; Note: Only the entry = 1 is used for primary billing as well,
+156 ; others are never used.
+157 IF SEQ=1
Begin DoDot:2
+158 ;Rate Type
SET FDA(FN,IENS,902.29)=$GET(MOREDATA("RTYPE"))
+159 ;Primary bill ien
SET FDA(FN,IENS,902.3)=$GET(MOREDATA("PRIMARY BILL"))
+160 ;Prior payment amount
SET FDA(FN,IENS,902.31)=$GET(MOREDATA("PRIOR PAYMENT"))
+161 QUIT
End DoDot:2
+162 ;
+163 ; File the data
+164 DO UPDATE^DIE("","FDA","IENS","MSG")
+165 IF $DATA(MSG)
Begin DoDot:2
+166 SET ERROR=13
+167 DO LOG^BPSOSL(IEN59,$TEXT(+0)_"-Multiple fields did not file, SEQ="_SEQ)
+168 DO LOG^BPSOSL(IEN59,"MSG Array:")
+169 DO LOGARRAY^BPSOSL(IEN59,"MSG")
+170 DO LOG^BPSOSL(IEN59,"IENS Array:")
+171 DO LOGARRAY^BPSOSL(IEN59,"IENS")
+172 DO LOG^BPSOSL(IEN59,"FDA Array:")
+173 DO LOGARRAY^BPSOSL(IEN59,"FDA")
+174 QUIT
End DoDot:2
+175 QUIT
End DoDot:1
IF ERROR
QUIT
+176 ;
+177 ; Quit if there was an error filing the Insurance multiple
+178 IF ERROR
QUIT ERROR
+179 ;
+180 ; Store DUR multiple if it exists
+181 SET FN=9002313.5913
+182 SET DUR=0
+183 FOR
SET DUR=$ORDER(MOREDATA("DUR",DUR))
if DUR=""
QUIT
Begin DoDot:1
+184 KILL FDA,MSG,IENS
+185 SET DURREC=$GET(MOREDATA("DUR",DUR,0))
+186 SET IENS="+1,"_REC
+187 SET IENS(1)=DUR
+188 ; DUR Counter
SET FDA(FN,IENS,.01)=DUR
+189 ; DUR Professional Service Code
SET FDA(FN,IENS,1)=$PIECE(DURREC,U,2)
+190 ; DUR Reason for Service Code
SET FDA(FN,IENS,2)=$PIECE(DURREC,U,1)
+191 ; DUR Result of Service Code
SET FDA(FN,IENS,3)=$PIECE(DURREC,U,3)
+192 DO UPDATE^DIE("","FDA","IENS","MSG")
+193 IF $DATA(MSG)
Begin DoDot:2
+194 SET ERROR=15
+195 DO LOG^BPSOSL(IEN59,$TEXT(+0)_"-DUR fields did not file, DUR="_DUR)
+196 DO LOG^BPSOSL(IEN59,"DURREC="_DURREC)
+197 DO LOG^BPSOSL(IEN59,"MSG Array:")
+198 DO LOGARRAY^BPSOSL(IEN59,"MSG")
+199 DO LOG^BPSOSL(IEN59,"IENS Array:")
+200 DO LOGARRAY^BPSOSL(IEN59,"IENS")
+201 DO LOG^BPSOSL(IEN59,"FDA Array:")
+202 DO LOGARRAY^BPSOSL(IEN59,"FDA")
+203 QUIT
End DoDot:2
+204 QUIT
End DoDot:1
IF ERROR
QUIT
+205 ;
+206 QUIT ERROR
+207 ;
+208 ; OVERRIDE - Function to create override record
OVERRIDE(IEN59) ;
+1 ;Save values into BPS NCPDP OVERRIDES (#9002313.511)
+2 NEW BPOVRIEN,BPSFDA,BPSFLD,BPSMSG,BPSQ,BPSVALUE
+3 ;
+4 ; Set Name (.01) to transaction number
+5 SET BPSFDA(9002313.511,"+1,",.01)=IEN59
+6 ;
+7 ; Set Created On (.02) to current date/time
+8 SET BPSFDA(9002313.511,"+1,",.02)=$$NOW^BPSOSRX()
+9 ;
+10 ; Submission Clarification Code
+11 IF $GET(MOREDATA("BPSCLARF"))]""
Begin DoDot:1
+12 SET BPSFLD=$ORDER(^BPSF(9002313.91,"B",420,""))
+13 IF BPSFLD]""
SET BPSFDA(9002313.5111,"+2,+1,",.01)=BPSFLD
SET BPSFDA(9002313.5111,"+2,+1,",.02)=$EXTRACT(MOREDATA("BPSCLARF"),1,8)
End DoDot:1
+14 ;
+15 ; Prior Auth Fields (Code and Number)
+16 IF $GET(MOREDATA("BPSAUTH"))]""
Begin DoDot:1
+17 SET BPSFLD=$ORDER(^BPSF(9002313.91,"B",461,""))
+18 IF BPSFLD]""
SET BPSFDA(9002313.5111,"+3,+1,",.01)=BPSFLD
SET BPSFDA(9002313.5111,"+3,+1,",.02)=$EXTRACT($PIECE(MOREDATA("BPSAUTH"),U,1),1,2)
+19 SET BPSFLD=$ORDER(^BPSF(9002313.91,"B",462,""))
+20 IF BPSFLD]""
SET BPSFDA(9002313.5111,"+4,+1,",.01)=BPSFLD
SET BPSFDA(9002313.5111,"+4,+1,",.02)=$EXTRACT($PIECE(MOREDATA("BPSAUTH"),U,2),1,11)
End DoDot:1
+21 ;
+22 ; Delay Reason Code (IEN to file #9002313.29, not external)
+23 IF $GET(MOREDATA("BPSDELAY"))]""
Begin DoDot:1
+24 SET BPSVALUE=$PIECE($GET(^BPS(9002313.29,MOREDATA("BPSDELAY"),0)),U,1)
+25 IF BPSVALUE=""
QUIT
+26 SET BPSFLD=$ORDER(^BPSF(9002313.91,"B",357,""))
+27 IF BPSFLD]""
SET BPSFDA(9002313.5111,"+5,+1,",.01)=BPSFLD
SET BPSFDA(9002313.5111,"+5,+1,",.02)=$EXTRACT(MOREDATA("BPSDELAY"),1,2)
End DoDot:1
+28 ;
+29 ; Diagnosis Code
+30 IF $GET(MOREDATA("BPSDX"))]""
Begin DoDot:1
+31 SET BPSFLD=$ORDER(^BPSF(9002313.91,"B",424,""))
+32 IF BPSFLD]""
SET BPSFDA(9002313.5111,"+6,+1,",.01)=BPSFLD
SET BPSFDA(9002313.5111,"+6,+1,",.02)=MOREDATA("BPSDX")
End DoDot:1
+33 ;
+34 ; Create the record
+35 DO UPDATE^DIE("","BPSFDA","BPOVRIEN","BPSMSG")
+36 ;
+37 IF $GET(BPOVRIEN(1))]""
SET BPSQ=BPOVRIEN(1)
+38 IF '$TEST
SET BPSQ=""
+39 QUIT BPSQ