| 1 | BPSNCPD1 ;BHAM ISC/LJE - Pharmacy API part 2 ;06/16/2004
 | 
|---|
| 2 |  ;;1.0;E CLAIMS MGMT ENGINE;**1,3,5**;JUN 2004;Build 45
 | 
|---|
| 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  ; External reference to $$NCPDPQTY^PSSBPSUT supported by IA4992
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  ; Due to space considerations, these comments were moved from BPSNPCPD
 | 
|---|
| 8 |  ;   to this routine.
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  ; ------------------ Beginning of BPSNCPDP comments ------------------
 | 
|---|
| 11 |  ;Input
 | 
|---|
| 12 |  ; BRXIEN = Prescription IEN
 | 
|---|
| 13 |  ; BFILL = Fill Number
 | 
|---|
| 14 |  ; BFILLDAT = Fill Date of current prescription and fill number
 | 
|---|
| 15 |  ; BWHERE (RX Action)
 | 
|---|
| 16 |  ;    ARES = Resubmit for an auto-reversed claim was released while waiting
 | 
|---|
| 17 |  ;           for the payer response
 | 
|---|
| 18 |  ;    AREV = Auto-Reversal
 | 
|---|
| 19 |  ;    BB   = Back Billing
 | 
|---|
| 20 |  ;    CRLB = CMOP Release & Rebill
 | 
|---|
| 21 |  ;    CRLR = CMOP Release & Reverse (successful release)
 | 
|---|
| 22 |  ;    CRLX = CMOP unsuccessful release & reverse
 | 
|---|
| 23 |  ;    DC   = Discontinue - only reverse un-released PAYABLE DC's, release date check
 | 
|---|
| 24 |  ;           should be in calling routine.
 | 
|---|
| 25 |  ;    DDED = Delete in edit
 | 
|---|
| 26 |  ;    DE   = Delete
 | 
|---|
| 27 |  ;    ED   = Edit
 | 
|---|
| 28 |  ;    ERES = Resubmit from ECME user screen
 | 
|---|
| 29 |  ;    EREV = Reversal from ECME user screen
 | 
|---|
| 30 |  ;    HLD  = Put prescription on Hold
 | 
|---|
| 31 |  ;    OF   = Original Fill
 | 
|---|
| 32 |  ;    PC   = Pull CMOPs
 | 
|---|
| 33 |  ;    PE   = Pull early from suspense
 | 
|---|
| 34 |  ;    PL   = Pull local from suspense
 | 
|---|
| 35 |  ;    PP   = PP from Patient Prescription Processing option
 | 
|---|
| 36 |  ;    RF   = Refill
 | 
|---|
| 37 |  ;    RL   = Release Rx NDC check - Rebill if billed NDC doesn't match release NDC
 | 
|---|
| 38 |  ;    RN   = Renew
 | 
|---|
| 39 |  ;    RRL  = Original claim rejected, submit another claim, no reversal
 | 
|---|
| 40 |  ;    RS   = Return-to-Stock
 | 
|---|
| 41 |  ; BILLNDC = Valid NDC# with format 5-4-2
 | 
|---|
| 42 |  ; REVREAS = Reversal Reason
 | 
|---|
| 43 |  ; DURREC  = String of DUR info - Three "^" pieces
 | 
|---|
| 44 |  ;                Professional Service Code
 | 
|---|
| 45 |  ;                Reason for Service Code
 | 
|---|
| 46 |  ;                Result of Service Code
 | 
|---|
| 47 |  ; BPOVRIEN = Pointer to BPS NCPDP OVERIDE file.  This parameter will 
 | 
|---|
| 48 |  ;            only be passed if there are overrides entered by the
 | 
|---|
| 49 |  ;            user via the Resubmit with Edits (RED) option in the 
 | 
|---|
| 50 |  ;            user screen.
 | 
|---|
| 51 |  ; BPSCLARF = Clarification Code (0-9,99), entered by pharmacist and passed
 | 
|---|
| 52 |  ;            by Outpatient Pharmacy to ECME to put into the claim  
 | 
|---|
| 53 |  ;  
 | 
|---|
| 54 |  ;Output (RESPONSE^MESSAGE)
 | 
