| 1 | PSOREJU2 ;BIRM/MFR - BPS (ECME) - Clinical Rejects Utilities (1) ;10/15/04 | 
|---|
| 2 | ;;7.0;OUTPATIENT PHARMACY;**148,260**;DEC 1997;Build 84 | 
|---|
| 3 | ;Reference to $$NABP^BPSBUTL supported by IA 4719 | 
|---|
| 4 | ;Reference to File 9002313.23 - BPS NCPDP REASON FOR SERVICE CODE supported by IA 4714 | 
|---|
| 5 | ; | 
|---|
| 6 | GET(RX,RFL,REJDATA,REJID,OKCL,CODE) ; | 
|---|
| 7 | ; Input:  (r) RX  - Rx IEN (#52) | 
|---|
| 8 | ;         (o) RFL - Refill # (Default: most recent) | 
|---|
| 9 | ;         (r) REJDATA(REJECT IEN,FIELD) - Array where these Reject fields will be returned: | 
|---|
| 10 | ;                       "CODE" - Reject Code (79 or 88) | 
|---|
| 11 | ;                       "DATE/TIME" - DATE/TIME Reject was detected | 
|---|
| 12 | ;                       "PAYER MESSAGE" - Message returned by the payer | 
|---|
| 13 | ;                       "REASON" - Reject Reason description (from payer) | 
|---|
| 14 | ;                       "INSURANCE NAME" - Patient's Insurance Company Name | 
|---|
| 15 | ;                       "GROUP NAME" - Patient's Insurance Group Name | 
|---|
| 16 | ;                       "GROUP NUMBER" - Patient's Insurance Group Number | 
|---|
| 17 | ;                       "CARDHOLDER ID" - Patient's Insurance Cardholder ID | 
|---|
| 18 | ;                       "PLAN CONTACT" - Plan's Contact (eg., "1-800-...") | 
|---|
| 19 | ;                       "PLAN PREVIOUS FILL DATE" - Last time Rx was paid by payer | 
|---|
| 20 | ;                       "STATUS" - REJECTS status ("OPEN/UNRESOLVED" or "CLOSED/RESOLVED") | 
|---|
| 21 | ;                       "DUR TEXT" - Payer's DUR description | 
|---|
| 22 | ;                       "OTHER REJECTS" - Other Rejects on the same response | 
|---|
| 23 | ;                       "REASON SVC CODE" - Reason for Service Code | 
|---|
| 24 | ;                  If REJECT is closed, the following fields will be returned: | 
|---|
| 25 | ;                       "CLA CODE" - Clarification Code submitted | 
|---|
| 26 | ;                       "PRIOR AUTH TYPE" - Prior Authorization Type | 
|---|
| 27 | ;                       "PRIOR AUTH NUMBER" - Prior Authorization Type | 
|---|
| 28 | ;                       "CLOSED DATE/TIME" - DATE/TIME Reject was closed | 
|---|
| 29 | ;                       "CLOSED BY" - Name of the user responsible for closing Reject | 
|---|
| 30 | ;                       "CLOSE REASON" - Reason for closing Reject (text) | 
|---|
| 31 | ;                       "CLOSE COMMENTS" - User entered comments at close | 
|---|
| 32 | ;         (o) REJID - REJECT IEN in the PRESCRIPTION file for retrieve this REJECT | 
|---|
| 33 | ;         (o) OKCL - If set to 1, CLOSED REJECTs will also be returned | 
|---|
| 34 | ;         (o) CODE - Only REJECTs with this CODE should be returned | 
|---|
| 35 | ; | 
|---|
| 36 | N REJS,ARRAY,REJFLD,IDX,COM,Z | 
|---|
| 37 | ; | 
|---|
| 38 | I '$D(RFL) S RFL=$$LSTRFL^PSOBPSU1(RX) | 
|---|
| 39 | ; | 
|---|
| 40 | K REJDATA | 
|---|
| 41 | I '$O(^PSRX(RX,"REJ",0)) Q | 
|---|
| 42 | ; | 
|---|
| 43 | K REJS S RFL=+$G(RFL) | 
|---|
| 44 | I $G(REJID) D | 
|---|
| 45 | . I +$P($G(^PSRX(RX,"REJ",REJID,0)),"^",4)'=RFL Q | 
|---|
| 46 | . I '$G(OKCL),$P($G(^PSRX(RX,"REJ",REJID,0)),"^",5) Q | 
|---|
| 47 | . S REJS(REJID)="" | 
|---|
| 48 | E  D | 
|---|
| 49 | . S IDX=999 | 
|---|
| 50 | . F  S IDX=$O(^PSRX(RX,"REJ",IDX),-1) Q:'IDX  D | 
|---|
| 51 | . . I +$P($G(^PSRX(RX,"REJ",IDX,0)),"^",4)'=RFL Q | 
|---|
| 52 | . . I '$G(OKCL),$P($G(^PSRX(RX,"REJ",IDX,0)),"^",5) Q | 
|---|
| 53 | . . S REJS(IDX)="" | 
|---|
| 54 | I '$D(REJS) Q | 
|---|
| 55 | ; | 
|---|
| 56 | S IDX=0 | 
|---|
| 57 | F  S IDX=$O(REJS(IDX)) Q:'IDX  D | 
|---|
| 58 | . K ARRAY D GETS^DIQ(52.25,IDX_","_RX_",","*","","ARRAY") | 
|---|
| 59 | . K REJFLD M REJFLD=ARRAY(52.25,IDX_","_RX_",") | 
|---|
| 60 | . I $G(CODE),REJFLD(.01)'=CODE Q | 
|---|
| 61 | . S REJDATA(IDX,"CODE")=$G(REJFLD(.01)) | 
|---|
| 62 | . S REJDATA(IDX,"DATE/TIME")=$G(REJFLD(1)) | 
|---|
| 63 | . S REJDATA(IDX,"PAYER MESSAGE")=$G(REJFLD(2)) | 
|---|
| 64 | . S REJDATA(IDX,"REASON")=$G(REJFLD(3)) | 
|---|
| 65 | . S REJDATA(IDX,"PHARMACIST")=$G(REJFLD(4)) | 
|---|
| 66 | . S REJDATA(IDX,"INSURANCE NAME")=$G(REJFLD(20)) | 
|---|
| 67 | . S REJDATA(IDX,"GROUP NAME")=$G(REJFLD(6)) | 
|---|
| 68 | . S REJDATA(IDX,"GROUP NUMBER")=$G(REJFLD(21)) | 
|---|
| 69 | . S REJDATA(IDX,"CARDHOLDER ID")=$G(REJFLD(22)) | 
|---|
| 70 | . S REJDATA(IDX,"PLAN CONTACT")=$G(REJFLD(7)) | 
|---|
| 71 | . S REJDATA(IDX,"PLAN PREVIOUS FILL DATE")=$G(REJFLD(8)) | 
|---|
| 72 | . S REJDATA(IDX,"STATUS")=$G(REJFLD(9)) | 
|---|
| 73 | . S REJDATA(IDX,"OTHER REJECTS")=$G(REJFLD(17)) | 
|---|
| 74 | . S REJDATA(IDX,"DUR TEXT")=$G(REJFLD(18)) | 
|---|
| 75 | . S REJDATA(IDX,"REASON SVC CODE")=$G(REJFLD(14)) | 
|---|
| 76 | . S REJDATA(IDX,"RESPONSE IEN")=$G(REJFLD(16)) | 
|---|
| 77 | . I '$G(OKCL) Q | 
|---|
| 78 | . S REJDATA(IDX,"CLOSED DATE/TIME")=$G(REJFLD(10)) | 
|---|
| 79 | . S REJDATA(IDX,"CLOSED BY")=$G(REJFLD(11)) | 
|---|
| 80 | . S REJDATA(IDX,"CLOSE REASON")=$G(REJFLD(12)) | 
|---|
| 81 | . S REJDATA(IDX,"CLOSE COMMENTS")=$G(REJFLD(13)) | 
|---|
| 82 | . S REJDATA(IDX,"COD1")=$G(REJFLD(14)) | 
|---|
| 83 | . S REJDATA(IDX,"COD2")=$G(REJFLD(15)) | 
|---|
| 84 | . S REJDATA(IDX,"COD3")=$G(REJFLD(19)) | 
|---|
| 85 | . S REJDATA(IDX,"CLA CODE")=$G(REJFLD(24)) | 
|---|
| 86 | . S REJDATA(IDX,"PRIOR AUTH TYPE")=$G(REJFLD(25)) | 
|---|
| 87 | . S REJDATA(IDX,"PRIOR AUTH NUMBER")=$G(REJFLD(26)) | 
|---|
| 88 | . S COM=0 F  S COM=$O(^PSRX(RX,"REJ",IDX,"COM",COM)) Q:'COM  D | 
|---|
| 89 | . . S Z=^PSRX(RX,"REJ",IDX,"COM",COM,0) | 
|---|
| 90 | . . S REJDATA(IDX,"COMMENTS",COM,"DATE/TIME")=$P(Z,"^") | 
|---|
| 91 | . . S REJDATA(IDX,"COMMENTS",COM,"USER")=$P(Z,"^",2) | 
|---|
| 92 | . . S REJDATA(IDX,"COMMENTS",COM,"COMMENTS")=$P(Z,"^",3) | 
|---|
| 93 | Q | 
|---|
| 94 | ; | 
|---|
| 95 | HELP(OPTS) ; Display the Help Text for the DUR handling options (OVERRIDE/IGNORE/STOP/QUIT) | 
|---|
| 96 | ; | 
|---|
| 97 | I OPTS["O" D | 
|---|
| 98 | . W !?1,"(O)verride - This option will provide the prompts for the code sets needed to" | 
|---|
| 99 | . W !?1,"             override this reject and get a payable 3rd party claim. Before" | 
|---|
| 100 | . W !?1,"             you select this option, you may need to call the 3rd party payer" | 
|---|
| 101 | . W !?1,"             to determine which code sets are needed to override a particular" | 
|---|
| 102 | . W !?1,"             reject. Once the proper override is accepted the label will print" | 
|---|
| 103 | . W !?1,"             and the prescription can be filled." | 
|---|
| 104 | ; | 
|---|
| 105 | I OPTS["I" D | 
|---|
| 106 | . W !?1,"(I)gnore   - Choosing Ignore will by-pass 3rd party processing and will allow" | 
|---|
| 107 | . W !?1,"             you to print a label and fill the prescription. This essentially" | 
|---|
| 108 | . W !?1,"             ignores the clinical safety issues suggested by the 3rd party" | 
|---|
| 109 | . W !?1,"             payer and will NOT result in a payable claim." | 
|---|
| 110 | ; | 
|---|
| 111 | I OPTS["Q" D | 
|---|
| 112 | . W !?1,"(Q)uit     - Choosing Quit will postpone the processing of this prescription" | 
|---|
| 113 | . W !?1,"             until this 3rd party reject is resolved. A label will not be" | 
|---|
| 114 | . W !?1,"             printed for this prescription and it can not be filled/dispensed" | 
|---|
| 115 | . W !?1,"             until this reject is resolved. Rejects can be resolved through" | 
|---|
| 116 | . W !?1,"             the Worklist option under the ePharmacy menu." | 
|---|
| 117 | Q | 
|---|
| 118 | ; | 
|---|
| 119 | DVINFO(RX,RFL,LM) ; Returns header displayable Division Information | 
|---|
| 120 | ;Input: (r) RX   - Rx IEN (#52) | 
|---|
| 121 | ;       (o) RFL  - Refill # (Default: most recent) | 
|---|
| 122 | ;       (o) LM   - ListManager format? (1 - Yes / 0 - No) - Default: 0 | 
|---|
| 123 | N TXT,DVINFO,NCPNPI | 
|---|
| 124 | S DVINFO="Division : "_$$GET1^DIQ(59,+$$RXSITE^PSOBPSUT(RX,RFL),.01) | 
|---|
| 125 | S NCPNPI=$P($$NABP^BPSBUTL(RX,RFL)," ") | 
|---|
| 126 | S $E(DVINFO,$S($G(LM):58,1:51))=$S($L(NCPNPI)=7:"NCPDP",1:"  NPI")_"#: "_NCPNPI | 
|---|
| 127 | Q DVINFO | 
|---|
| 128 | ; | 
|---|
| 129 | PTINFO(RX,LM) ; Returns header displayable Patient Information | 
|---|
| 130 | ;Input: (r) RX   - Rx IEN (#52) | 
|---|
| 131 | ;       (o) LM   - ListManager format? (1 - Yes / 0 - No) - Default: 0 | 
|---|
| 132 | N DFN,VADM,PTINFO | 
|---|
| 133 | S DFN=$$GET1^DIQ(52,RX,2,"I") D DEM^VADPT | 
|---|
| 134 | S PTINFO="Patient  : "_$E($G(VADM(1)),1,$S($G(LM):24,1:20))_"("_$P($G(VADM(2)),"^",2)_")" | 
|---|
| 135 | S PTINFO=PTINFO_"  Sex: "_$P($G(VADM(5)),"^") | 
|---|
| 136 | S $E(PTINFO,$S($G(LM):61,1:54))="DOB: "_$P($G(VADM(3)),"^",2)_"("_$P($G(VADM(4)),"^")_")" | 
|---|
| 137 | Q PTINFO | 
|---|
| 138 | ; | 
|---|
| 139 | RETRXF(RX,RFL,ONOFF) ; - Set/Reset the Re-transmission flag | 
|---|
| 140 | ;Input: (r) RX    - Rx IEN (#52) | 
|---|
| 141 | ;       (r) RFL   - Refill IEN (#52.1) | 
|---|
| 142 | ;       (o) ONOFF - Turn flag ON or OFF (1 - ON / 0 - OFF) (Default: OFF) | 
|---|
| 143 | N DA,DIE,DR | 
|---|
| 144 | S DR="82///"_$S($G(ONOFF):"YES",1:"@") | 
|---|
| 145 | I 'RFL S DA=RX,DIE="^PSRX(" | 
|---|
| 146 | I RFL S DA(1)=RX,DA=RFL,DIE="^PSRX("_RX_",1," | 
|---|
| 147 | D ^DIE | 
|---|
| 148 | Q | 
|---|
| 149 | ; | 
|---|
| 150 | REASON(TXT) ; Extracts the Reason for service code from the REASON text field | 
|---|
| 151 | ; Input: (r) TXT  - Reason text (e.g., NN Reason for Service Code Text) | 
|---|
| 152 | ;Output:   REASON - NN (if on valid and on file (#9002313.23), null otherwise) | 
|---|
| 153 | N REASON,DIC,X,Y | 
|---|
| 154 | S REASON=$P(TXT," ") I $L(REASON)'=2 Q "" | 
|---|
| 155 | S DIC=9002313.23,X=REASON D ^DIC I Y<0 Q "" | 
|---|
| 156 | Q REASON | 
|---|
| 157 | ; | 
|---|
| 158 | SETOPN(RX,REJ) ; - Set the Reject RE-OPENED flag to YES | 
|---|
| 159 | ;Input: (r) RX    - Rx IEN (#52) | 
|---|
| 160 | ;       (r) REJ   - Reject IEN (#52.25) | 
|---|
| 161 | ; | 
|---|
| 162 | I '$D(^PSRX(RX,"REJ",REJ)) Q | 
|---|
| 163 | N DIE,DA,DR | 
|---|
| 164 | S DIE="^PSRX("_RX_",""REJ"",",DA(1)=RX,DA=REJ,DR="23///YES" D ^DIE | 
|---|
| 165 | Q | 
|---|
| 166 | ; | 
|---|
| 167 | PRT(FIELD,P,L) ; Sets the lines for fields that require text wrapping | 
|---|
| 168 | ;Input: FIELD - Subscript name from the DATA(REJ,FIELD) array | 
|---|
| 169 | ;         P   - Position where the content should be printed | 
|---|
| 170 | ;         L   - Lenght of the text on each line | 
|---|
| 171 | N TXT,I | 
|---|
| 172 | S TXT=DATA(REJ,FIELD) I $L(TXT)'>L W ?P,TXT Q | 
|---|
| 173 | F I=1:1 Q:TXT=""  D | 
|---|
| 174 | . I I=1 W ?P,$E(TXT,1,L),! S TXT=$E(TXT,L+1,999) Q | 
|---|
| 175 | . W ?P,$E(TXT,1,L) S TXT=$E(TXT,L+1,999) W:TXT'="" ! | 
|---|
| 176 | Q | 
|---|
| 177 | ; | 
|---|
| 178 | PA() ; - Ask for Prior Authorization Type and Number | 
|---|
| 179 | ;Output:(PAT^PAN) PAT - Prior Authorization Type (See DD File#52, | 
|---|
| 180 | ;                         Sub-file#52.25,field#25 for possible values) | 
|---|
| 181 | ;                 PAN - Prior Authorization Number (11 digits) | 
|---|
| 182 | ; | 
|---|
| 183 | N DIR,Y,DIRUT,DIROUT,PAT,PAN | 
|---|
| 184 | S DIR(0)="52.25,25",DIR("A")="  Prior Authorization Type",DIR("B")="0" | 
|---|
| 185 | S (DIR("?"),DIR("??"))="^D PAHLP^PSOREJU2" | 
|---|
| 186 | D ^DIR I $D(DIRUT)!$D(DIROUT) Q "^" | 
|---|
| 187 | S PAT=Y | 
|---|
| 188 | K DIR S DIR(0)="52.25,26",DIR("A")="Prior Authorization Number" | 
|---|
| 189 | S DIR("?")="^D PANHLP^PSOREJU2",DIR("??")="" | 
|---|
| 190 | D ^DIR I (Y["^")!$D(DIROUT) Q "^" | 
|---|
| 191 | S PAN=Y | 
|---|
| 192 | Q (PAT_"^"_PAN) | 
|---|
| 193 | ; | 
|---|
| 194 | PAHLP ; Prior Authorization Type Help | 
|---|
| 195 | W !?9,"EPSDT - Early Periodic Screening Diagnosis Treatment" | 
|---|
| 196 | W !?9,"AFDC  - Aid to Family with Dependent Children" | 
|---|
| 197 | Q | 
|---|
| 198 | ; | 
|---|
| 199 | PANHLP ; Prior Authorization Number Help | 
|---|
| 200 | W "OR you may leave it blank if the claim does not require a number." | 
|---|
| 201 | Q | 
|---|