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

BPSOSIY.m

Go to the documentation of this file.
  1. 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**;JUN 2004;Build 16
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. Q
  1. ;
  1. ; INIT - Update BPS Transaction
  1. ; Input
  1. ; IEN59 - BPS Transaction
  1. ; MOREDATA is not passed but assumed to exist
  1. ; BP77 - BPS REQUEST ien
  1. ; BPSNB - Flag indicating a Non-Billable Entry
  1. ; Returns
  1. ; ERROR - 0 or error number
  1. INIT(IEN59,BP77,BPSNB) ;EP - from BPSOSIZ
  1. N BPCOB,BPSTIME
  1. S BPSNB=+$G(BPSNB)
  1. ;
  1. ; Update the BPS Request with the Transaction IEN
  1. I $G(BP77)>0 D UPD7759^BPSOSRX4(BP77,IEN59)
  1. ;
  1. ; Initialize variables
  1. N FDA,MSG,FN,IENS,REC,B1,X1,X2,X3,ERROR,SEQ,X4
  1. N DIV,RXI,RXR
  1. S FN=9002313.59,REC=IEN59_",",ERROR=0
  1. ;
  1. ; Change status to 0% (Waiting to Start), which will reset START TIME,
  1. ; and then to 10% (Building transaction)
  1. D SETSTAT^BPSOSU(IEN59,0)
  1. D SETSTAT^BPSOSU(IEN59,10)
  1. ;
  1. ; Get the Outpatient Site
  1. S DIV=MOREDATA("DIVISION")
  1. I 'DIV,MOREDATA("REQ TYPE")="C" S RXI=$P(IEN59,".",1),RXR=+$E($P(IEN59,".",2),1,4),DIV=$$GETDIV^BPSOSQC(RXI,RXR)
  1. ;
  1. ; If there are Prior Auth or Sub Clar Code override, create override
  1. ; record. Note that setting of MOREDATA("BPOVRIEN") in this routine
  1. ; will not conflict with prior setting of this value of BPOVRIEN
  1. ; since BPOVRIEN and BPSAUTH/BPSCLARF are mutually exclusive
  1. I $G(MOREDATA("BPSAUTH"))]""!($G(MOREDATA("BPSCLARF"))]"")!($G(MOREDATA("BPSDELAY"))]"") S MOREDATA("BPOVRIEN")=$$OVERRIDE(IEN59)
  1. ;
  1. ; Set BPSDATA into local variable
  1. S B1=$G(MOREDATA("BPSDATA",1))
  1. ;
  1. ; Get first record from MOREDATA("IBDATA") as there are some
  1. ; non-multiple fields that need it
  1. S X2="",SEQ=$O(MOREDATA("IBDATA",""))
  1. I SEQ S X2=$G(MOREDATA("IBDATA",SEQ,2))
  1. ;
  1. ; Set non-multiple fields
  1. S FDA(FN,REC,1.05)=$G(MOREDATA("POLICY")) ; Policy Number
  1. S FDA(FN,REC,1.07)=$$GETPHARM^BPSUTIL(DIV) ;BPS Pharmacy
  1. S FDA(FN,REC,1.08)=1 ;PINS piece
  1. S FDA(FN,REC,1.11)=$G(MOREDATA("RX")) ;Prescription
  1. I $P($G(^BPST(IEN59,1)),U,12)=1 S FDA(FN,REC,1.12)=2 ;Resubmit after reversal
  1. S FDA(FN,REC,1.13)=$G(MOREDATA("BPOVRIEN")) ;NCPDP Overrides
  1. S FDA(FN,REC,5)=$G(MOREDATA("PATIENT")) ;Patient
  1. I '$P($G(^BPST(IEN59,1)),U,12) S FDA(FN,REC,6)=$G(MOREDATA("SUBMIT TIME")) ;Submit Date/Time
  1. S FDA(FN,REC,9)=$P(B1,U,4) ;Fill
  1. S FDA(FN,REC,10)=$P(B1,U,3) ;NDC
  1. S FDA(FN,REC,11)=DIV ;Outpatient Site
  1. S FDA(FN,REC,13)=$G(MOREDATA("USER")) ;User
  1. S FDA(FN,REC,16)=$G(MOREDATA("REQ IEN")) ;Request IEN
  1. S FDA(FN,REC,17)=$G(MOREDATA("REQ DTTM")) ;Request Date/Time
  1. S FDA(FN,REC,18)=$G(MOREDATA("PAYER SEQUENCE")) ;COB Indicator
  1. S FDA(FN,REC,19)=$G(MOREDATA("REQ TYPE")) ;Transaction Type
  1. I BPSNB S FDA(FN,REC,301)=$G(MOREDATA("NON-BILLABLE REASON")) ;Non-Billable reason text from IB
  1. I BPSNB S FDA(FN,REC,302)=$G(MOREDATA("NON-BILLABLE CLOSED")) ;Non-Billable closed flag
  1. S FDA(FN,REC,501)=$P(B1,U,1) ;Drug/Billing Quantity
  1. S FDA(FN,REC,502)=$P(B1,U,2) ;Unit Price
  1. S FDA(FN,REC,504)=$P(X2,U,1) ;Dispense Fee
  1. S FDA(FN,REC,505)=$P(X2,U,4) ;Total Price
  1. S FDA(FN,REC,507)=$P(X2,U,5) ;Administrative Fee
  1. S FDA(FN,REC,508)=$E($P(B1,U,7),1,2) ;Dispense Unit
  1. S FDA(FN,REC,509)=$P(B1,U,8) ;Billing Quantity
  1. S FDA(FN,REC,510)=$P(B1,U,9) ;Billing Unit
  1. S FDA(FN,REC,901)=1 ;Current VA Insurer
  1. S FDA(FN,REC,1201)=$G(MOREDATA("RX ACTION")) ;RX Action
  1. ;
  1. ; If the expiration date of the prescription is on or before
  1. ; the date of service, then attempt to use the date of
  1. ; service from the initial claim sent for this transaction.
  1. ;
  1. S FDA(FN,REC,1202)=$G(MOREDATA("DATE OF SERVICE")) ;Date of Service
  1. N EXPDATE
  1. S EXPDATE=$$GET1^DIQ(52,MOREDATA("RX"),26,"I")
  1. I EXPDATE'="",EXPDATE'>MOREDATA("DATE OF SERVICE") D
  1. . ; Determine DOS from initial submission.
  1. . N DOS,INITTRAN
  1. . S INITTRAN=$O(^BPSTL("B",IEN59,""))
  1. . I INITTRAN="" Q
  1. . S DOS=$$GET1^DIQ(9002313.57,INITTRAN,1202,"I")
  1. . I DOS'="" S FDA(FN,REC,1202)=DOS
  1. . Q
  1. ;
  1. S FDA(FN,REC,901.04)=$G(MOREDATA("ELIG")) ;Eligibility info returned from billing determination
  1. ;
  1. ; File secondary billing fields
  1. I $$COB59^BPSUTIL2(IEN59)=2 D SECBIL59^BPSPRRX6(.MOREDATA,IEN59)
  1. ; File non-multiple fields - Record is already defined
  1. D FILE^DIE("","FDA","MSG")
  1. I $D(MSG) D Q ERROR
  1. . S ERROR=12
  1. . D LOG^BPSOSL(IEN59,$T(+0)_"-Non-multiple fields did not file")
  1. . D LOG^BPSOSL(IEN59,"MSG Array:")
  1. . D LOGARRAY^BPSOSL(IEN59,"MSG")
  1. . D LOG^BPSOSL(IEN59,"FDA Array:")
  1. . D LOGARRAY^BPSOSL(IEN59,"FDA")
  1. ;
  1. ; Build Multiple
  1. S SEQ=""
  1. F S SEQ=$O(MOREDATA("IBDATA",SEQ)) Q:SEQ="" D I ERROR Q
  1. . I $G(MOREDATA("NON-BILLABLE REASON"))="NOT INSURED" Q
  1. . K FDA,MSG,IENS
  1. . S FN=9002313.59902,IENS="+1,"_REC,IENS(1)=SEQ
  1. . S X1=$G(MOREDATA("IBDATA",SEQ,1)),X2=$G(MOREDATA("IBDATA",SEQ,2)),X3=$G(MOREDATA("IBDATA",SEQ,3)),X4=$G(MOREDATA("IBDATA",SEQ,4))
  1. . ;
  1. . ; Update fields
  1. . S FDA(FN,IENS,.01)=$P(X1,U,1) ;Plan ID
  1. . S FDA(FN,IENS,902.02)=$P(X1,U,16) ;B1 Payer Sheet (Billing Request)
  1. . S FDA(FN,IENS,902.03)=$P(X1,U,2) ;BIN
  1. . S FDA(FN,IENS,902.04)=$P(X1,U,3) ;PCN
  1. . S FDA(FN,IENS,902.05)=$P(X1,U,5) ;Group ID
  1. . S FDA(FN,IENS,902.06)=$P(X1,U,6) ;Cardholder ID
  1. . S FDA(FN,IENS,902.07)=$P(X1,U,7) ;Patient Relationship Code
  1. . S FDA(FN,IENS,902.08)=$P($P(X1,U,8)," ") ;Cardholder First Name
  1. . S FDA(FN,IENS,902.09)=$P(X1,U,9) ;Cardholder Last Name
  1. . S FDA(FN,IENS,902.1)=$P(X1,U,20) ;Person Code
  1. . S FDA(FN,IENS,902.11)=$P(X1,U,10) ;Home Plan State
  1. . S FDA(FN,IENS,902.12)=$P(X2,U,1) ;Dispense Fee
  1. . S FDA(FN,IENS,902.13)=$P(X2,U,2) ;Basis of Cost Determination
  1. . S FDA(FN,IENS,902.14)=$P(X2,U,7) ;Usual & Customary Charge
  1. . S FDA(FN,IENS,902.15)=$P(X2,U,4) ;Gross Amt Due
  1. . S FDA(FN,IENS,902.16)=$P(X2,U,5) ;Administrative Fee
  1. . S FDA(FN,IENS,902.17)=$P(B1,U,4) ;Fill Number
  1. . S FDA(FN,IENS,902.18)=$P(X1,U,13) ;Software/Vendor Cert ID
  1. . S FDA(FN,IENS,902.19)=$P(X1,U,17) ;B2 Payer Sheet (Reversal)
  1. . S FDA(FN,IENS,902.2)=$P(X2,U,6) ;Ingredient Cost
  1. . S FDA(FN,IENS,902.21)=$P(X1,U,18) ;B3 Payer Sheet (Rebill)
  1. . S FDA(FN,IENS,902.22)=$P(B1,U,5) ;Certify Mode
  1. . S FDA(FN,IENS,902.23)=$P(B1,U,6) ;Certification IEN
  1. . S FDA(FN,IENS,902.24)=$P(X1,U,14) ;Plan Name
  1. . S FDA(FN,IENS,902.25)=$P(X3,U,1) ;Group Name
  1. . S FDA(FN,IENS,902.26)=$P(X3,U,2) ;Insurance Co Phone #
  1. . S FDA(FN,IENS,902.27)=$P(X3,U,3) ;Pharmacy Plan ID
  1. . S FDA(FN,IENS,902.28)=$P(X3,U,4) ;Eligibility
  1. . S FDA(FN,IENS,902.32)=$P(X3,U,6) ;COB Indicator
  1. . S FDA(FN,IENS,902.33)=$P(X3,U,5) ;Insurance Co IEN
  1. . S FDA(FN,IENS,902.34)=$P(X1,U,19) ;E1 Payer Sheet (Eligibility)
  1. . S FDA(FN,IENS,902.35)=$P(X3,U,7) ;Policy Number
  1. . S FDA(FN,IENS,902.36)=$P(X3,U,8) ;Max Transactions/Transmission
  1. . ;the following fields are used only for secondary billing and for primary Tricare billing
  1. . ;in both cases only entry = 1 in the multiple will be created EVEN if the sequence is 2 (for secondary)
  1. . ;Note: actually only the entry = 1 is used for primary billing as well, others are never used
  1. . I SEQ=1 D
  1. . . S FDA(FN,IENS,902.29)=$G(MOREDATA("RTYPE")) ;Rate Type
  1. . . S FDA(FN,IENS,902.3)=$G(MOREDATA("PRIMARY BILL")) ;Primary bill ien
  1. . . S FDA(FN,IENS,902.31)=$G(MOREDATA("PRIOR PAYMENT")) ;Prior payment amount
  1. . ;
  1. . ; File the data
  1. . D UPDATE^DIE("","FDA","IENS","MSG")
  1. . I $D(MSG) D
  1. .. S ERROR=13
  1. .. D LOG^BPSOSL(IEN59,$T(+0)_"-Multiple fields did not file, SEQ="_SEQ)
  1. .. D LOG^BPSOSL(IEN59,"MSG Array:")
  1. .. D LOGARRAY^BPSOSL(IEN59,"MSG")
  1. .. D LOG^BPSOSL(IEN59,"IENS Array:")
  1. .. D LOGARRAY^BPSOSL(IEN59,"IENS")
  1. .. D LOG^BPSOSL(IEN59,"FDA Array:")
  1. .. D LOGARRAY^BPSOSL(IEN59,"FDA")
  1. ;
  1. ; Quit if there was an error filing the Insurance multiple
  1. I ERROR Q ERROR
  1. ;
  1. ; Store DUR multiple if it exists
  1. N DUR,DURREC
  1. S FN=9002313.5913,DUR=0
  1. F S DUR=$O(MOREDATA("DUR",DUR)) Q:DUR="" D I ERROR Q
  1. . K FDA,MSG,IENS
  1. . S DURREC=$G(MOREDATA("DUR",DUR,0))
  1. . S IENS="+1,"_REC,IENS(1)=DUR
  1. . S FDA(FN,IENS,.01)=DUR ; DUR Counter
  1. . S FDA(FN,IENS,1)=$P(DURREC,U,2) ; DUR Professional Service Code
  1. . S FDA(FN,IENS,2)=$P(DURREC,U,1) ; DUR Reason for Service Code
  1. . S FDA(FN,IENS,3)=$P(DURREC,U,3) ; DUR Result of Service Code
  1. . D UPDATE^DIE("","FDA","IENS","MSG")
  1. . I $D(MSG) D
  1. .. S ERROR=15
  1. .. D LOG^BPSOSL(IEN59,$T(+0)_"-DUR fields did not file, DUR="_DUR)
  1. .. D LOG^BPSOSL(IEN59,"DURREC="_DURREC)
  1. .. D LOG^BPSOSL(IEN59,"MSG Array:")
  1. .. D LOGARRAY^BPSOSL(IEN59,"MSG")
  1. .. D LOG^BPSOSL(IEN59,"IENS Array:")
  1. .. D LOGARRAY^BPSOSL(IEN59,"IENS")
  1. .. D LOG^BPSOSL(IEN59,"FDA Array:")
  1. .. D LOGARRAY^BPSOSL(IEN59,"FDA")
  1. ;
  1. Q ERROR
  1. ;
  1. ; OVERRIDE - Function to create override record
  1. OVERRIDE(IEN59) ;
  1. ;Save values into BPS NCPDP OVERRIDES (#9002313.511)
  1. N BPSFDA,BPSFLD,BPOVRIEN,BPSMSG,BPSQ,BPSVALUE
  1. ;
  1. ; Set Name (.01) to transaction number
  1. S BPSFDA(9002313.511,"+1,",.01)=IEN59
  1. ;
  1. ; Set Created On (.02) to current date/time
  1. S BPSFDA(9002313.511,"+1,",.02)=$$NOW^BPSOSRX()
  1. ;
  1. ; Submission Clarification Code
  1. I $G(MOREDATA("BPSCLARF"))]"" D
  1. . S BPSFLD=$O(^BPSF(9002313.91,"B",420,""))
  1. . I BPSFLD]"" S BPSFDA(9002313.5111,"+2,+1,",.01)=BPSFLD,BPSFDA(9002313.5111,"+2,+1,",.02)=$E(MOREDATA("BPSCLARF"),1,8)
  1. ;
  1. ; Prior Auth Fields (Code and Number)
  1. I $G(MOREDATA("BPSAUTH"))]"" D
  1. . S BPSFLD=$O(^BPSF(9002313.91,"B",461,""))
  1. . I BPSFLD]"" S BPSFDA(9002313.5111,"+3,+1,",.01)=BPSFLD,BPSFDA(9002313.5111,"+3,+1,",.02)=$E($P(MOREDATA("BPSAUTH"),U,1),1,2)
  1. . S BPSFLD=$O(^BPSF(9002313.91,"B",462,""))
  1. . I BPSFLD]"" S BPSFDA(9002313.5111,"+4,+1,",.01)=BPSFLD,BPSFDA(9002313.5111,"+4,+1,",.02)=$E($P(MOREDATA("BPSAUTH"),U,2),1,11)
  1. ;
  1. ; Delay Reason Code - This is the IEN of the database
  1. I $G(MOREDATA("BPSDELAY"))]"" D
  1. . S BPSVALUE=$P($G(^BPS(9002313.29,MOREDATA("BPSDELAY"),0)),U,1)
  1. . I BPSVALUE="" Q
  1. . S BPSFLD=$O(^BPSF(9002313.91,"B",357,""))
  1. . I BPSFLD]"" S BPSFDA(9002313.5111,"+5,+1,",.01)=BPSFLD,BPSFDA(9002313.5111,"+5,+1,",.02)=$E(MOREDATA("BPSDELAY"),1,2)
  1. ;
  1. ; Create the record
  1. D UPDATE^DIE("","BPSFDA","BPOVRIEN","BPSMSG")
  1. ;
  1. I $G(BPOVRIEN(1))]"" S BPSQ=BPOVRIEN(1)
  1. E S BPSQ=""
  1. Q BPSQ