| 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 | 
|---|