| [613] | 1 | PSXRXU ;BIR/WPB,HTW,BAB-Remote Facility File Utilities ;14 Dec 2001
 | 
|---|
 | 2 |  ;;2.0;CMOP;**3,28,41,57,48**;11 Apr 97
 | 
|---|
 | 3 |  ; Reference to ^PS(52.5,  supported by DBIA #1978
 | 
|---|
 | 4 |  ; Reference to ^PSOHLSN1  supported by DBIA #2385
 | 
|---|
 | 5 |  ; Reference to ^PSRX(     supported by DBIA #1977
 | 
|---|
 | 6 |  ; Reference to ^XTMP("ORLK-" supported by DBIA #4001
 | 
|---|
 | 7 |  ; Reference to $$GETNDC^PSONDCUT supported by DBIA #4705
 | 
|---|
 | 8 | START ;files transmission data in file 52 52.5 after transmission is sent
 | 
|---|
 | 9 |  ; and clear OERR lock ^XTMP("ORLK-"
 | 
|---|
 | 10 |  ; setup error trap for updating RXs in 52 & 52.5
 | 
|---|
 | 11 |  D
 | 
|---|
 | 12 |  . I '$D(^XTMP("PSXAUTOERR")) N $ETRAP,$ESTACK S $ETRAP="D RXERR^PSXRXU"
 | 
|---|
 | 13 |  . D START1
 | 
|---|
 | 14 |  Q
 | 
|---|
 | 15 | START1 ;
 | 
|---|
 | 16 |  S PSXNM="",PSXMSG=0
 | 
|---|
 | 17 |  F  S PSXNM=$O(^PSX(550.2,PSXBAT,15,"C",PSXNM)) Q:PSXNM']""  D
 | 
|---|
 | 18 |  . S DFN="" F  S DFN=$O(^PSX(550.2,PSXBAT,15,"C",PSXNM,DFN)) Q:DFN'>0  D
 | 
|---|
 | 19 |  .. S RX=0,PSXMSG=PSXMSG+1 F  S RX=$O(^PSX(550.2,PSXBAT,15,"C",PSXNM,DFN,RX)) Q:RX'>0  D
 | 
|---|
 | 20 |  ... S RXF=$O(^PSX(550.2,PSXBAT,15,"C",PSXNM,DFN,RX,0))
 | 
|---|
 | 21 |  ... D FILE
 | 
|---|
 | 22 |  Q
 | 
|---|
 | 23 | F D FILE^DICN
 | 
|---|
 | 24 |  Q
 | 
|---|
 | 25 | FILE ;files the data in the CMOP event multiple of PSRX(
 | 
|---|
 | 26 |  ;update 52, 52.5 called from PSXBLD RX loop
 | 
|---|
 | 27 |  S FILL=+RXF
 | 
|---|
 | 28 |  S:$G(PSXTDT)="" PSXTDT=$P(^PSX(550.2,PSXBAT,0),"^",6)
 | 
|---|
 | 29 |  Q:'$D(^PSRX(RX,0))
 | 
|---|
 | 30 |  ;S PSXMSG=$P(^PSX(550.1,XX,0),"^")
 | 
|---|
 | 31 |  ; update RX, RX:CMOP multiple
 | 
|---|
 | 32 |  ;If Rx status = suspended (5) set to active (0)
 | 
|---|
 | 33 |  I $P(^PSRX(RX,"STA"),U,1)=5 S $P(^PSRX(RX,"STA"),U,1)=0
 | 
|---|
 | 34 |  D EN^PSOHLSN1(RX,"SC","ZU","Transmitted to CMOP","")
 | 
|---|
 | 35 |  S:'$D(^PSRX(RX,4,0)) ^PSRX(RX,4,0)="^52.01DA^^"
 | 
|---|
 | 36 |  K DD,DO,DIE,DA,DIC,DR
 | 
|---|
 | 37 |  ;VMP OIFO BAY PINES;ELR;PSX*2*57 REMOVE LOCK AND UNLOCK OF PSRX(4
 | 
|---|
 | 38 |  ;L +^PSRX(RX,4,0):600 Q:'$T
 | 
|---|
 | 39 |  S DA(1)=RX,DIC="^PSRX("_RX_",4,",DIC(0)="Z",X=PSXBAT
 | 
|---|
 | 40 |  S DIC("DR")="1////"_$G(PSXMSG)_";2////"_$G(FILL)_";3////0;12///"_$S($$PATCH^XPDUTL("PSO*7.0*148"):$$GETNDC^PSONDCUT(RX,FILL),1:"")
 | 
|---|
 | 41 |  D:'$D(^PSRX(RX,4,"B",PSXBAT)) FILE^DICN I 1
 | 
|---|
 | 42 |  E  S DIE=DIC,DR=DIC("DR"),DA=$O(^PSRX(RX,4,"B",PSXBAT,0)) K DIC D ^DIE
 | 
|---|
 | 43 |  K DIC,DA,DR,DIE
 | 
|---|
 | 44 |  ;L -^PSRX(RX,4,0)
 | 
|---|
 | 45 |  K FAC
 | 
|---|
 | 46 |  S FAC=$$GET1^DIQ(550.2,PSXBAT,3)
 | 
|---|
 | 47 |  S COM=$S($G(PSXRTRN):"Re-",1:"")_"Transmitted to "_FAC_" CMOP"
 | 
|---|
 | 48 |  S:$G(FILL)>5 FILL=$G(FILL)+1
 | 
|---|
 | 49 |  S CNT=0 F JJ=0:0 S JJ=$O(^PSRX(RX,"A",JJ)) Q:'JJ  S CNT=JJ
 | 
|---|
 | 50 |  S CNT=CNT+1,^PSRX(RX,"A",0)="^52.3DA^"_CNT_"^"_CNT
 | 
|---|
 | 51 |  ;VMP OIFO BAY PINES;ELR;PSX*2*57 REMOVE LOCK AND UNLOCK OF PSRX
 | 
|---|
 | 52 |  ;L +^PSRX(RX):600 Q:'$T
 | 
|---|
 | 53 |  S ^PSRX(RX,"A",CNT,0)=PSXTDT_"^B^"_DUZ_"^"_$G(FILL)_"^"_COM
 | 
|---|
 | 54 |  ;L -^PSRX(RX)
 | 
|---|
 | 55 |  S IN525=$O(^PS(52.5,"B",RX,""))
 | 
|---|
 | 56 |  I $G(IN525)]"" K DIE,DA,DR,DIE,DIC S DIE="^PS(52.5,",DR="3////X",DA=IN525 L +^PS(52.5,IN525):600 Q:'$T  D ^DIE L -^PS(52.5,IN525) K DA,DIE,DA,IN525
 | 
|---|
 | 57 |  K DIE,DR,DA
 | 
|---|
 | 58 |  S DA=PSXMSG,DIE="^PSX(550.1,",DR="1////5"
 | 
|---|
 | 59 |  L +^PSX(550.1,PSXMSG):600 Q:'$T
 | 
|---|
 | 60 |  D ^DIE L -^PSX(550.1,PSXMSG) K DA,DR,DIE
 | 
|---|
 | 61 | OERR ;clear ^XTMP("ORLK-" if it is CPRS/CMOP
 | 
|---|
 | 62 |  N ORD S ORD=+$P($G(^PSRX(+$G(RX),"OR1")),"^",2)
 | 
|---|
 | 63 |  I ORD,$D(^XTMP("ORLK-"_ORD,0)),^XTMP("ORLK-"_ORD,0)["CPRS/CMOP" K ^XTMP("ORLK-"_ORD)
 | 
|---|
 | 64 |  Q
 | 
|---|
 | 65 | PRINT D NOW^%DTC S DTTM=% S COM="CMOP Suspense Label "_$S($G(^PS(52.5,REC,"P"))=0:"Printed",1:"RePrinted")_$S($G(^PSRX(PTR,"TYPE"))>0:" (PARTIAL)",1:"")
 | 
|---|
 | 66 |  S CNT=0 F JJ=0:0 S JJ=$O(^PSRX(PTR,"A",JJ)) Q:'JJ  S CNT=JJ
 | 
|---|
 | 67 |  S $P(^PSRX(PTR,"STA"),"^",1)=0,^PS(52.5,REC,"P")=1
 | 
|---|
 | 68 |  S CNT=CNT+1,^PSRX(PTR,"A",0)="^52.3DA^"_CNT_"^"_CNT L +^PSRX(PTR):600 Q:'$T  S ^PSRX(PTR,"A",CNT,0)=DTTM_"^S^"_DUZ_"^"_FILL_"^"_COM L -^PSRX(PTR)
 | 
|---|
 | 69 |  K DTTM,%,COM,CNT,JJ
 | 
|---|
 | 70 |  Q
 | 
|---|
 | 71 | SUSPS ;goes through the PS(550.1 file and gets the pointer for each rx in PSRX
 | 
|---|
 | 72 |  ;CMOP Event entry
 | 
|---|
 | 73 |  S XXX=0 F  S XXX=$O(^PSX(550.1,REC,2,XXX)) Q:XXX'>0  D ACLOG
 | 
|---|
 | 74 |  K XXX
 | 
|---|
 | 75 |  Q
 | 
|---|
 | 76 | ACLOG ;
 | 
|---|
 | 77 |  D NOW^%DTC
 | 
|---|
 | 78 |  S PSXPTR=$P($G(^PSX(550.1,REC,2,XXX,0)),U,1)
 | 
|---|
 | 79 |  F RCC=0:0 S RCC=$O(^PSRX(+PSXPTR,4,"B",OLDBAT,RCC)) Q:RCC=""  S RC=RCC
 | 
|---|
 | 80 |  S TRNN=$P($G(^PSRX(+PSXPTR,4,RC,0)),"^",1)
 | 
|---|
 | 81 |  S FAC=$$GET1^DIQ(550.2,TRNN,3)
 | 
|---|
 | 82 |  S FILL=$P($G(^PSRX(+PSXPTR,4,RC,0)),"^",3)
 | 
|---|
 | 83 |  S CNT=0 F JJ=0:0 S JJ=$O(^PSRX(+PSXPTR,"A",JJ)) Q:'JJ  S CNT=JJ
 | 
|---|
 | 84 |  S COMMENT="Retransmitted to "_FAC_" CMOP"
 | 
|---|
 | 85 |  S CNT=CNT+1,^PSRX(+PSXPTR,"A",0)="^52.3DA^"_CNT_"^"_CNT
 | 
|---|
 | 86 |  L +^PSRX(+PSXPTR):600 Q:'$T
 | 
|---|
 | 87 |  S ^PSRX(+PSXPTR,"A",CNT,0)=%_U_"B"_U_DUZ_U_$S(FILL>5:(FILL+1),1:FILL)_U_COMMENT
 | 
|---|
 | 88 |  L -^PSRX(+PSXPTR)
 | 
|---|
 | 89 |  L +^PSRX(+PSXPTR,4,0):600 Q:'$T
 | 
|---|
 | 90 |  S DA(1)=+PSXPTR,DIE="^PSRX("_+PSXPTR_",4,",DA=RC,DR="3////2"
 | 
|---|
 | 91 |  D ^DIE K DIE,DA,DR,DD,DO
 | 
|---|
 | 92 |  S:'$D(^PSRX(+PSXPTR,4,0)) ^PSRX(+PSXPTR,4,0)="^52.01DA^^"
 | 
|---|
 | 93 |  S DA(1)=+PSXPTR,DIC="^PSRX("_+PSXPTR_",4,",DIC(0)="Z",X=PSXBAT
 | 
|---|
 | 94 |  S DIC("DR")="1////"_REC_";2////"_$G(FILL)_";3////0" D F
 | 
|---|
 | 95 |  L -^PSRX(+PSXPTR,4,0)
 | 
|---|
 | 96 |  K PSXPTR,COMMENT,CNT,JJ,FILL,REF,%,DIC,DA,DIE,DR
 | 
|---|
 | 97 |  S DA=REC,DIE="^PSX(550.1,",DR="1////5" L +^PSX(550.1,REC):600 Q:'$T
 | 
|---|
 | 98 |  D ^DIE L -^PSX(550.1,REC) K DIE,DA,DR,FAC,TRNN
 | 
|---|
 | 99 |  Q
 | 
|---|
 | 100 | RXERR ;auto error processing of RX updating 52 & 52.5
 | 
|---|
 | 101 |  S XXERR=$$EC^%ZOSV
 | 
|---|
 | 102 |  S PSXDIVNM=$$GET1^DIQ(59,PSOSITE,.01)
 | 
|---|
 | 103 |  ;save an image of the transient file 550.1 for 2 days
 | 
|---|
 | 104 |  D NOW^%DTC S DTTM=%
 | 
|---|
 | 105 |  ;VMP OIFO BAY PINES;ELR;PSX*2*57 CHANE PURGE DATE TO T+12 FROM T+2
 | 
|---|
 | 106 |  S X=$$FMADD^XLFDT(DT,+12) S ^XTMP("PSXERR "_DTTM,0)=X_U_DT_U_"CMOP "_XXERR
 | 
|---|
 | 107 |  M ^XTMP("PSXERR "_DTTM,550.1)=^PSX(550.1)
 | 
|---|
 | 108 |  S XMSUB="CMOP Error "_PSXDIVNM_" "_$$GET1^DIQ(550.2,+$G(PSXBAT),.01)
 | 
|---|
 | 109 |  D GRP1^PSXNOTE
 | 
|---|
 | 110 |  ;S XMY(DUZ)=""
 | 
|---|
 | 111 |  S XMTEXT="TEXT("
 | 
|---|
 | 112 |  S TEXT(1,0)=$S($G(PSXCS):"",1:"NON-")_"CS CMOP transmission encountered the following error. Please investigate"
 | 
|---|
 | 113 |  S TEXT(2,0)="Division:         "_PSXDIVNM
 | 
|---|
 | 114 |  S TEXT(3,0)="Type/Batch        "_$S($G(PSXCS):"CS",1:"NON-CS")_" / "_$$GET1^DIQ(550.2,$G(PSXBAT),.01)
 | 
|---|
 | 115 |  S TEXT(4,0)="Error:            "_XXERR
 | 
|---|
 | 116 |  S TEXT(5,0)=">>>This batch has been sent <<<"
 | 
|---|
 | 117 |  S TEXT(6,0)="Call NVS to investigate which prescriptions have been updated"
 | 
|---|
 | 118 |  S TEXT(7,0)="or not updated in files Prescription #52 & Suspense 52.5 ."
 | 
|---|
 | 119 |  S TEXT(8,0)="A copy of file 550.1 can be found in ^XTMP(""PSXERR "_DTTM_""")"
 | 
|---|
 | 120 |  D ^%ZTER
 | 
|---|
 | 121 |  D ^XMD
 | 
|---|
 | 122 |  G UNWIND^%ZTER
 | 
|---|