| 1 | RARECOV ;HISC/SWM-Recover Purged Rad/NM Report/Exam only ;4/17/03  09:39
 | 
|---|
| 2 |  ;;5.0;Radiology/Nuclear Medicine;**34**;Mar 16, 1998
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  S:'$D(DTIME) DTIME=9999
 | 
|---|
| 5 |  I $D(^XTMP("RARECOV")) W !,"^XTMP(""RARECOV"") exists, you must delete this before",!,"you can run another recovery.",!! G NOTDONE
 | 
|---|
| 6 |  S RACRT=$E($G(IOST),1,2)="C-"
 | 
|---|
| 7 |  F I=1:1:21 W !,$P($T(INSTRC+I),";;",2)
 | 
|---|
| 8 |  R !,"Press return key to continue, or ""^"" to exit: ",X:DTIME
 | 
|---|
| 9 |  G:X="^" Q
 | 
|---|
| 10 |  ;Select Imaging type(s)
 | 
|---|
| 11 |  ;Return RAPUR array  =  RAPUR(ien)="", where ien = entry in 79.2
 | 
|---|
| 12 |  S (I,J,CNT)=0 K RAPUR
 | 
|---|
| 13 |  W !!?12,"IMAGING TYPES",!?12,"-------------",!
 | 
|---|
| 14 |  F  S I=$O(^RA(79.2,"B",I)) Q:I=""  F  S J=$O(^RA(79.2,"B",I,J)) Q:'J  S CNT=CNT+1 W !?3,CNT,") ",I S RAX(CNT)=J
 | 
|---|
| 15 |  W ! S DIR(0)="L^1:"_CNT,DIR("A")="Select Imaging Type(s) to recover purged data",DIR("?")="Select by number, one or more imaging types to be purged" D ^DIR K DIR I $D(DIRUT) G Q
 | 
|---|
| 16 |  S I="" F J=1:1 S I=$P(Y,",",J) Q:'I  S RAPUR(RAX(I))=""
 | 
|---|
| 17 |  G Q:'$O(RAPUR(0))
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ;Select what to recover: exams, reports, or both
 | 
|---|
| 20 |  S DIR(0)="S^E:Exam data;R:Report data;B:Both;",DIR("?")="Do you want to recover purged Exams, Reports, or Both exams and reports"
 | 
|---|
| 21 |  S DIR("A")="Enter type of data to recover",DIR("B")="Report data"
 | 
|---|
| 22 |  D ^DIR K DIR
 | 
|---|
| 23 |  ;REGET70=0 means don't recover file 70 data
 | 
|---|
| 24 |  S RAGET70=$S(Y="E":1,Y="B":1,1:0)
 | 
|---|
| 25 |  S RAGET74=$S(Y="R":1,Y="B":1,1:0)
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  S (RADT,RAIEN)=0
 | 
|---|
| 28 |  F  S RAIEN=$O(RAPUR(RAIEN)) Q:'RAIEN  D ASKDT Q:RAX=""!(CNT<4)
 | 
|---|
| 29 |  G:RAX=""!(CNT<4) NOTDONE
 | 
|---|
| 30 |  W !
 | 
|---|
| 31 |  S DIR(0)="Y",DIR("A")="Do you want to proceed "
 | 
|---|
| 32 |  S DIR("B")="NO" D ^DIR
 | 
|---|
| 33 |  I 'Y G NOTDONE
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 | EXAM ;Copy backup exam/report data
 | 
|---|
| 36 |  D NOW^%DTC S RANOW=%,X1=RANOW,X2=60 D C^%DTC
 | 
|---|
| 37 |  S ^XTMP("RARECOV",0)=X_"^"_RANOW_"^"_"RARECOV"
 | 
|---|
| 38 |  W !!,"Recovering ",$S(RAGET70&RAGET74:"Exam and Report",RAGET70:"Exam",RAGET74:"Report",1:"?")," data from backup to ^XTMP(""RARECOV"".",!
 | 
|---|
| 39 |  F RADTE=0:0 S RADTE=$O(^RADPT("AR",RADTE)) Q:RADTE'>0!(RADTE>RADT)  S RADTI=9999999.9999-RADTE F RADFN=0:0 S RADFN=$O(^RADPT("AR",RADTE,RADFN)) Q:RADFN'>0  D
 | 