|---|
| 55 |  ; RESPONSE
 | 
|---|
| 56 |  ;    0  Submitted through ECME
 | 
|---|
| 57 |  ;    1  No submission through ECME
 | 
|---|
| 58 |  ;    2  IB not billable
 | 
|---|
| 59 |  ;    3  Claim was closed, not submitted (RTS/Deletes)
 | 
|---|
| 60 |  ;    4  Unable to queue claim
 | 
|---|
| 61 |  ;    5  Incorrect information supplied to ECME
 | 
|---|
| 62 |  ;    10 Reversal but no resubmit
 | 
|---|
| 63 |  ; MESSAGE = Message associated with the response (error/submitted)
 | 
|---|
| 64 |  ; ----------------- End of BPSNCPDP comments ----------------------
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 |  ; Procedure STARRAY - Retrieve information for API call to IB and store in BPSARRY
 | 
|---|
| 67 |  ; Incoming Parameters
 | 
|---|
| 68 |  ;    BRXIEN - Prescription IEN
 | 
|---|
| 69 |  ;    BFILL  - Fill Number
 | 
|---|
| 70 |  ;    BWHERE - RX action
 | 
|---|
| 71 |  ;    BPSARRY  - Array that is built (passed by reference)
 | 
|---|
| 72 |  ;    BPSITE - OUTPATIENT SITE file #59 ien
 | 
|---|
| 73 | STARRAY(BRXIEN,BFILL,BWHERE,BPSARRY,BPSITE) ;
 | 
|---|
| 74 |  N DRUGIEN,BPARR,BPSARR,QTY
 | 
|---|
| 75 |  D RXAPI^BPSUTIL1(BRXIEN,"6;7;8;31","BPARR","I")
 | 
|---|
| 76 |  I BFILL>0 D RXSUBF^BPSUTIL1(BRXIEN,52,52.1,BFILL,"1;1.1;17","BPARR","I")
 | 
|---|
| 77 |  S BPSARRY("DFN")=DFN
 | 
|---|
| 78 |  S BPSARRY("DAYS SUPPLY")=$S(BFILL=0:$G(BPARR(52,BRXIEN,8,"I")),1:$G(BPARR(52.1,BFILL,1.1,"I")))
 | 
|---|
| 79 |  S BPSARRY("IEN")=BRXIEN
 | 
|---|
| 80 |  S BPSARRY("FILL NUMBER")=BFILL
 | 
|---|
| 81 |  S BPSARRY("NDC")=BILLNDC
 | 
|---|
| 82 |  S (BPSARRY("DRUG"),DRUGIEN)=BPARR(52,BRXIEN,6,"I")
 | 
|---|
| 83 |  S BPSARRY("DEA")=$$DRUGDIE^BPSUTIL1(DRUGIEN,3)
 | 
|---|
| 84 |  S BPSARRY("COST")=$$DRUGDIE^BPSUTIL1(DRUGIEN,16)
 | 
|---|
| 85 |  S QTY=$S(BFILL=0:$G(BPARR(52,BRXIEN,7,"I")),1:$G(BPARR(52.1,BFILL,1,"I")))
 | 
|---|
| 86 |  S QTY=$$NCPDPQTY^PSSBPSUT(DRUGIEN,QTY)
 | 
|---|
| 87 |  S BPSARRY("QTY")=$P(QTY,U,1)
 | 
|---|
| 88 |  S BPSARRY("UNITS")=$P(QTY,U,2)
 | 
|---|
| 89 |  S BPSARRY("FILL DATE")=BFILLDAT
 | 
|---|
| 90 |  S BPSARRY("RELEASE DATE")=$P($S(BFILL=0:$G(BPARR(52,BRXIEN,31,"I")),1:$G(BPARR(52.1,BFILL,17,"I"))),".")
 | 
|---|
| 91 |  S BPSARRY("SC/EI OVR")=0
 | 
|---|
| 92 |  ;determine BPS PHARMACY
 | 
|---|
| 93 |  I $G(BPSITE)>0 S BPSARRY("EPHARM")=$$GETPHARM^BPSUTIL(BPSITE)
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 |  ; Add user so that it is stored correctly in the IB Event Log
 | 
