[613] | 1 | IBNCPEV1 ;DALOI/SS - NCPDP BILLING EVENTS REPORT ;21-MAR-2006
|
---|
| 2 | ;;2.0;INTEGRATED BILLING;**342,339,363**;21-MAR-94;Build 35
|
---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
| 4 | ;
|
---|
| 5 | ;IA# 10155 is used to read ^DD(file,field,0) node
|
---|
| 6 | Q
|
---|
| 7 | ;
|
---|
| 8 | SETVARS ;
|
---|
| 9 | ;newed in IBNCPEV
|
---|
| 10 | S (IBECME,IBPAT,IBRX,IBQ,IBSCR,IBPAGE,IBDTL,IBDIVS)=0
|
---|
| 11 | ;date
|
---|
| 12 | F D DATE^IBNCPDPE Q:IBQ Q:$$TESTDATA^IBNCPDPE
|
---|
| 13 | Q:IBQ
|
---|
| 14 | N IBMLTDV S IBMLTDV=$$MULTPHRM^BPSUTIL()
|
---|
| 15 | I +IBMLTDV=1 S IBDIVS=+$$MULTIDIV(.IBDIVS) S:IBDIVS=0 IBDIVS(0)="0^ALL" I IBDIVS=-1 S IBQ=1 Q
|
---|
| 16 | I +IBMLTDV=0 S IBDIVS=0,IBDIVS(0)="0^"_$P(IBMLTDV,U,2)
|
---|
| 17 | D MODE^IBNCPDPE Q:IBQ
|
---|
| 18 | D DEVICE^IBNCPDPE Q:IBQ
|
---|
| 19 | Q
|
---|
| 20 | ;
|
---|
| 21 | ;/**
|
---|
| 22 | ; input -
|
---|
| 23 | ; IBECMENO = ECME #
|
---|
| 24 | ; IBST = start date (FM format)
|
---|
| 25 | ; IBEND = end date (FM format)
|
---|
| 26 | ; output - returns internal entry number of file #52 for the earliest date within the date range
|
---|
| 27 | GETRX(IBECMENO,IBST,IBEND) ; get ien of file 52 from #366.14
|
---|
| 28 | ; array from where the ECME BILLING EVENTS report gets its data
|
---|
| 29 | ; This subroutine is called when the user enters an ECME# as
|
---|
| 30 | ; part of the search criteria
|
---|
| 31 | N IBDATE,IBNO,IBIEN
|
---|
| 32 | S IBDATE=+$O(^IBCNR(366.14,"E",IBECMENO,IBST-1))
|
---|
| 33 | I IBDATE=0 Q 0
|
---|
| 34 | I IBDATE>IBEND Q 0
|
---|
| 35 | S IBNO=+$O(^IBCNR(366.14,"E",IBECMENO,IBDATE,0))
|
---|
| 36 | I IBNO=0 Q 0
|
---|
| 37 | S IBIEN=$O(^IBCNR(366.14,"B",IBDATE,0))
|
---|
| 38 | Q +$P($G(^IBCNR(366.14,IBIEN,1,IBNO,2)),U)
|
---|
| 39 | ;
|
---|
| 40 | ;/**
|
---|
| 41 | ;finish
|
---|
| 42 | ;input:
|
---|
| 43 | ;IBD2 - node ^IBCNR(366.14,D0,1,D1,2)
|
---|
| 44 | ;IBD3 - node ^IBCNR(366.14,D0,1,D1,3)
|
---|
| 45 | ;IBD4 - node ^IBCNR(366.14,D0,1,D1,4)
|
---|
| 46 | ;IBINS - multiple of ^IBCNR(366.14,D0,1,D1,5)
|
---|
| 47 | DSTAT(IBD2,IBD3,IBD4,IBINS) ;
|
---|
| 48 | N IBX,IBT,IBSC,IB1ST,IBNXT,IBEXMPV
|
---|
| 49 | S IB1ST=1
|
---|
| 50 | D CHKP^IBNCPEV Q:IBQ
|
---|
| 51 | W !?10,"ELIGIBILITY: "
|
---|
| 52 | F IBX=2:1 S IBT=$P($T(EXEMPT+IBX^IBNCPDP1),";",3),IBSC=$P(IBT,U,2) Q:IBSC="" S IBEXMPV=$$EXMPFLDS(IBSC,IBD4) D:IBEXMPV]"" Q:IBQ!(IBEXMPV=3)
|
---|
| 53 | . I IBEXMPV=3 W "overridden by the user" Q
|
---|
| 54 | . I 'IB1ST W "," I $X>70 D CHKP^IBNCPEV Q:IBQ W !?10 S IB1ST=1
|
---|
| 55 | . W " ",IBSC,":",$S(IBEXMPV=1:"Yes",IBEXMPV=0:"No",IBEXMPV=2:"No Answer",1:"?") S IB1ST=0
|
---|
| 56 | Q:IBQ
|
---|
| 57 | I $P(IBD2,U,4) D CHKP^IBNCPEV Q:IBQ W !?10,"DRUG:",$$DRUGNAM(+$P(IBD2,U,4))
|
---|
| 58 | D CHKP^IBNCPEV Q:IBQ W !?10
|
---|
| 59 | W "NDC:",$S($P(IBD2,U,5):$P(IBD2,U,5),1:"No"),", BILLED QTY:",$S($P(IBD2,U,8):$P(IBD2,U,8),1:"No"),", COST:",$S($P(IBD3,U,4):$P(IBD3,U,4),1:"No")
|
---|
| 60 | I $P(IBD2,U,10)]"" W ", DEA:",$P(IBD2,U,10)
|
---|
| 61 | S IBX=0,IBNXT=0 F S IBX=$O(IBINS(IBX)) Q:'IBX D Q:IBQ S IBNXT=1
|
---|
| 62 | .N Y S Y=$P(IBINS(IBX,0),U,2,8) W:'Y "@@@@" Q:'Y
|
---|
| 63 | .I IBNXT D CHKP^IBNCPEV Q:IBQ W !?10,"-----------"
|
---|
| 64 | .D CHKP^IBNCPEV Q:IBQ W !?10
|
---|
| 65 | .W "PLAN:",$P($G(^IBA(355.3,+Y,0)),U,3)," "
|
---|
| 66 | .W "INSURANCE: ",$P($G(^DIC(36,+$G(^IBA(355.3,+Y,0)),0)),U)
|
---|
| 67 | .D CHKP^IBNCPEV Q:IBQ W !?10 S IB1ST=1
|
---|
| 68 | .I $P(Y,U,2)]"" W "BIN:",$P(Y,U,2) S IB1ST=0
|
---|
| 69 | .I $P(Y,U,3)]"" W:'IB1ST ", " W "PCN:",$P(Y,U,3) S IB1ST=0
|
---|
| 70 | .I $P(Y,U,4)]"" W:'IB1ST ", " W "PAYER SHEET B1:",$P(Y,U,4) S IB1ST=0
|
---|
| 71 | .D CHKP^IBNCPEV Q:IBQ W !?10 S IB1ST=1
|
---|
| 72 | .S Y=IBINS(IBX,1)
|
---|
| 73 | .I $P(Y,U,4)]"" W "PAYER SHEET B2:",$P(Y,U,4) S IB1ST=0
|
---|
| 74 | .I $P(Y,U,5)]"" W:'IB1ST ", " W "PAYER SHEET B3:",$P(Y,U,5)
|
---|
| 75 | .;S Y=$G(Z1("INS",IBX,2)) Q:Y=""
|
---|
| 76 | .S Y=IBINS(IBX,2) Q:Y=""
|
---|
| 77 | .D CHKP^IBNCPEV Q:IBQ W !?10 S IB1ST=1
|
---|
| 78 | .I $P(Y,U)]"" W "DISPENSING FEE:",$P(Y,U) S IB1ST=0
|
---|
| 79 | .I $P(Y,U,2)]"" W:'IB1ST ", " W "BASIS OF COST DETERM:",$$BOCD^IBNCPEV($P(Y,U,2)) S IB1ST=0
|
---|
| 80 | .D CHKP^IBNCPEV Q:IBQ W !?10 S IB1ST=1
|
---|
| 81 | .I $P(Y,U,3)]"" W "COST:",$J($P(Y,U,3),0,2) S IB1ST=0
|
---|
| 82 | .I $P(Y,U,4)]"" W:'IB1ST ", " W "GROSS AMT DUE:",$J($P(Y,U,4),0,2) S IB1ST=0
|
---|
| 83 | .I $P(Y,U,5)]"" W:'IB1ST ", " W "ADMIN FEE:",$J($P(Y,U,5),0,2)
|
---|
| 84 | Q:IBQ
|
---|
| 85 | ;
|
---|
| 86 | D CHKP^IBNCPEV Q:IBQ
|
---|
| 87 | W !?10,"USER:",$$USR^IBNCPEV(+$P(IBD3,U,10))
|
---|
| 88 | Q
|
---|
| 89 | ;
|
---|
| 90 | ;get Exemption status by name
|
---|
| 91 | ;IBEXMP - exemption (like "AO","EC", etc)
|
---|
| 92 | ;IBNODE - node ^IBCNR(366.14,D0,1,D1,4)
|
---|
| 93 | EXMPFLDS(IBEXMP,IBNODE) ;
|
---|
| 94 | Q:IBEXMP="AO" $P(IBNODE,U,1)
|
---|
| 95 | Q:IBEXMP="CV" $P(IBNODE,U,2)
|
---|
| 96 | Q:IBEXMP="SWA" $P(IBNODE,U,3)
|
---|
| 97 | Q:IBEXMP="IR" $P(IBNODE,U,4)
|
---|
| 98 | Q:IBEXMP="MST" $P(IBNODE,U,5)
|
---|
| 99 | Q:IBEXMP="HNC" $P(IBNODE,U,6)
|
---|
| 100 | Q:IBEXMP="SC" $P(IBNODE,U,7)
|
---|
| 101 | Q:IBEXMP="SHAD" $P(IBNODE,U,8)
|
---|
| 102 | Q ""
|
---|
| 103 | ;returns DFN from file #366.14 by prescription ien of file #50
|
---|
| 104 | GETDFN(IBRX) ;
|
---|
| 105 | N IB1,IB2
|
---|
| 106 | S IB1=+$O(^IBCNR(366.14,"I",IBRX,0))
|
---|
| 107 | I IB1=0 Q 0
|
---|
| 108 | S IB2=+$O(^IBCNR(366.14,"I",IBRX,IB1,0))
|
---|
| 109 | I IB2=0 Q 0
|
---|
| 110 | Q +$P($G(^IBCNR(366.14,IB1,1,IB2,0)),U,3)
|
---|
| 111 | ;
|
---|
| 112 | ;return DRUG name (#50,.01)
|
---|
| 113 | ;IBX1 - ien in file #50
|
---|
| 114 | DRUGNAM(IBX1) ;
|
---|
| 115 | ;Q $P($G(^PSDRUG(IBX1,0)),U)
|
---|
| 116 | N X
|
---|
| 117 | K ^TMP($J,"IBNCPDP50")
|
---|
| 118 | D DATA^PSS50(IBX1,"","","","","IBNCPDP50")
|
---|
| 119 | S X=$G(^TMP($J,"IBNCPDP50",IBX1,.01))
|
---|
| 120 | K ^TMP($J,"IBNCPDP50")
|
---|
| 121 | Q X
|
---|
| 122 | ;
|
---|
| 123 | DRUGAPI(DRUGIEN,FLDNUM) ;
|
---|
| 124 | ;return a DRUG's field value
|
---|
| 125 | ;input:
|
---|
| 126 | ; DRUGIEN - ien #50
|
---|
| 127 | ; FLDNUM - field number (like .01)
|
---|
| 128 | ;output:
|
---|
| 129 | ; returned value that contains the external value of the specified field
|
---|
| 130 | N IBARR,DIQ,DIC
|
---|
| 131 | S DIQ="IBARR",DIQ(0)="E",DIC=50
|
---|
| 132 | D EN^PSSDI(50,"IB",DIC,.FLDNUM,.DRUGIEN,.DIQ)
|
---|
| 133 | Q $G(IBARR(50,DRUGIEN,FLDNUM,"E"))
|
---|
| 134 | ;
|
---|
| 135 | ;reopen
|
---|
| 136 | REOPEN ;
|
---|
| 137 | D CHKP^IBNCPEV Q:IBQ
|
---|
| 138 | D SUBHDR^IBNCPEV
|
---|
| 139 | I +$P(IBD3,U,3) D CHKP^IBNCPEV Q:IBQ W !?10,"PLAN:",$P($G(^IBA(355.3,+$P(IBD3,U,3),0)),U,3),", INSURANCE: ",$P($G(^DIC(36,+$G(^IBA(355.3,+$P(IBD3,U,3),0)),0)),U)
|
---|
| 140 | I $L($P(IBD3,U,6))>2 D CHKP^IBNCPEV Q:IBQ W !?10,"REOPEN COMMENTS:",$P(IBD3,U,6)
|
---|
| 141 | D CHKP^IBNCPEV Q:IBQ
|
---|
| 142 | D DISPUSR^IBNCPEV
|
---|
| 143 | Q
|
---|
| 144 | ;
|
---|
| 145 | ;Prompts user to select miltiple divisions (BPS PHARMACIES)
|
---|
| 146 | ; in order to filter the report by division(s) or for ALL divisions
|
---|
| 147 | ;
|
---|
| 148 | ;returns composite value:
|
---|
| 149 | ;1st piece
|
---|
| 150 | ; 1 - divisions were selected
|
---|
| 151 | ; 0 - divisions were NOT selected
|
---|
| 152 | ; -1 if upparrow entered or timeout
|
---|
| 153 | ;2nd piece
|
---|
| 154 | ; A-all or D - division(s) in the
|
---|
| 155 | ;
|
---|
| 156 | ;and by reference:
|
---|
| 157 | ;IBPSPHAR (only if the user selects "D") - a local array with iens and names
|
---|
| 158 | ; of BPS PHARMACY(is) (file #9002313.56) selected by the user
|
---|
| 159 | ; IBPSPHAR(ien of file #9002313.56) = ien of file #9002313.56 ^ name of the BPS PHARMACY
|
---|
| 160 | ;
|
---|
| 161 | MULTIDIV(IBPSPHAR) ;
|
---|
| 162 | N IBDIVCNT,IBANSW,IBRETV
|
---|
| 163 | S IBRETV=$$SELPHARM^BPSUTIL(.IBPSPHAR)
|
---|
| 164 | I IBRETV="^" Q -1 ;exit
|
---|
| 165 | I IBRETV="A" Q "0^A"
|
---|
| 166 | Q "1^D"
|
---|
| 167 | ;
|
---|
| 168 | ;check if ePharmacy division in IB36614 in among those selected by the user
|
---|
| 169 | ;IBDIVS - a local array (by reference) with divisions selected by the user
|
---|
| 170 | ;returns 0 - not among selected divisions, 1 - among them
|
---|
| 171 | CHECKDIV(IB36614,IBDIVS) ;
|
---|
| 172 | I $D(IBDIVS(IB36614)) Q 1
|
---|
| 173 | Q 0
|
---|
| 174 | ;
|
---|
| 175 | ;Compile the string for divisions
|
---|
| 176 | ;input:
|
---|
| 177 | ;IBDVS - division local array by reference
|
---|
| 178 | ;output:
|
---|
| 179 | ; return value with the resulting string
|
---|
| 180 | DISPLDIV(IBDVS) ;
|
---|
| 181 | I ('$D(IBDVS))!($G(IBDVS)="") Q "" ;invalid parameters
|
---|
| 182 | I IBDVS=0 Q "" ;if "all" or single division
|
---|
| 183 | N IBZ,IBCNT,IBDIVSTR
|
---|
| 184 | S IBDIVSTR=""
|
---|
| 185 | S IBZ=0,IBCNT=0
|
---|
| 186 | F S IBZ=$O(IBDVS(IBZ)) Q:+IBZ=0 D
|
---|
| 187 | . I IBCNT>0 S IBDIVSTR=IBDIVSTR_", "
|
---|
| 188 | . S IBCNT=IBCNT+1
|
---|
| 189 | . S IBDIVSTR=IBDIVSTR_$P(IBDVS(IBZ),U,2)
|
---|
| 190 | I $L(IBDIVSTR)'<80 S IBDIVSTR=$E(IBDIVSTR,1,75)_"..."
|
---|
| 191 | Q $$CENTERIT(IBDIVSTR,80)
|
---|
| 192 | ;
|
---|
| 193 | ;Compile the string for title
|
---|
| 194 | ;input:
|
---|
| 195 | ;IBBDT - begin date
|
---|
| 196 | ;IBEDT - end date
|
---|
| 197 | ;IBDTL - summary/detail mode
|
---|
| 198 | ;IBDIVS - division local array by reference
|
---|
| 199 | ;output:
|
---|
| 200 | ; return value with the resulting string
|
---|
| 201 | DISPTITL(IBBDT,IBEDT,IBDTL,IBDIVS) ;
|
---|
| 202 | I ('$D(IBDIVS))!($G(IBDIVS)="")!($G(IBBDT)="")!($G(IBEDT)="")!($G(IBDTL)="") Q "" ;invalid parameters
|
---|
| 203 | N IBTITL
|
---|
| 204 | S IBTITL="BILLING ECME EVENTS ON "_$$DAT^IBNCPEV(IBBDT)
|
---|
| 205 | I IBBDT'=IBEDT S IBTITL=IBTITL_" TO "_$$DAT^IBNCPEV(IBEDT)
|
---|
| 206 | S IBTITL=IBTITL_" ("_$S(IBDTL:"DETAILED",1:"SUMMARY")_") for "
|
---|
| 207 | I IBDIVS'=0 S IBTITL=IBTITL_"SELECTED DIVISIONS:"
|
---|
| 208 | I IBDIVS=0 S IBTITL=IBTITL_$P(IBDIVS(0),U,2)_" DIVISION" I $P(IBDIVS(0),U,2)="ALL" S IBTITL=IBTITL_"S"
|
---|
| 209 | Q $$CENTERIT(IBTITL,80)
|
---|
| 210 | ;
|
---|
| 211 | ;Center the string (add left pads to center the string)
|
---|
| 212 | ;input:
|
---|
| 213 | ;IBSTR - input string
|
---|
| 214 | ;IBMAXLEN - max len
|
---|
| 215 | ;output:
|
---|
| 216 | ; return value with the resulting string
|
---|
| 217 | CENTERIT(IBSTR,IBMAXLEN) ;
|
---|
| 218 | I ($G(IBSTR)="")!(+$G(IBMAXLEN)=0) Q ""
|
---|
| 219 | N IBLEFT,IBSP
|
---|
| 220 | S IBSTR=$E(IBSTR,1,IBMAXLEN)
|
---|
| 221 | S IBLEFT=((IBMAXLEN-$L(IBSTR))/2)\1
|
---|
| 222 | S IBSP=""
|
---|
| 223 | S $P(IBSP," ",IBLEFT+1)=""
|
---|
| 224 | Q IBSP_IBSTR
|
---|
| 225 | ;Get list of indicators that were not answered
|
---|
| 226 | GETNOANS(IBD4) ;
|
---|
| 227 | N IBX,IBT,IBSC,IBEXMPV,IBQ,IBRET
|
---|
| 228 | S IBQ=0,IBRET=""
|
---|
| 229 | F IBX=2:1 S IBT=$P($T(EXEMPT+IBX^IBNCPDP1),";",3),IBSC=$P(IBT,U,2) Q:IBSC="" S IBEXMPV=$$EXMPFLDS^IBNCPEV1(IBSC,IBD4) D:IBEXMPV]""
|
---|
| 230 | . I IBEXMPV=2 S IBRET=IBRET_","_IBSC
|
---|
| 231 | Q $S(IBRET="":"SC",1:$E(IBRET,2,99))
|
---|
| 232 | ;IBNCPEV1
|
---|