Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: PSOREJU3

PSOREJU3.m

Go to the documentation of this file.
  1. PSOREJU3 ;BIRM/LJE - BPS (ECME) - Clinical Rejects Utilities (3) ;04/25/08
  1. ;;7.0;OUTPATIENT PHARMACY;**287**;DEC 1997;Build 77
  1. ;References to 9002313.99 supported by IA 4305
  1. ;
  1. Q
  1. ;
  1. TRICCHK(RX,RFL,RESP,FROM,RVTX) ;check to see if Rx is non-billable or in an "In Progress" state on ECME
  1. ; Input: (r) RX - Rx IEN (#52)
  1. ; (r) RFL - REFILL
  1. ; (o) RESP - Response from $$EN^BPSNCPDP api
  1. ; TRICCHK assumes that the calling routine has validated that the fill is Tricare.
  1. ;
  1. ; - \Need to be mindful of foreground and background processing.
  1. ;
  1. N ETOUT,ESTAT
  1. S:'$D(FROM) FROM="" S ESTAT="",ESTAT=$P(RESP,"^",4),NFROM=0 I FROM="PL"!(FROM="PC") S NFROM=1
  1. Q:ESTAT["PAYABLE"!(ESTAT["REJECTED")
  1. I ESTAT["IN PROGRESS",FROM="RRL"!($G(RVTX)="RX RELEASE-NDC CHANGE") D Q
  1. . I 'NFROM D
  1. . . W !!,"TRICARE Prescription "_$$GET1^DIQ(52,RX,".01")_" cannot be released until ECME 'IN PROGRESS'"
  1. . . W !,"status is resolved payable.",!!
  1. ;
  1. I $D(RESP) D Q
  1. . I +RESP=6 W:'NFROM&('$G(CMOP)) !!,"Inactive ECME Tricare",!! D Q
  1. . . S ACT="Inactive ECME Tricare" D RXACT^PSOBPSU2(RX,RFL,ACT,"M",DUZ)
  1. . I +RESP=2!(+RESP=3) N PSONBILL S PSONBILL=1 D TRIC2 Q
  1. . I +RESP=4!(ESTAT["IN PROGRESS") N PSONPROG S PSONPROG=1 D TRIC2 Q
  1. Q
  1. ;
  1. TRIC2 ;
  1. N ACTION,REJCOD,REJ,DIR,DIRUT,REA,DA,PSCAN,PSOTRIC,ZZZ
  1. S PSOTRIC=1,REJ=9999999999
  1. I $G(CMOP)&($G(PSONPROG)) D TACT Q
  1. Q:$G(CMOP)
  1. I 'NFROM D DISPLAY(RX,REJ)
  1. I 'NFROM&($G(PSONPROG)) D D SUSP Q
  1. . W !!,"This prescription will be suspended. After the third party claim is resolved,"
  1. . W !,"it may be printed or pulled early from suspense.",!
  1. . R !!,"Press <RETURN> to continue...",ZZZ:60,!
  1. I NFROM&($G(PSONPROG)) D TACT Q
  1. Q:NFROM
  1. TRIC3 ;
  1. D MSG W " It must be discontinued."
  1. R !!,"Press <RETURN> to continue...",ZZZ:60
  1. I FROM="PL"!(FROM="PC") D SUSP Q
  1. S ACTION="D" S ACTION=$$DC^PSOREJU1(RX,ACTION)
  1. I ACTION="Q" G TRIC2
  1. Q
  1. ;
  1. MSG ;
  1. W !!,"This is a non-billable Tricare prescription. It cannot be filled or sent",!
  1. W "to the reject worklist."
  1. Q
  1. SUSP ;Suspense Rx due to IN PROGRESS status in ECME
  1. N DA,ACT,RX0,SD,RXS,PSOWFLG,DIK,RXN,XFLAG,RXP,DD,DO,X,Y,DIC,VALMSG,COMM,LFD,DFLG,RXCMOP
  1. N PSOQFLAG,PSORXZD,PSOQFLAG,PSOKSPPL,PSOZXPPL,PSOZXPI,RXLTOP
  1. S DA=RX D SUS^PSORXL1
  1. TACT ;
  1. S ACT="TRICARE-Rx placed on Suspense due to"_$S($G(PSONPROG):" ECME IN PROGRESS status",$G(PSONBILL):"the Rx being Non-billable",1:"")
  1. I '$G(DUZ) N DUZ S DUZ=.5
  1. D RXACT^PSOBPSU2(RX,RFL,ACT,"M",DUZ)
  1. Q
  1. ;
  1. DISPLAY(RX,REJ,KEY) ; - Displays REJECT information
  1. ; Input: (r) RX - Rx IEN (#52)
  1. ; (r) REJ - REJECT ID (IEN)
  1. ; (o) KEY - Display "Press any KEY to continue..." (1-YES/0-NO) (Default: 0)
  1. ;
  1. Q:$G(NFROM)
  1. I '$G(RX)!'$G(REJ) Q
  1. I '$D(^PSRX(RX,"REJ",REJ))&('$G(PSONBILL))&('$G(PSONPROG)) Q
  1. ;
  1. N DATA,RFL,LINE,%
  1. S RFL=+$$GET1^DIQ(52.25,REJ_","_RX,5)
  1. I '$G(PSONBILL)&('$G(PSONPROG)) D GET^PSOREJU2(RX,RFL,.DATA,REJ) I '$D(DATA(REJ)) Q
  1. ;
  1. D HDR
  1. S $P(LINE,"-",74)="" W !?3,LINE
  1. W !?3,$$DVINFO^PSOREJU2(RX,RFL)
  1. W !?3,$$PTINFO^PSOREJU2(RX)
  1. W !?3,"Rx/Drug : ",$$GET1^DIQ(52,RX,.01),"/",RFL," - ",$E($$GET1^DIQ(52,RX,6),1,20),?54
  1. W:'$G(PSONBILL)&('$G(PSONPROG)) "ECME#: ",$E(RX+10000000,2,8)
  1. D TYPE G DISP2:$G(PSONBILL)!($G(PSONPROG))
  1. I $G(DATA(REJ,"PAYER MESSAGE"))'="" W !?3,"Payer Message: " D PRT^PSOREJU2("PAYER MESSAGE",18,58)
  1. I $G(DATA(REJ,"DUR TEXT"))'="" W !?3,"DUR Text : ",DATA(REJ,"DUR TEXT")
  1. W !?3,"Insurance : ",DATA(REJ,"INSURANCE NAME"),?50,"Contact: ",DATA(REJ,"PLAN CONTACT")
  1. W !?3,"Group Name : ",DATA(REJ,"GROUP NAME"),?45,"Group Number: ",DATA(REJ,"GROUP NUMBER")
  1. I $G(DATA(REJ,"CARDHOLDER ID"))'="" W !?3,"Cardholder ID: ",DATA(REJ,"CARDHOLDER ID")
  1. I DATA(REJ,"PLAN PREVIOUS FILL DATE")'="" D
  1. . W !?3,"Last Fill Dt.: ",DATA(REJ,"PLAN PREVIOUS FILL DATE")
  1. . W:DATA(REJ,"PLAN PREVIOUS FILL DATE")'="" " (from payer)"
  1. DISP2 ;
  1. W !?3,LINE,$C(7) I $G(KEY) W !?3,"Press <RETURN> to continue..." R %:DTIME W !
  1. Q
  1. ;
  1. TYPE ;
  1. I $G(PSONBILL)!($G(PSONPROG)) D Q
  1. . D NOW^%DTC S Y=% D DD^%DT
  1. . W !?3,"Date/Time: "_$$FMTE^XLFDT(Y)
  1. . W !?3,"Reason : ",$S($G(PSONBILL):"Drug not billable.",$G(PSONPROG):"ECME Status is in an 'IN PROGRESS' state and cannot be filled",1:"")
  1. ;
  1. I $G(DATA(REJ,"REASON"))'="" W !?3,"Reason : " D PRT^PSOREJU2("REASON",18,58)
  1. N RTXT,OCODE,OTXT,I
  1. S (OTXT,RTXT,OCODE)="",RTXT=$S(DATA(REJ,"CODE")=79:"REFILL TOO SOON",CODE=88:"DUR REJECT",1:$$EXP^PSOREJP1(CODE))_" ("_DATA(REJ,"CODE")_")"
  1. F I=1:1 S OCODE=$P(DATA(REJ,"OTHER REJECTS"),",",I) Q:OCODE="" D
  1. . S OTXT=OTXT_", "_$S(OCODE=79:"REFILL TOO SOON",OCODE=88:"DUR REJECT",1:$$EXP^PSOREJP1(OCODE))_" ("_OCODE_")"
  1. S RTXT=RTXT_OTXT_". Received on "_$$FMTE^XLFDT($G(DATA(REJ,"DATE/TIME")))_"."
  1. S OTXT=""
  1. W !?3,"Reject(s): " D WRAP(RTXT,14)
  1. Q
  1. ;
  1. WRAP(PSOTXT,INDENT) ;
  1. N I,K,PSOWRAP,PSOMARG
  1. S PSOWRAP=1,PSOMARG=$S('$G(PSORM):80,$D(IOM):IOM,1:80)-(INDENT+5)
  1. W1 S:$L(PSOTXT)<PSOMARG PSOWRAP(PSOWRAP)=PSOTXT I $L(PSOTXT)'<PSOMARG F I=PSOMARG:-1:0 I $E(PSOTXT,I)?1P S PSOWRAP(PSOWRAP)=$E(PSOTXT,1,I),PSOTXT=$E(PSOTXT,I+1,999),PSOWRAP=PSOWRAP+1 G W1
  1. F K=1:1:PSOWRAP W ?INDENT,PSOWRAP(K),!
  1. Q
  1. ;
  1. HDR ;
  1. I $G(PSONBILL) W !!?24,"*** TRICARE - NON-BILLABLE ***" Q
  1. I $G(PSONPROG) W !!?18,"*** TRICARE - 'IN PROGRESS' ECME status ***" Q
  1. I $G(PSOTRIC) W !!?12,"*** TRICARE - "
  1. E W !!?16
  1. W "REJECT RECEIVED FROM THIRD PARTY PAYER ***" Q
  1. Q
  1. ;
  1. SUBMIT(RXIEN,RFCNT,PSOTRIC) ;called from PSOCAN2 (routine size exceeded)
  1. N SUBMITE S SUBMITE=$$SUBMIT^PSOBPSUT(RXIEN)
  1. I SUBMITE D
  1. . N ACTION
  1. . D ECMESND^PSOBPSU1(RXIEN,,,$S($O(^PSRX(RXIEN,1,0)):"RF",1:"OF"))
  1. . I $$FIND^PSOREJUT(RXIEN) S ACTION=$$HDLG^PSOREJU1(RXIEN,,"79,88","OF","IOQ","Q")
  1. I 'SUBMITE&(PSOTRIC) D
  1. . I $$STATUS^PSOBPSUT(RXIEN,RFCNT'["PAYABLE") D TRICCHK(RXIEN,RFCNT)
  1. Q
  1. ;
  1. TRISTA(RX,RFL,RESP,FROM,RVTX) ;called from suspense
  1. N ETOUT,ESTAT,TRESP,TSTAT,PSOTRIC
  1. S:'$D(RESP) RESP=""
  1. S (ESTAT,PSOTRIC)="",PSOTRIC=$$TRIC^PSOREJP1(RX,RFL,PSOTRIC)
  1. Q:'PSOTRIC 0
  1. S TRESP=RESP,ESTAT=$P(TRESP,"^",4)
  1. ;
  1. I '$D(RESP)!($P(RESP,"^",1)="")!($G(RESP)="") D
  1. . S TSTAT=$$STATUS^PSOBPSUT(RX,RFL) S TRESP=$S(TSTAT["IN PROGRESS":4,TSTAT["NOT BILLABLE":2,1:0)
  1. . S $P(TRESP,"^",4)=TSTAT
  1. ;
  1. Q:ESTAT["PAYABLE"!(ESTAT["REJECTED") 0
  1. ;
  1. I +TRESP=2!(+TRESP=3) Q 1
  1. I +TRESP=4!(ESTAT["IN PROGRESS") Q 1
  1. Q 0
  1. ;