|---|
| 96 |  ;  Note: Auto-Reversals (AREV) and CMOP/OPAI (CR*/PC/RL) use postmaster (.5)
 | 
|---|
| 97 |  I ",AREV,CRLB,CRLX,CRLR,PC,RL,"[(","_BWHERE_",") S BPSARRY("USER")=.5
 | 
|---|
| 98 |  E  S BPSARRY("USER")=DUZ
 | 
|---|
| 99 |  Q
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 |  ; Called by BPSNCPDP to display progress of claim
 | 
|---|
| 102 | STATUS(BRXIEN,BFILL,REBILL,REVONLY,BPSTART,BWHERE) ;
 | 
|---|
| 103 |  ; Initialization
 | 
|---|
| 104 |  N TRANSIEN,CERTUSER,BPSTO,END,IBSEQ,BPQ
 | 
|---|
| 105 |  N CLMSTAT,OCLMSTAT,RESUB,RESFL
 | 
|---|
| 106 |  S (CLMSTAT,OCLMSTAT)=0
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 |  ; Set CERTUSER to true if this user is the certifier
 | 
|---|
| 109 |  S CERTUSER=^BPS(9002313.99,1,"CERTIFIER")=DUZ
 | 
|---|
| 110 |  ;
 | 
|---|
| 111 |  ; Build Transaction IEN
 | 
|---|
| 112 |  S TRANSIEN=BRXIEN_"."_$E($TR($J("",4-$L(BFILL))," ","0")_BFILL,1,4)_1
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 |  ; Write Rebill and Status Messages
 | 
|---|
| 115 |  W !!,"Claim Status: "
 | 
|---|
| 116 |  I REBILL,$G(MOREDATA("REVERSE THEN RESUBMIT"))'=2 W !,"Reversing and Rebilling a previously submitted claim...",!,"Reversing..."
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 |  ; Get the ECME Timeout and set the display timeout
 | 
|---|
| 119 |  S BPSTO=$$GET1^DIQ(9002313.99,"1,",3.01),END=$S(CERTUSER:50,$G(BPSTO)]"":BPSTO,1:5)
 | 
|---|
| 120 |  ;
 | 
|---|
| 121 |  ; For remaining time, loop through and display status
 | 
|---|
| 122 |  S (BPQ,RESFL)=0
 | 
|---|
| 123 |  F IBSEQ=1:1:END D  Q:BPQ=1
 | 
|---|
| 124 |  . H 1
 | 
|---|
| 125 |  . ;
 | 
|---|
| 126 |  . ; Get status of resubmit, last update, and claim status
 | 
|---|
| 127 |  . S CLMSTAT=$$STATUS^BPSOSRX(BRXIEN,BFILL,1)
 | 
|---|
| 128 |  . S RESUB=$$GET1^DIQ(9002313.59,TRANSIEN_",",1.12,"I")
 | 
|---|
| 129 |  . ;
 | 
|---|
| 130 |  . ; Format status message
 | 