|---|
| 40 |  .F RACN=0:0 S RACN=$O(^RADPT(RADFN,"DT",RADTI,"P","B",RACN)) Q:RACN'>0  S RACNI=+$O(^(RACN,0)),RA0=$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0)),RARPT=+$P(RA0,"^",17) D
 | 
|---|
| 41 |  ..S RAIMAG=+$P($G(^RAMIS(71,+$P(RA0,"^",2),0)),"^",12) Q:'$D(RAPUR(RAIMAG))  W:RACRT "."
 | 
|---|
| 42 |  ..K RARP S RARPTNP=$G(^RARPT(RARPT,"NOPURGE")) I RAGET74 D
 | 
|---|
| 43 |  ... Q:+$O(^RARPT(RARPT,"ERR",0))  ; quit if report amended
 | 
|---|
| 44 |  ...I $P(RAPUR(RAIMAG),"^",2)>RADTE,$D(^RARPT(RARPT,"R")) M ^XTMP("RARECOV","RPT",RARPT,"R")=^RARPT(RARPT,"R") S RARP=""
 | 
|---|
| 45 |  ...I $P(RAPUR(RAIMAG),"^")>RADTE,$D(^RARPT(RARPT,"L")) M ^XTMP("RARECOV","RPT",RARPT,"L")=^RARPT(RARPT,"L") S RARP=""
 | 
|---|
| 46 |  ...I $P(RAPUR(RAIMAG),"^",3)>RADTE,$D(^RARPT(RARPT,"H")) M ^XTMP("RARECOV","RPT",RARPT,"H")=^RARPT(RARPT,"H")  S RARP=""
 | 
|---|
| 47 |  ..I $D(RARP) S ^XTMP("RARECOV","RPT",RARPT,"PURGE")=^RARPT(RARPT,"PURGE"),$P(RAPUR(RAIMAG),"^",7)=$P(RAPUR(RAIMAG),"^",7)+1
 | 
|---|
| 48 |  ..K RAEX I RAGET70 D
 | 
|---|
| 49 |  ...I $P(RAPUR(RAIMAG),"^")>RADTE,$D(^RADPT(RADFN,"DT",RADTI,"P",RACNI,"L")) M ^XTMP("RARECOV","DPT",RADFN,RADTI,RACNI,"L")=^RADPT(RADFN,"DT",RADTI,"P",RACNI,"L") S RAEX=""
 | 
|---|
| 50 |  ...I $P(RAPUR(RAIMAG),"^",3)>RADTE,$D(^RADPT(RADFN,"DT",RADTI,"P",RACNI,"H")) M ^XTMP("RARECOV","DPT",RADFN,RADTI,RACNI,"H")=^RADPT(RADFN,"DT",RADTI,"P",RACNI,"H") S RAEX=""
 | 
|---|
| 51 |  ...I $P(RAPUR(RAIMAG),"^",4)>RADTE,$D(^RADPT(RADFN,"DT",RADTI,"P",RACNI,"T")) M ^XTMP("RARECOV","DPT",RADFN,RADTI,RACNI,"T")=^RADPT(RADFN,"DT",RADTI,"P",RACNI,"T") S RAEX=""
 | 
|---|
| 52 |  ..I $D(RAEX) S ^XTMP("RARECOV","DPT",RADFN,RADTI,RACNI,"PURGE")=^RADPT(RADFN,"DT",RADTI,"P",RACNI,"PURGE"),$P(RAPUR(RAIMAG),"^",6)=$P(RAPUR(RAIMAG),"^",6)+1
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 |  D TOTALS G Q
 | 
|---|
| 55 | INSTRC ;
 | 
|---|
| 56 |  ;;Instructions for recovering purged exam and/or report data
 | 
|---|
| 57 |  ;; Step 0.
 | 
|---|
| 58 |  ;;         Find out:
 | 
|---|
| 59 |  ;;         1 - the DATE that the purge was done
 | 
|---|
| 60 |  ;;         2 - how many DAYS back from that date was used as cut-off
 | 
|---|
| 61 |  ;;             ie., what was entered as "ddd" in "T-ddd"  ?
 | 
|---|
| 62 |  ;; Step 1. From the Backup Volume:
 | 
|---|
| 63 |  ;;         D ^RARECOV
 | 
|---|
| 64 |  ;;         enter cut-off dates that you had used in the purge function
 | 
|---|
| 65 |  ;; Step 2. From the Backup Volume:
 | 
