| [613] | 1 | IBNCPDP1 ;OAK/ELZ - PROCESSING FOR NEW RX REQUESTS ;20-JUN-2003
 | 
|---|
 | 2 |  ;;2.0;INTEGRATED BILLING;**223,276,339,363**;21-MAR-94;Build 35
 | 
|---|
 | 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
 | 4 |  ;
 | 
|---|
 | 5 |  ;NCPDP PHASE III
 | 
|---|
 | 6 |  Q
 | 
|---|
 | 7 |  ;
 | 
|---|
 | 8 | RX(DFN,IBD) ; pharmacy package call, passing in IBD by ref
 | 
|---|
 | 9 |  ; this is called by PSO for all prescriptions issued, return is
 | 
|---|
 | 10 |  ; a response to bill ECME or not with array for billing data elements
 | 
|---|
 | 11 |  ;
 | 
|---|
 | 12 |  K IBD("SC/EI NO ANSW") ;clean up the list of non-answered SC/Env.indicators questions
 | 
|---|
 | 13 |  ;warning: back-billing flag:
 | 
|---|
 | 14 |  ;if passed IBSCRES(IBRXN,IBFIL)=1 
 | 
|---|
 | 15 |  ; - the the SC Determination is just done by the IB clerk (billable)
 | 
|---|
 | 16 |  ;
 | 
|---|
 | 17 |  ;retrieve indicators from file #52 and overwrite the indicators in IBD array 
 | 
|---|
 | 18 |  D GETINDIC^IBNCPUT2(+IBD("IEN"),.IBD)
 | 
|---|
 | 19 |  N IBTRKR,IBARR,IBADT,IBRXN,IBFIL,IBTRKRN,IBRMARK,IBANY,IBX,IBT,IBINS,IBSAVE
 | 
|---|
 | 20 |  N IBFEE,IBEABD,IBBI,IBIT,IBPRICE,IBRS,IBRT,IBTRN,IBCHG,IBERMSG,IBRES,IBNEEDS
 | 
|---|
 | 21 |  S IBRES="0^Error"
 | 
|---|
 | 22 |  K IBD("INS")
 | 
|---|
 | 23 |  I '$G(DFN) S IBRES="0^No DFN" G RXQ
 | 
|---|
 | 24 |  S (IBEABD,IBADT)=+$G(IBD("FILL DATE"),DT)
 | 
|---|
 | 25 |  S IBRXN=+$G(IBD("IEN")) I 'IBRXN S IBRES="0^No Rx IEN" G RXQ
 | 
|---|
 | 26 |  S IBFIL=+$G(IBD("FILL NUMBER"),-1) I IBFIL<0 S IBRES="0^No fill number" G RXQ
 | 
|---|
 | 27 |  S IBD("QTY")=+$G(IBD("QTY"))
 | 
|---|
 | 28 |  I 'IBD("QTY") S IBRES="0^No Quantity" G RXQ
 | 
|---|
 | 29 |  ;
 | 
|---|
 | 30 |  ; -- claims tracking info
 | 
|---|
 | 31 |  S IBTRKR=$G(^IBE(350.9,1,6))
 | 
|---|
 | 32 |  ; date can't be before parameters
 | 