|---|
| 131 |  . S CLMSTAT=$P(CLMSTAT,"^",1)_$S($P(CLMSTAT,"^",1)["IN PROGRESS":"-"_$P(CLMSTAT,"^",3),1:"")
 | 
|---|
| 132 |  . ;
 | 
|---|
| 133 |  . ; If we are starting the resubmit, display message
 | 
|---|
| 134 |  . I REBILL,RESFL=0,RESUB=1,CLMSTAT["Resubmitting" W !,"Resubmitting..." S RESFL=1 Q
 | 
|---|
| 135 |  . I REBILL,RESFL=0,RESUB=2,CLMSTAT["IN PROGRESS" W !,"Resubmitting..." S RESFL=1
 | 
|---|
| 136 |  . ;
 | 
|---|
| 137 |  . ; If the status has changed, display the new message
 | 
|---|
| 138 |  . I OCLMSTAT'=CLMSTAT W !,CLMSTAT S OCLMSTAT=CLMSTAT
 | 
|---|
| 139 |  . ;
 | 
|---|
| 140 |  . ; If the status is not IN PROGRESS, then we are done
 | 
|---|
| 141 |  . I CLMSTAT'["IN PROGRESS" S BPQ=1
 | 
|---|
| 142 |  W !
 | 
|---|
| 143 |  Q
 | 
|---|
| 144 |  ;
 | 
|---|
| 145 |  ; Bulletin to the OPECC
 | 
|---|
| 146 | BULL(RXI,RXR,SITE,DFN,PATNAME) ;
 | 
|---|
| 147 |  N BTXT,XMSUB,XMY,XMTEXT,XMDUZ
 | 
|---|
| 148 |  N SSN,X,SITENM
 | 
|---|
| 149 |  I $G(SITE) D
 | 
|---|
| 150 |  . K ^TMP($J,"BPSARR")
 | 
|---|
| 151 |  . D PSS^PSO59(SITE,,"BPSARR")
 | 
|---|
| 152 |  . S SITENM=$G(^TMP($J,"BPSARR",SITE,.01))
 | 
|---|
| 153 |  I $G(DFN) D
 | 
|---|
| 154 |  . S X=$P($G(^DPT(DFN,0)),U,9)
 | 
|---|
| 155 |  . S SSN=$E(X,$L(X)-3,$L(X))
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 |  ; Need to do in the background
 | 
|---|
| 158 |  ;   Mailman calls CMOP which calls EN^BPSNCPDP.
 | 
|---|
| 159 |  ;   If BPSNCPDP* (same process) then calls mailman, it gets confused.
 | 
|---|
| 160 |  N ZTIO,ZTRTN,ZTDTH,ZTSAVE,ZTDESC
 | 
|---|
| 161 |  N %,%H,%I,X
 | 
|---|
| 162 |  D NOW^%DTC
 | 
|---|
| 163 |  S ZTIO="",ZTDTH=%,ZTDESC="IN PROGRESS BULLETIN"
 | 
|---|
| 164 |  S ZTSAVE("RXR")="",ZTSAVE("RXI")=""
 | 
|---|
| 165 |  S ZTSAVE("SITENM")="",ZTSAVE("PATNAME")=""
 | 
|---|
| 166 |  S ZTSAVE("SSN")=""
 | 
|---|
| 167 |  S ZTRTN="BULL1^BPSNCPD1"
 | 
|---|
| 168 |  D ^%ZTLOAD
 | 
|---|
| 169 |  Q
 | 
|---|
| 170 |  ;
 | 
|---|
| 171 | BULL1 ;
 | 
|---|
| 172 |  S XMSUB="RX not processed for site "_$G(SITENM)
 | 
|---|
| 173 |  S BTXT(1)="Prescription "_$$RXAPI1^BPSUTIL1(RXI,.01,"E")_" and fill number "_+RXR_" could "
 | 
|---|
| 174 |  S BTXT(1)=BTXT(1)_"not be processed because the "
 | 
|---|
| 175 |  S BTXT(2)="previous request was in progress.  There may have been a delay in processing "
 | 
|---|
| 176 |  S BTXT(3)="of the previous claim or the previous claim may be stranded."
 | 
|---|
| 177 |  S BTXT(4)=""
 | 
|---|
| 178 |  S BTXT(5)="For more information on this prescription's activity, please view the "
 | 
|---|
| 179 |  S BTXT(6)="ECME log within the View Prescription (VP) option on the Further Research (FR) "
 | 
|---|
| 180 |  S BTXT(7)="menu of the ECME user screen."
 | 
|---|
| 181 |  S BTXT(8)=""
 | 
|---|
| 182 |  S BTXT(9)="Patient Name: "_$G(PATNAME)
 | 
|---|
| 183 |  S BTXT(10)="Last four digits of SSN: "_$G(SSN)
 | 
|---|
| 184 |  S BTXT(11)=""
 | 
|---|
| 185 |  ;
 | 
|---|
| 186 |  S XMDUZ="BPS PACKAGE",XMTEXT="BTXT("
 | 
|---|
| 187 |  S XMY("G.BPS OPECC")=""
 | 
|---|
| 188 |  I $G(DUZ)'<1 S XMY(DUZ)=""
 | 
|---|
| 189 |  D ^XMD
 | 
|---|
| 190 |  Q
 | 
|---|