| [613] | 1 | PSXRPPL1 ;BIR/WPB-Resets Suspense to Print/Transmit ;[ 10/02/97  3:13 PM ]
 | 
|---|
 | 2 |  ;;2.0;CMOP;**3,48,62**;11 Apr 97;Build 12
 | 
|---|
 | 3 |  ;Reference to ^PSRX( supported by DBIA #1977
 | 
|---|
 | 4 |  ;Reference to File #59 supported by DBIA #1976
 | 
|---|
 | 5 |  ;Reference to PSOSURST supported by DBIA #1970
 | 
|---|
 | 6 |  ;Reference to ^PS(52.5,  supported by DBIA #1978
 | 
|---|
 | 7 |  ;Reference to ^BPSUTIL supported by DBIA #4410
 | 
|---|
 | 8 |  ;Reference to ^PSSLOCK   supported by DBIA #2789
 | 
|---|
 | 9 |  ;Reference to ^PSOBPSUT supported by DBIA #4701
 | 
|---|
 | 10 |  ;Reference to ^PSOBPSU1 supported by DBIA #4702
 | 
|---|
 | 11 |  ;Reference to ^PSOREJUT supported by DBIA #4706
 | 
|---|
 | 12 |  ;
 | 
|---|
 | 13 |  ;This routine will reset the Queued flags and the printed flags in
 | 
|---|
 | 14 |  ;PS(52.5 to 'Queued' and 'Printed' respectively and either retransmits
 | 
|---|
 | 15 |  ;the data to the CMOP or prints the labels.
 | 
|---|
 | 16 | START ;initializes local variables
 | 
|---|
 | 17 |  I '$D(^XUSEC("PSXCMOPMGR",DUZ)) W !,"You are not authorized to use this option!" Q
 | 
|---|
 | 18 |  I '$D(^XUSEC("PSX XMIT",DUZ)) W !,"You are not authorized to use this option!" Q
 | 
|---|
 | 19 |  S SWITCH=0
 | 
|---|
 | 20 |  K ^TMP($J,"PSX")
 | 
|---|
 | 21 | QRY ;initial message and option menu
 | 
|---|
 | 22 |  W !
 | 
|---|
 | 23 |  S DIR(0)="NAO^1:3:0",DIR("A")="Select (1, 2, 3):  ",DIR("A",1)="  1 - Reset CMOP Batches for Transmission"
 | 
|---|
 | 24 |  S DIR("A",2)="  2 - Reprint CMOP Batches",DIR("A",4)="  3 - Standard Reprint Batches from Suspense"
 | 
|---|
 | 25 |  S DIR("?")="Enter a number between 1 and 3.",DIR("??")=$S($G(PSXVER):"^D HELP^PSXSRP",1:"^D MSG2^PSXRHLP") D ^DIR K DIR G:(Y<0)!($D(DIRUT)) EXIT S REPLY=Y K Y,X
 | 
|---|
 | 26 |  I REPLY=1 S (PSXTRANS,PSXFLAG,SWITCH)=1 G:$G(PSXVER) ^PSXSRST G:'$G(PSXVER) BEGIN
 | 
|---|
 | 27 |  I REPLY=2 S (PSXTRANS,PSXFLAG,SWITCH)=2 G:$G(PSXVER) ^PSXSRST G:'$G(PSXVER) BEGIN
 | 
|---|
 | 28 |  I REPLY=3 S PSXFLG=1 G START^PSOSURST
 | 
|---|
 | 29 |  K REPLY
 | 
|---|
 | 30 |  Q
 | 
|---|
 | 31 | BEGIN ;confirms CMOP processing, if Yes, checks for active site and status
 | 
|---|
 | 32 |  ;in the CMOP System file, if not an active site or the system status
 | 
|---|
 | 33 |  ;is not stopped the routine exits and processing stops
 | 
|---|
 | 34 |  W !
 | 
|---|
 | 35 |  S DIR(0)="Y",DIR("B")="NO",DIR("A")="Are you sure you want to continue",DIR("?",1)="No - Exits."
 | 
|---|
 | 36 |  S DIR("?")=$S(SWITCH=1:"Yes - Transmits data to the CMOP.",SWITCH=2:"Yes - Prints labels.",1:0) D ^DIR K DIR G:(Y=0)!($D(DIRUT)) EXIT K Y
 | 
|---|
 | 37 |  S STATUS=$P($G(^PSX(550,+PSXSYS,0)),"^",3) I STATUS'="H" W !,"There is another job in process, please try again later." G EXIT
 | 
|---|
 | 38 | ASK ;gets date for the resets
 | 
|---|
 | 39 |  K BEGDATE,ENDDATE W !!,?10,$S($G(SWITCH)=1:"RESET and TRANSMIT CMOP DATA",$G(SWITCH)=2:"RESET and REPRINT CMOP LABELS",1:""),!!!,"**** Date Selection ****",!!
 | 
|---|
 | 40 | ASK1 I SWITCH=1 S %DT="AEX",%DT("A")="   BEGIN DATE:  " D ^%DT K %DT,%DT("A") G:Y<0 EXIT S PRTDT=Y
 | 
|---|
 | 41 |  I SWITCH=2 S %DT="AEX",%DT("A")="   BEGIN DATE:  " D ^%DT K %DT,%DT("A") G:Y<0 EXIT S PRTDT=Y
 | 
|---|
 | 42 |  W !! S %DT="AEX",%DT("A")="   ENDING DATE:  " D ^%DT Q:Y<0  S PSXDTRG=Y K %DT,%DT("A")
 | 
|---|
 | 43 |  I $G(PRTDT)>$G(PSXDTRG) W !,"Begin Date must be before Ending Date!" G ASK1
 | 
|---|
 | 44 |  I '$O(^PS(52.5,"AP",PRTDT-1))!($O(^(0))>PSXDTRG) W !!,$S(SWITCH=1:"Nothing to Transmit.",SWITCH=2:"Nothing to Reprint.",1:0) G EXIT
 | 
|---|
 | 45 |  D SDT S PSXERFLG=0
 | 
|---|
 | 46 |  I SWITCH=1 D PSXTRANS Q
 | 
|---|
 | 47 |  I SWITCH=2 D PRINT Q
 | 
|---|
 | 48 |  S PSXSTAT="H" D PSXSTAT^PSXRSYU
 | 
|---|
 | 49 |  G EXIT
 | 
|---|
 | 50 | PSXTRANS ;
 | 
|---|
 | 51 |  W !!
 | 
|---|
 | 52 |  S DIR(0)="Y",DIR("B")="YES",DIR("A")="DO YOU WISH TO TRANSMIT TO THE CMOP NOW",DIR("?",1)="No - Exits the option.",DIR("?")="Yes - Transmits to the CMOP." D ^DIR K DIR Q:(Y=0)!($D(DIRUT))  K Y
 | 
|---|
 | 53 |  S PSXSTAT="T" D PSXSTAT^PSXRSYU,ASK^PSXRSUS
 | 
|---|
 | 54 |  Q
 | 
|---|
 | 55 | PRINT ;
 | 
|---|
 | 56 |  W !!
 | 
|---|
 | 57 |  S DIR(0)="Y",DIR("B")="YES",DIR("A")="DO YOU WISH REPRINT CMOP LABELS NOW",DIR("?",1)="No - Exits the option.",DIR("?")="Yes - Reprints CMOP labels." D ^DIR K DIR Q:(Y=0)!($D(DIRUT))  K Y
 | 
|---|
 | 58 |  S PSXSTAT="T" D PSXSTAT^PSXRSYU,ASK^PSXRSUS
 | 
|---|
 | 59 |  Q
 | 
|---|
 | 60 | SDT ;the following subroutines go through the PS(52.5 global and pull the
 | 
|---|
 | 61 |  ;data needed to reset the Queued/Printed nodes
 | 
|---|
 | 62 |  S SDT=PRTDT-1 F  S SDT=$O(^PS(52.5,"AP",SDT)),DFN=0 Q:(SDT>PSXDTRG)!(SDT="")  D DFN
 | 
|---|
 | 63 |  Q
 | 
|---|
 | 64 | DFN ;
 | 
|---|
 | 65 |  F  S DFN=$O(^PS(52.5,"AP",SDT,DFN)),REC=0 Q:(DFN="")!(DFN'>0)  D REC
 | 
|---|
 | 66 |  Q
 | 
|---|
 | 67 | REC ;
 | 
|---|
 | 68 |  F  S REC=$O(^PS(52.5,"AP",SDT,DFN,REC)) Q:(REC'>0)!(REC="")  D:$G(^PS(52.5,REC,0)) CHECK
 | 
|---|
 | 69 |  K ZDIV
 | 
|---|
 | 70 |  Q
 | 
|---|
 | 71 | CHECK ;
 | 
|---|
 | 72 |  S STAT=$P($G(^PS(52.5,REC,0)),U,7),PRINT=$G(^PS(52.5,REC,"P")),PSXPTR=$P($G(^PS(52.5,REC,0)),U,1)
 | 
|---|
 | 73 |  S RXF="" F XXF=0:0 S XXF=$O(^PSRX(PSXPTR,1,XXF)) Q:XXF'>0  S RXF=XXF
 | 
|---|
 | 74 |  S ZDIV=$S($G(RXF)>0:$P($G(^PSRX(PSXPTR,1,RXF,0)),U,9),1:$P($G(^PSRX(PSXPTR,2)),U,9)) I $G(ZDIV)'=$G(PSOSITE) Q
 | 
|---|
 | 75 |  S:RXF'="" GONE=$P($G(^PSRX(PSXPTR,1,RXF,0)),U,18)
 | 
|---|
 | 76 |  S:RXF="" GONE=$P($G(^PSRX(PSXPTR,2)),U,13)
 | 
|---|
 | 77 |  I (STAT="P")&(PRINT=1)&($G(GONE)="") D RESET
 | 
|---|
 | 78 |  K GONE,RXF,XXF
 | 
|---|
 | 79 |  Q
 | 
|---|
 | 80 | RESET ;resets the Queued/Printed flags to Queued and not Printed
 | 
|---|
 | 81 |  L +^PS(52.5,REC):DTIME Q:'$T
 | 
|---|
 | 82 |  S DIE="^PS(52.5,",DA=REC,DR="2////2;3////Q" D ^DIE L -^PS(52.5,REC) K DIE,DR,DA
 | 
|---|
 | 83 |  S:$G(PSXVER) $P(^PSRX(PSXPTR,"STA"),U,1)=5 S:'$G(PSXVER) $P(^PSRX(PSXPTR,0),U,15)=5 K ^PS(52.5,"AC",DFN,SDT,REC)
 | 
|---|
 | 84 |  Q
 | 
|---|
 | 85 | PRTERR ; auto error trap for prt cmop local
 | 
|---|
 | 86 |  S XXERR=$$EC^%ZOSV
 | 
|---|
 | 87 |  S PSXDIVNM=$$GET1^DIQ(59,PSOSITE,.01)
 | 
|---|
 | 88 |  ;save an image of the transient file 550.1 for 2 days
 | 
|---|
 | 89 |  D NOW^%DTC S DTTM=%
 | 
|---|
 | 90 |  S X=$$FMADD^XLFDT(DT,+2) S ^XTMP("PSXERR "_DTTM,0)=X_U_DT_U_"CMOP "_XXERR
 | 
|---|
 | 91 |  M ^XTMP("PSXERR "_DTTM,550.1)=^PSX(550.1)
 | 
|---|
 | 92 |  S XMSUB="CMOP Error "_PSXDIVNM_" "_$$GET1^DIQ(550.2,+$G(PSXBAT),.01)
 | 
|---|
 | 93 |  D GRP1^PSXNOTE
 | 
|---|
 | 94 |  ;S XMY(DUZ)=""
 | 
|---|
 | 95 |  S XMTEXT="TEXT("
 | 
|---|
 | 96 |  S TEXT(1,0)=$S($G(PSXCS):"",1:"NON-")_"CS CMOP Print Local encountered the following error. Please investigate"
 | 
|---|
 | 97 |  S TEXT(2,0)="Division:         "_PSXDIVNM
 | 
|---|
 | 98 |  S TEXT(3,0)="Type/Batch        "_$S($G(PSXCS):"CS",1:"NON-CS")_" / "_$$GET1^DIQ(550.2,$G(PSXBAT),.01)
 | 
|---|
 | 99 |  S TEXT(4,0)="Error:            "_XXERR
 | 
|---|
 | 100 |  S TEXT(5,0)="This batch has been set to closed."
 | 
|---|
 | 101 |  S TEXT(6,0)="Call NVS to investigate which prescriptions have been printed and which are yet to print."
 | 
|---|
 | 102 |  S TEXT(7,0)="A copy of file 550.1 can be found in ^XTMP(""PSXERR "_DTTM_""")"
 | 
|---|
 | 103 |  D ^%ZTER
 | 
|---|
 | 104 |  D ^XMD
 | 
|---|
 | 105 |  I $G(PSXBAT) D
 | 
|---|
 | 106 |  . N DA,DIE,DR S DIE="^PSX(550.2,",DA=PSXBAT,DR="1////4"
 | 
|---|
 | 107 |  . D ^DIE
 | 
|---|
 | 108 |  G UNWIND^%ZTER
 | 
|---|
 | 109 |  ;
 | 
|---|
 | 110 | SBTECME(PSXTP,PSXDV,THRDT,PULLDT) ; - Sumitting prescriptions to EMCE (3rd Party Billing)
 | 
|---|
 | 111 |  ;Input: PSXTP  - Type of prescriptions "C" - Controlled Subs / "N" Non-Controlled Subs
 | 
|---|
 | 112 |  ;       PSXDV  - Pointer to DIVSION file (#59)
 | 
|---|
 | 113 |  ;       THRDT  - T+N when scheduling the THROUGH DATE to run CMOP Transmission
 | 
|---|
 | 114 |  ;       PULLDT - T+N+PULL DAYS parameter in the DIVISION file (#59)
 | 
|---|
 | 115 |  ;Output:SBTECME- Number of prescriptions submitted to ECME
 | 
|---|
 | 116 |  N RX,RFL,SBTECME,PSOLRX,RESP,SDT,XDFN,REC,PSOLRX,DOS
 | 
|---|
 | 117 |  I '$$ECMEON^BPSUTIL(PSXDV)!'$$CMOPON^BPSUTIL(PSXDV) Q
 | 
|---|
 | 118 |  S (SDT,SBTECME)=0 K ^TMP("PSXEPHDFN",$J)
 | 
|---|
 | 119 |  F  S SDT=$O(^PS(52.5,"CMP","Q",PSXTP,PSXDV,SDT)) S XDFN=0 Q:(SDT>PULLDT)!(SDT'>0)  D
 | 
|---|
 | 120 |  . F  S XDFN=$O(^PS(52.5,"CMP","Q",PSXTP,PSXDV,SDT,XDFN)) S REC=0 Q:(XDFN'>0)!(XDFN="")  D
 | 
|---|
 | 121 |  . . F  S REC=$O(^PS(52.5,"CMP","Q",PSXTP,PSXDV,SDT,XDFN,REC)) Q:(REC'>0)!(REC="")  D
 | 
|---|
 | 122 |  . . . S (PSOLRX,RX)=+$$GET1^DIQ(52.5,REC,.01,"I") I 'RX Q
 | 
|---|
 | 123 |  . . . S RFL=$$GET1^DIQ(52.5,REC,9,"I") I RFL="" S RFL=$$LSTRFL^PSOBPSU1(RX)
 | 
|---|
 | 124 |  . . . I $$XMIT^PSXBPSUT(REC) D
 | 
|---|
 | 125 |  . . . . I SDT>THRDT,'$D(^TMP("PSXEPHDFN",$J,XDFN)) Q
 | 
|---|
 | 126 |  . . . . I $$PATCH^XPDUTL("PSO*7.0*148") D
 | 
|---|
 | 127 |  . . . . . I $$RETRX^PSOBPSUT(RX,RFL),SDT>DT Q
 | 
|---|
 | 128 |  . . . . . I $$DOUBLE(RX,RFL) Q
 | 
|---|
 | 129 |  . . . . . I $$FIND^PSOREJUT(RX,RFL) Q
 | 
|---|
 | 130 |  . . . . . I '$$RETRX^PSOBPSUT(RX,RFL),$$STATUS^PSOBPSUT(RX,RFL)'="" Q
 | 
|---|
 | 131 |  . . . . . S DOS=$$RXFLDT^PSOBPSUT(RX,RFL) I DOS>DT S DOS=DT
 | 
|---|
 | 132 |  . . . . . D ECMESND^PSOBPSU1(RX,RFL,DOS,"PC",,1,,,,.RESP)
 | 
|---|
 | 133 |  . . . . . I $D(RESP),'RESP S SBTECME=SBTECME+1
 | 
|---|
 | 134 |  . . . . . S ^TMP("PSXEPHDFN",$J,XDFN)=""
 | 
|---|
 | 135 |  . . . D PSOUL^PSSLOCK(PSOLRX)
 | 
|---|
 | 136 |  K ^TMP("PSXEPHDFN",$J)
 | 
|---|
 | 137 |  Q SBTECME
 | 
|---|
 | 138 |  ;
 | 
|---|
 | 139 | DOUBLE(RX,RFL) ; Checks if previous fill is still being worked on by CMOP
 | 
|---|
 | 140 |  ;Input: (r) RX  - Prescription IEN
 | 
|---|
 | 141 |  ;       (r) RFL - Fill number
 | 
|---|
 | 142 |  ;Output:    0 - Previous fill not with CMOP / 1 - CMOP working on previous fill
 | 
|---|
 | 143 |  N CMP,DOUBLE,STS
 | 
|---|
 | 144 |  ; 
 | 
|---|
 | 145 |  I 'RFL!'$D(^PSRX(RX,4)) Q 0
 | 
|---|
 | 146 |  I $$STATUS^PSOBPSUT(RX,RFL-1)="" Q 0
 | 
|---|
 | 147 |  S DOUBLE=0,CMP=999
 | 
|---|
 | 148 |  F  S CMP=$O(^PSRX(RX,4,CMP),-1) Q:'CMP  D  I DOUBLE Q
 | 
|---|
 | 149 |  . I $$GET1^DIQ(52.01,CMP_","_RX,2,"I")'=(RFL-1) Q
 | 
|---|
 | 150 |  . S STS=$$GET1^DIQ(52.01,CMP_","_RX,3,"I")
 | 
|---|
 | 151 |  . I STS=0!(STS=2) S DOUBLE=1
 | 
|---|
 | 152 |  Q DOUBLE
 | 
|---|
 | 153 |  ;
 | 
|---|
 | 154 | EXIT ;
 | 
|---|
 | 155 |  K DFN,PSXDAYS,PSXDTRG,SWITCH,STAT,PRINT,PSXTRANS,REC,REPLY,SDT,X,X1,X2,Y,ANSWER,STATUS,PSXFLAG,PSXPTR,PSXSTAT
 | 
|---|
 | 156 |  K DIR,DIRUT,DTOUT,DUOUT,DIROUT
 | 
|---|
 | 157 |  Q
 | 
|---|