|---|
 | 33 |  S $P(IBTRKR,U)=$S('$P(IBTRKR,U,4):0,+IBTRKR&(IBADT<+IBTRKR):0,1:IBADT)
 | 
|---|
 | 34 |  ; already in claims tracking
 | 
|---|
 | 35 |  S IBTRKRN=+$O(^IBT(356,"ARXFL",IBRXN,IBFIL,0))
 | 
|---|
 | 36 |  I IBTRKRN,$$PAPERBIL(IBTRKRN) S IBRES="0^Existing IB Bill in CT" G RXQ
 | 
|---|
 | 37 |  ;
 | 
|---|
 | 38 |  I $G(IBD("DEA"))="" D CT S IBRES="0^Null DEA Special Handling field" G RXQ
 | 
|---|
 | 39 |  ;
 | 
|---|
 | 40 |  ; -- no pharmacy coverage, update ct if applicable, quit
 | 
|---|
 | 41 |  I '$$PTCOV^IBCNSU3(DFN,IBADT,"PHARMACY",.IBANY) S IBRMARK=$S($G(IBANY):"SERVICE NOT COVERED",1:"NOT INSURED") D:$P(IBTRKR,U,4)=2 CT S IBRES="0^"_IBRMARK G RXQ
 | 
|---|
 | 42 |  ;
 | 
|---|
 | 43 |  ;
 | 
|---|
 | 44 |  ;  -- check for compound,  NOT BILLABLE 
 | 
|---|
 | 45 |  I IBD("DEA")["M"!(IBD("DEA")["0") S IBRMARK="DRUG NOT BILLABLE" D CT S IBRES="0^COMPOUND DRUG" G RXQ
 | 
|---|
 | 46 |  ; -- check drug (not investigational, supply, or over the counter drug
 | 
|---|
 | 47 |  ;  "E" means always ecme billable
 | 
|---|
 | 48 |  I (IBD("DEA")["I"!(IBD("DEA")["S")!(IBD("DEA")["9")),IBD("DEA")'["E" S IBRMARK="DRUG NOT BILLABLE" D CT S IBRES="0^"_IBRMARK G RXQ
 | 
|---|
 | 49 |  ;
 | 
|---|
 | 50 |  ; -- process patient exemptions if any (if not already resolved)
 | 
|---|
 | 51 |  I $G(IBD("SC/EI OVR"))'=1 D CL^SDCO21(DFN,IBADT,"",.IBARR)
 | 
|---|
 | 52 |  ; check out exemptions
 | 
|---|
 | 53 |  S IBNEEDS=0 ;flag will be set to 1 if at least one of the questions wasn't answered
 | 
|---|
 | 54 |  I $G(IBD("SC/EI OVR"))'=1 I $D(IBARR)>9 F IBX=2:1 S IBT=$P($T(EXEMPT+IBX),";;",2) Q:IBT=""  D:$D(IBARR(+IBT))
 | 
|---|
 | 55 |  . I $G(IBD($P(IBT,U,2)))=0 Q
 | 
|---|
 | 56 |  . I $G(IBD($P(IBT,U,2))) S IBRMARK=$P(IBT,U,3) Q
 | 
|---|
 | 57 |  . I '$G(IBSCRES(IBRXN,IBFIL)) S IBNEEDS=1 D
 | 
|---|
 | 58 |  . . S IBD("SC/EI NO ANSW")=$S($G(IBD("SC/EI NO ANSW"))="":$P(IBT,U,2),1:$G(IBD("SC/EI NO ANSW"))_","_$P(IBT,U,2))
 | 
|---|
 | 59 |  I '$D(IBRMARK),IBNEEDS=1 S IBRMARK="NEEDS SC DETERMINATION"
 | 
|---|
 | 60 |  I $D(IBRMARK) D CT S IBRES="0^"_IBRMARK G RXQ
 | 
|---|
 | 61 |  ; Clean-up the NEEDS SC DETERMINATION record if resolved
 | 
|---|
 | 62 |  ; And check if it is non-billable in CT
 | 
|---|
 | 63 |  I IBTRKRN D
 | 
|---|
 | 64 |  . N IBNBR,IBNBRT
 | 
|---|
 | 65 |  . S IBNBR=$P($G(^IBT(356,+IBTRKRN,0)),U,19) Q:'IBNBR
 | 
|---|
 | 66 |  . S IBNBRT=$P($G(^IBE(356.8,IBNBR,0)),U) Q:IBNBRT=""
 | 
|---|
 | 67 |  . ; if refill was deleted (not RX) and now the refill is re-entered
 | 
|---|
 | 68 |  . ;use $$RXSTATUS^IBNCPRR instead of $G(^PSRX(IBRXN,"STA"))
 | 
|---|
 | 69 |  . I IBNBRT="PRESCRIPTION DELETED",$$RXSTATUS^IBNCPRR(DFN,IBRXN)'=13 D  Q
 | 
|---|
 | 70 |  . . N DIE,DA,DR
 | 
|---|
 | 71 |  . . ; clean up REASON NOT BILLABLE and ADDITIONAL COMMENT
 | 
|---|
 | 72 |  . . S DIE="^IBT(356,",DA=+IBTRKRN,DR=".19////@;1.08////@" D ^DIE
 | 
|---|
 | 73 |  . ; Clean up NBR if released
 | 
|---|
 | 74 |  . I IBNBRT="PRESCRIPTION NOT RELEASED" D:$G(IBD("RELEASE DATE"))  Q
 | 
|---|
 | 75 |  . . N DIE,DA,DR
 | 
|---|
 | 76 |  . . S DIE="^IBT(356,",DA=+IBTRKRN,DR=".19////@" D ^DIE
 | 
|---|
 | 77 |  . ; Clean up 'Needs SC determ'
 | 
|---|
 | 78 |  . I IBNBRT="NEEDS SC DETERMINATION" D  Q
 | 
|---|
 | 79 |  . . N DIE,DA,DR
 | 
|---|
 | 80 |  . . S DIE="^IBT(356,",DA=+IBTRKRN,DR=".19////@" D ^DIE
 | 
|---|
 | 81 |  . S IBRMARK=IBNBRT
 | 
|---|
 | 82 |  I $D(IBRMARK) S IBRES="0^Non-Billable in CT: "_IBRMARK G RXQ
 | 
|---|
 | 83 |  ;
 | 
|---|
 | 84 |  ; -- look up insurance for patient
 | 
|---|
 | 85 |  D ALL^IBCNS1(DFN,"IBINS",1,IBADT,1)
 | 
|---|
 | 86 |  S IBERMSG="" ; Error message
 | 
|---|
 | 87 |  S IBX=0 F  S IBX=$O(IBINS("S",IBX)) Q:'IBX  D
 | 
|---|
 | 88 |  . S IBT=0 F  S IBT=$O(IBINS("S",IBX,IBT)) Q:'IBT  D
 | 
|---|
 | 89 |  .. N IBDAT,IBPL,IBINSN,IBPIEN,IBY,IBZ
 | 
|---|
 | 90 |  .. S IBZ=IBINS(IBT,0)
 | 
|---|
 | 91 |  .. S IBPL=$P(IBZ,U,18) ; plan
 | 
|---|
 | 92 |  .. Q:'IBPL
 | 
|---|
 | 93 |  .. Q:'$$PLCOV^IBCNSU3(IBPL,IBADT,3)  ; not covered
 | 
|---|
 | 94 |  .. S IBINSN=$P($G(^DIC(36,+$G(^IBA(355.3,+IBPL,0)),0)),U) ; ins name
 | 
|---|
 | 95 |  .. S IBPIEN=+$G(^IBA(355.3,+IBPL,6))
 | 
|---|
 | 96 |  .. I 'IBPIEN S IBERMSG="Plan not linked to the Payer" Q  ; Not linked
 | 
|---|
 | 97 |  .. D STCHK^IBCNRU1(IBPIEN,.IBY)
 | 
|---|
 | 98 |  .. I $E($G(IBY(1)))'="A" S IBERMSG=$$ERMSG($P($G(IBY(6)),",")) Q  ; not active
 | 
|---|
 | 99 |  .. S IBDAT=IBPL ; Plan IEN
 | 
|---|
 | 100 |  .. S $P(IBDAT,U,2)=$G(IBY(2)) ; BIN
 | 
|---|
 | 101 |  .. S $P(IBDAT,U,3)=$G(IBY(3)) ; PCN
 | 
|---|
 | 102 |  .. S $P(IBDAT,U,4)=$P($G(^BPSF(9002313.92,+$P($G(IBY(5)),",",1),0)),U) ; Payer Sheet B1
 | 
|---|
 | 103 |  .. S $P(IBDAT,U,5)=$P($G(IBINS(IBT,355.3)),U,4) ; Group ID
 | 
|---|
 | 104 |  .. S $P(IBDAT,U,6)=$P(IBZ,U,2) ; Cardholder ID
 | 
|---|
 | 105 |  .. S $P(IBDAT,U,7)=$P(IBZ,U,16) ; Patient Relationship Code
 | 
|---|
 | 106 |  .. S $P(IBDAT,U,8)=$P($P($P(IBZ,U,17),",",2)," ") ; Cardholder First Name
 | 
|---|
 | 107 |  .. S $P(IBDAT,U,9)=$P($P(IBZ,U,17),",") ; Cardholder Last Name
 | 
|---|
 | 108 |  .. S $P(IBDAT,U,10)=$P($G(^DIC(36,+IBZ,.11)),U,5) ; State
 | 
|---|
 | 109 |  .. S $P(IBDAT,U,11)=$P($G(^BPSF(9002313.92,+$P($G(IBY(5)),",",2),0)),U) ; Payer Sheet B2
 | 
|---|
 | 110 |  .. S $P(IBDAT,U,12)=$P($G(^BPSF(9002313.92,+$P($G(IBY(5)),",",3),0)),U) ; Payer Sheet B3
 | 
|---|
 | 111 |  .. S $P(IBDAT,U,13)=$G(IBY(4)) ; Software/Vendor Cert ID
 | 
|---|
 | 112 |  .. S $P(IBDAT,U,14)=IBINSN ; Ins Name
 | 
|---|
 | 113 |  .. S IBD("INS",IBX,1)=IBDAT
 | 
|---|
 | 114 |  .. S IBD("INS",IBX,3)=$P($G(IBINS(IBT,355.3)),"^",3)_"^"_$$PHONE(+IBZ)_"^"_$$GET1^DIQ(366.03,IBPIEN_",",.01)   ;group name^ins co ph 3^plan ID
 | 
|---|
 | 115 |  I '$D(IBD("INS")),IBERMSG'="" S IBRES="0^Not ECME billable: "_IBERMSG G RXQ
 | 
|---|
 | 116 |  I '$D(IBD("INS")) S IBRES="0^No Insurance ECME billable" G RXQ
 | 
|---|
 | 117 |  ;
 | 
|---|
 | 118 |  ; determine rates/prices to use
 | 
|---|
 | 119 |  S IBRT=$$RT^IBNCPDPU(DFN,.IBINS)
 | 
|---|
 | 120 |  I 'IBRT D CT S IBRES="0^Cannot determine Rate type" G RXQ
 | 
|---|
 | 121 |  S IBBI=$$EVNTITM^IBCRU3(+IBRT,3,"PRESCRIPTION FILL",IBADT,.IBRS)
 | 
|---|
 | 122 |  I 'IBBI D CT S IBRES="0^Cannot find Billable Item" G RXQ
 | 
|---|
 | 123 |  ;1;BEDSECTION;1^
 | 
|---|
 | 124 |  ;IBRS(1,18,5)=
 | 
|---|
 | 125 |  S IBRS=+$O(IBRS(+IBBI,0))
 | 
|---|
 | 126 |  S IBIT=$$ITPTR^IBCRU2(+IBBI,$S($P(IBRT,U,2)="A":$$NDC^IBNCPDPU($G(IBD("NDC"))),1:"PRESCRIPTION"))
 | 
|---|
 | 127 |  I 'IBIT,$P(IBRT,U,2)'="C" D CT S IBRES="0^Cannot find Item Pointer" G RXQ
 | 
|---|
 | 128 |  ;8
 | 
|---|
 | 129 |  S IBPRICE=+$$BICOST^IBCRCI(+IBRT,3,IBADT,"PRESCRIPTION FILL",+IBIT,,,$S($P(IBRT,U,2)="A":IBD("QTY"),1:1))
 | 
|---|
 | 130 |  ;36^2991001
 | 
|---|
 | 131 |  ;
 | 
|---|
 | 132 |  ; get fees if any, ignore return, don't care about price, just need fees
 | 
|---|
 | 133 |  S IBCHG=$$RATECHG^IBCRCC(+IBRS,$S($P(IBRT,U,2)'="C":1,1:IBD("QTY")*IBD("COST")),IBADT,.IBFEE)
 | 
|---|
 | 134 |  I $P(IBRT,U,2)="C" S IBPRICE=+IBCHG
 | 
|---|
 | 135 |  ;
 | 
|---|
 | 136 |  I 'IBPRICE D CT S IBRES="0^Cannot find price for Item" G RXQ
 | 
|---|
 | 137 |  ;
 | 
|---|
 | 138 |  S IBPRICE=(+$G(IBFEE))_U_$S($P(IBRT,U,2)="A":"01",$P(IBRT,U,2)="C":"05",1:"07")_U_$S($P(IBRT,U,2)="C":IBD("QTY")*IBD("COST"),$P(IBRT,U,2)="A":IBPRICE-$G(IBFEE)-$P($G(IBFEE),U,2),1:IBPRICE)_U_IBPRICE_U_(+$P($G(IBFEE),U,2))
 | 
|---|
 | 139 |  S IBX=0 F  S IBX=$O(IBD("INS",IBX)) Q:IBX<1  S IBD("INS",IBX,2)=IBPRICE ;_U_$P(IBPAYER,U,6)
 | 
|---|
 | 140 |  ;
 | 
|---|
 | 141 |  S IBRES=$S($D(IBRMARK):"0^"_IBRMARK,1:1)
 | 
|---|
 | 142 |  I IBRES,'$G(IBD("RELEASE DATE")) S IBRMARK="PRESCRIPTION NOT RELEASED"
 | 
|---|
 | 143 |  D CT
 | 
|---|
 | 144 |  ;
 | 
|---|
 | 145 | RXQ D LOG^IBNCPDP2("BILLABLE STATUS CHECK",IBRES)
 | 
|---|
 | 146 |  Q IBRES
 | 
|---|
 | 147 |  ;
 | 
|---|
 | 148 |  ;
 | 
|---|
 | 149 | CT ; files in claims tracking
 | 
|---|
 | 150 |  I IBTRKR D CT^IBNCPDPU(DFN,IBRXN,IBFIL,IBADT,$G(IBRMARK))
 | 
|---|
 | 151 |  Q
 | 
|---|
 | 152 |  ;
 | 
|---|
 | 153 | EXEMPT ; exemption reasons
 | 
|---|
 | 154 |  ; variable from SD call ^ variable from PSO ^ reason not billable
 | 
|---|
 | 155 |  ;;1^AO^AGENT ORANGE
 | 
|---|
 | 156 |  ;;2^IR^IONIZING RADIATION
 | 
|---|
 | 157 |  ;;3^SC^SC TREATMENT
 | 
|---|
 | 158 |  ;;4^SWA^SOUTHWEST ASIA
 | 
|---|
 | 159 |  ;;5^MST^MILITARY SEXUAL TRAUMA
 | 
|---|
 | 160 |  ;;6^HNC^HEAD/NECK CANCER
 | 
|---|
 | 161 |  ;;7^CV^COMBAT VETERAN
 | 
|---|
 | 162 |  ;;8^SHAD^PROJECT 112/SHAD
 | 
|---|
 | 163 |  ;;
 | 
|---|
 | 164 |  ;
 | 
|---|
 | 165 | ERMSG(IBSTL) ; Inactive status reason
 | 
|---|
 | 166 |  N IBSTA,IBI,IBARR,IBTXT
 | 
|---|
 | 167 |  D STATAR^IBCNRU1(.IBARR)
 | 
|---|
 | 168 |  F IBI=1:1:$L(IBSTL,",")+1 S IBSTA=+$P(IBSTL,",",IBI) Q:"^100^200^300^400^"'[(U_IBSTA_U)
 | 
|---|
 | 169 |  S IBTXT=$G(IBARR(+IBSTA),"Plan is not active.")
 | 
|---|
 | 170 |  Q IBTXT
 | 
|---|
 | 171 |  ;
 | 
|---|
 | 172 | NEEDSC(IBTXT) ; is the CT NBR one of 'needs sc determination'?
 | 
|---|
 | 173 |  I IBTXT="NEEDS SC DETERMINATION" Q 1
 | 
|---|
 | 174 |  N I,RES,IBT
 | 
|---|
 | 175 |  S RES=0
 | 
|---|
 | 176 |  F I=2:1 S IBT=$P($P($T(EXEMPT+I),";;",2),U,3) Q:IBT=""  I IBT=IBTXT S RES=1 Q
 | 
|---|
 | 177 |  Q RES
 | 
|---|
 | 178 |  ;
 | 
|---|
 | 179 | PAPERBIL(IBTRKRN) ; 'paper' bill in CT?
 | 
|---|
 | 180 |  N IBZ,IBIFN
 | 
|---|
 | 181 |  S IBZ=$G(^IBT(356,IBTRKRN,0)) I IBZ="" Q 0
 | 
|---|
 | 182 |  S IBIFN=+$P(IBZ,U,11) I 'IBIFN Q 0
 | 
|---|
 | 183 |  I $P($G(^DGCR(399,IBIFN,0)),U,13)=7 Q 0  ; cancelled
 | 
|---|
 | 184 |  I $P($G(^DGCR(399,IBIFN,"M1")),U,8)'="" Q 0  ; ecme bill
 | 
|---|
 | 185 |  Q 1
 | 
|---|
 | 186 |  ;
 | 
|---|
 | 187 |  ;gets the insurance phone
 | 
|---|
 | 188 |  ;input:
 | 
|---|
 | 189 |  ; IB36 - ptr to INSURANCE COMPANY File (#36)
 | 
|---|
 | 190 |  ;output:
 | 
|---|
 | 191 |  ; the phone number
 | 
|---|
 | 192 | PHONE(IB36) ;
 | 
|---|
 | 193 |  N IB1
 | 
|---|
 | 194 |  ;check first CLAIMS (RX) PHONE NUMBER if empty
 | 
|---|
 | 195 |  S IB1=$$GET1^DIQ(36,+IB36,.1311,"E")
 | 
|---|
 | 196 |  Q:$L(IB1)>0 IB1
 | 
|---|
 | 197 |  ;check BILLING PHONE NUMBER if empty - return nothing
 | 
|---|
 | 198 |  S IB1=$$GET1^DIQ(36,+IB36,.132,"E")
 | 
|---|
 | 199 |  Q IB1
 | 
|---|
 | 200 |  ;
 | 
|---|
 | 201 |  ;IBNCPDP1
 | 
|---|