|---|
| 66 |  ;;         D ^%GTO   (or your system's global copy out utility)
 | 
|---|
| 67 |  ;;         enter output file name
 | 
|---|
| 68 |  ;;         enter ^XTMP("RARECOV"
 | 
|---|
| 69 |  ;; Step 3. From the Production volume that holds ^XTMP: 
 | 
|---|
| 70 |  ;;         D ^%GTI   (or your system's global restore utility)
 | 
|---|
| 71 |  ;;         enter the file name from step 2
 | 
|---|
| 72 |  ;; Step 4. From the Production volume:
 | 
|---|
| 73 |  ;;         D ^RARESTOR
 | 
|---|
| 74 |  ;;         routine will automatically read from ^XTMP("RARECOV"
 | 
|---|
| 75 |  ;;         and copy data back into ^RADPT and/or ^RARPT
 | 
|---|
| 76 |  ;;
 | 
|---|
| 77 | NOTDONE W !!,"-- Nothing Done --"
 | 
|---|
| 78 | Q ;K CNT,I,J,RADD,RADT,RAGET70,RAGET74,RAI,RAIEN,RAPRMPT,RAPUR,RAX
 | 
|---|
| 79 |  Q
 | 
|---|
| 80 | TOTALS ;
 | 
|---|
| 81 |  S RAIEN=0
 | 
|---|
| 82 |  F  S RAIEN=$O(RAPUR(RAIEN)) Q:'RAIEN  D
 | 
|---|
| 83 |  . W !!,"Imaging Type: ",$P($G(^RA(79.2,RAIEN,0)),"^"),!
 | 
|---|
| 84 |  . W !?5,"No. of exam records recovered : ",$P(RAPUR(RAIEN),"^",6)
 | 
|---|
| 85 |  . W !?5,"No. of reports recovered      : ",$P(RAPUR(RAIEN),"^",7)
 | 
|---|
| 86 |  . S ^XTMP("RARECOV",RAIEN)=RAPUR(RAIEN)
 | 
|---|
| 87 |  Q
 | 
|---|
| 88 |  ;Select Cut-off date for the various data fields
 | 
|---|
| 89 | ASKDT S RAX="",CNT=0
 | 
|---|
| 90 |  K RACUTDT W !!?7,"Cut-off Date Selection **** ",$P(^RA(79.2,RAIEN,0),"^")," ****"
 | 
|---|
| 91 |  K X,%DT S %DT="APEX" W !
 | 
|---|
| 92 |  S %DT("A")="Enter date that the Radiology Purge was done : " D ^%DT
 | 
|---|
| 93 |  G:'Y Q G:Y'?.7N Q S RADTDONE=Y
 | 
|---|
| 94 |  R !!,"Enter number of days subtracted from that date as cut-off : ",RANUM:DTIME
 | 
|---|
| 95 |  G:'RANUM Q
 | 
|---|
| 96 |  S ^XTMP("RARECOV",0,RAIEN)=RADTDONE_"^"_RANUM
 | 
|---|
| 97 |  S X1=RADTDONE,X2=-RANUM D C^%DTC S Y=X D DD^%DT S %DT("B")=Y
 | 
|---|
| 98 |  W !?7,"The default value can be changed as needed."
 | 
|---|
| 99 |  K RADD
 | 
|---|
| 100 |  S RAPRMPT="Cut-off Date for "
 | 
|---|
| 101 |  ; define field names, because the backup volume doesn't have ^DD
 | 
|---|
| 102 |  S RADD(.11)="ACTIVITY LOG CUT-OFF"
 | 
|---|
| 103 |  S RADD(.12)="REPORT CUT-OFF"
 | 
|---|
| 104 |  S RADD(.13)="CLINICAL HISTORY CUT-OFF"
 | 
|---|
| 105 |  S RADD(.14)="TRACKING TIME CUT-OFF"
 | 
|---|
| 106 |  F RAI=.11:.01:.14 S CNT=CNT+1 D  Q:Y<0
 | 
|---|
| 107 |  . W ! S %DT("A")=RAPRMPT_$P(RADD(RAI),"^")_" : " D ^%DT Q:Y<0  S $P(RAX,"^",CNT)=Y S:Y>RADT RADT=Y
 | 
|---|
| 108 |  G:RAX="" Q G:CNT<4 Q
 | 
|---|
| 109 |  S RAPUR(RAIEN)=RAX
 | 
|---|
| 110 |  Q
 | 
|---|