[613] | 1 | MDCVT ; HOIFO/DP/NCA - Medicine Package Conversion ;10/20/04 12:49
|
---|
| 2 | ;;1.0;CLINICAL PROCEDURES;**5**;Apr 01, 2004;Build 1
|
---|
| 3 | ; Integration Agreements:
|
---|
| 4 | ; IA# 2263 [Supported] XPAR parameter calls.
|
---|
| 5 | ; IA# 2320 [Supported] %ZISH calls.
|
---|
| 6 | ; IA#10031 [Supported] DDS call to bring up Screen Man
|
---|
| 7 | ;
|
---|
| 8 | EN ; [Procedure] Main entry point to convert database to TIU notes
|
---|
| 9 | N MDCNVT,MDDIR,MDFILE,MDREC,MDTEST,MDTIUI,MDXR,ORHFS,X,Y
|
---|
| 10 | S (MDCNVT("CR"),MDCNVT("CT"),MDCNVT("E"),MDCNVT("S"),MDCNVT("TOT"))=0
|
---|
| 11 | I $$GET^XPAR("SYS","MD MEDICINE CONVERTED",1) W !!,"Already Converted" Q
|
---|
| 12 | I '$P($G(^MDD(703.9,1,0)),U,3) W !!,"No Administrative Closure Person." Q
|
---|
| 13 | S MDTEST=+$P($G(^MDD(703.9,1,0)),U,2)'=1
|
---|
| 14 | S MDXR=$O(^MDD(703.9,1,2,"AS","")) I MDXR="" W !!,"No Conversion List. Run Build Conversion List option." Q
|
---|
| 15 | ;
|
---|
| 16 | W @IOF,!,"Medicine to Clinical Procedure Conversion"
|
---|
| 17 | K DIR S DIR(0)="YA"
|
---|
| 18 | S DIR("A")="Ok to continue? "
|
---|
| 19 | S DIR("A",1)="Running conversion in "_$S(MDTEST:"TEST",1:"REAL")_" mode.",DIR("B")="NO" D ^DIR K DIR Q:$D(DIRUT)!$D(DIROUT)!(Y<1)
|
---|
| 20 | ;
|
---|
| 21 | ; Set up the HFS variables
|
---|
| 22 | S MDFILE="MDCVT.TXT",MDDIR=$P($G(^MDD(703.9,1,.1)),U)
|
---|
| 23 | S X=$$TESTHFS() I '+X W !!,"HFS Device Error: ",$P(X,U,2) Q
|
---|
| 24 | ;
|
---|
| 25 | ; Last Chance
|
---|
| 26 | W ! K DIR S DIR(0)="YA"
|
---|
| 27 | S DIR("A")="Ready to "_$S(MDTEST:"test the conversion of",1:"convert")_" the Medicine Files? "
|
---|
| 28 | S DIR("B")="NO" D ^DIR K DIR Q:$D(DIRUT)!$D(DIROUT)!(Y<1)
|
---|
| 29 | ;
|
---|
| 30 | ; See if previous errors need to be reset
|
---|
| 31 | W !!,"Conversion in progress...",!
|
---|
| 32 | D RESET
|
---|
| 33 | ;
|
---|
| 34 | ; Set MDREC up here - This prevents loss on M error trap in EN1
|
---|
| 35 | S MDREC=0
|
---|
| 36 | ;
|
---|
| 37 | W !?5,"[.] Indicates converted record"
|
---|
| 38 | W !?5,"[*] Indicates error in record",!!
|
---|
| 39 | ;
|
---|
| 40 | EN1 ; [Procedure] Resumes on error via $ETRAP variable
|
---|
| 41 | N $ESTACK,$ETRAP S $ETRAP="ERR^MDCVT"
|
---|
| 42 | N MDCONS,MDECON,MDFDA,MDNODE,MDNOTE,MDOK,MDPR,MDR,MDR1,MDSTUD,MDUSR,MDX1
|
---|
| 43 | F S MDREC=$O(^MDD(703.9,1,2,"AS","R",MDREC)) Q:'MDREC D
|
---|
| 44 | .S MDPTR=$$GET1^DIQ(703.92,MDREC_",1,",.01) Q:MDPTR=""
|
---|
| 45 | .S MDGBL=U_$P(MDPTR,";",2)_$P(MDPTR,";",1)_")"
|
---|
| 46 | .S MDCNVT("TOT")=MDCNVT("TOT")+1
|
---|
| 47 | .I '$P($G(^MDD(703.9,1,1,+$P(MDGBL,"(",2),0)),U,3) D Q
|
---|
| 48 | ..D SKIP(MDPTR,"Report type not marked for conversion")
|
---|
| 49 | ..S MDCNVT("S")=MDCNVT("S")+1
|
---|
| 50 | .S MDSTAT=$P($G(@MDGBL@("ES")),U,7)
|
---|
| 51 | .I MDSTAT="" D Q:'MDOK
|
---|
| 52 | ..S MDOK=+$P($G(^MDD(703.9,1,1,+$P(MDGBL,"(",2),0)),U,4)
|
---|
| 53 | ..D:'MDOK LOGERR(MDPTR,"Unable to determine status")
|
---|
| 54 | .I MDSTAT="S" D SKIP(MDPTR,"Report Superseded") S MDCNVT("S")=MDCNVT("S")+1 Q
|
---|
| 55 | .I MDSTAT["D" D LOGERR(MDPTR,"Report in Draft/Problem Draft status") Q
|
---|
| 56 | .;I MDSTAT="RNV" D LOGERR(MDPTR,"Report not verified") Q
|
---|
| 57 | .I MDTEST W "." ; Progress indicator
|
---|
| 58 | .;
|
---|
| 59 | .; Produce report using HFS device MDHFS
|
---|
| 60 | .S %ZIS("HFSNAME")=MDDIR_MDFILE,%ZIS("HFSMODE")="W",IOP="MDHFS;P-MDHFS"
|
---|
| 61 | .D ^%ZIS I POP D LOGERR(MDPTR,"No HFS Access or device MDHFS") Q
|
---|
| 62 | .S ORHFS="SCRATCH"
|
---|
| 63 | .U IO D EN^MCAPI(MDPTR,0) D ^%ZISC
|
---|
| 64 | .;
|
---|
| 65 | .; Fetch the report text
|
---|
| 66 | .K ^TMP($J)
|
---|
| 67 | .S X=$$FTG^%ZISH(MDDIR,MDFILE,$NA(^TMP($J,1)),2)
|
---|
| 68 | .;
|
---|
| 69 | .; Delete the Host File
|
---|
| 70 | .S DELETE(MDFILE)=""
|
---|
| 71 | .S X=$$DEL^%ZISH(MDDIR,"DELETE")
|
---|
| 72 | .; Is it a valid report?
|
---|
| 73 | .S LINES=$O(^TMP($J,""),-1)
|
---|
| 74 | .S BYTES=0 F X=0:0 S X=$O(^TMP($J,X)) Q:'X S BYTES=BYTES+$L(^(X))
|
---|
| 75 | .I LINES<5&(^TMP($J,2)["BAD MEDICINE") D LOGERR(MDPTR,^TMP($J,2)) Q
|
---|
| 76 | .;
|
---|
| 77 | .; Get Legal header For Report
|
---|
| 78 | .S RESULTS=$NA(^TMP($J)) D GETHDR^MDESPRT(.RESULTS,MDPTR)
|
---|
| 79 | .;
|
---|
| 80 | .; If test mode quit at this point
|
---|
| 81 | .I MDTEST D FINISH(MDPTR,LINES,BYTES,"") S MDCNVT("CT")=MDCNVT("CT")+1 Q
|
---|
| 82 | .;
|
---|
| 83 | .; If real mode set to Unspecified Error status and proceed
|
---|
| 84 | .;D LOGERR(MDPTR,"Unspecified Error")
|
---|
| 85 | .S MDNODE=$G(^MDD(703.9,1,2,+MDREC,0))
|
---|
| 86 | .S MDNODE=$P(MDNODE,U,1)
|
---|
| 87 | .;
|
---|
| 88 | .; Create the note
|
---|
| 89 | .S MDTIUI=$$CONVERT^MDCVT1(MDNODE,$NA(^TMP($J)))
|
---|
| 90 | .I +MDTIUI'>0 D LOGERR(MDPTR,"Couldn't create the TIU document") Q
|
---|
| 91 | .;
|
---|
| 92 | .; Update Consults and Imaging
|
---|
| 93 | .;
|
---|
| 94 | .D UPD^MDCVT1(MDGBL,MDNODE,MDTIUI,MDTEST)
|
---|
| 95 | .;
|
---|
| 96 | .; Flag as finished
|
---|
| 97 | .;
|
---|
| 98 | .D FINISH(MDPTR,LINES,BYTES,MDTIUI) S MDCNVT("CR")=MDCNVT("CR")+1
|
---|
| 99 | ;
|
---|
| 100 | D TOTALS^MDCVT1(.MDCNVT)
|
---|
| 101 | Q
|
---|
| 102 | ;
|
---|
| 103 | TESTHFS() ; Verify HFS is working properly
|
---|
| 104 | N MDNOW
|
---|
| 105 | S %ZIS("HFSNAME")=MDDIR_MDFILE,%ZIS("HFSMODE")="W",IOP="MDHFS;P-MDHFS"
|
---|
| 106 | D ^%ZIS I POP W !,"No HFS Access or missing device MDHFS" Q 0
|
---|
| 107 | S X=1 D Q:'X 0
|
---|
| 108 | .I IOT'="HFS" W !,"Device MDHFS not of type HFS" S X=0
|
---|
| 109 | .I IOST'="P-MDHFS" W !,"Missing Terminal Type P-MDHFS" S X=0 Q
|
---|
| 110 | .I IOSL'=88 W !,"Improper Page Length in Terminal Type P-MDHFS" S X=0
|
---|
| 111 | .I IOM'=80 W !,"Improper Page Width in Terminal Type P-MDHFS" S X=0
|
---|
| 112 | .I IOF'="#" W !,"Improper Form Feed in Terminal Type P-MDHFS" S X=0
|
---|
| 113 | ;
|
---|
| 114 | D NOW^%DTC S MDNOW=% K %
|
---|
| 115 | U IO W !!,MDNOW
|
---|
| 116 | D ^%ZISC
|
---|
| 117 | ;
|
---|
| 118 | ; Fetch the text
|
---|
| 119 | K ^TMP($J)
|
---|
| 120 | S X=$$FTG^%ZISH(MDDIR,MDFILE,$NA(^TMP($J,1)),2)
|
---|
| 121 | I 'X W !,"Unable to retrieve data back from Host File" Q 0
|
---|
| 122 | I ^TMP($J,3)'=MDNOW W !,"Error verifying data in Host File" Q 0
|
---|
| 123 | ;
|
---|
| 124 | ; Delete the Host File
|
---|
| 125 | S DELETE(MDFILE)=""
|
---|
| 126 | S X=$$DEL^%ZISH(MDDIR,"DELETE")
|
---|
| 127 | I X'=1 W !,"Unable delete Host File" Q 0
|
---|
| 128 | Q 1
|
---|
| 129 | ;
|
---|
| 130 | ERR ; M Error trap submodule to document error and continue
|
---|
| 131 | D LOGERR(MDPTR,$ECODE)
|
---|
| 132 | I $G(ION)="MDHFS" D ^%ZISC ; Close device if using the HFS
|
---|
| 133 | G EN1
|
---|
| 134 | ;
|
---|
| 135 | FINISH(MDPTR,LINES,BYTES,TIUIEN) ; Update status to converted
|
---|
| 136 | N MDFDA,MDIEN,MDIENS
|
---|
| 137 | S MDIEN=$O(^MDD(703.9,1,2,"B",MDPTR,0))
|
---|
| 138 | I MDIEN<1 W !,"Error, no log entry ",MDPTR Q
|
---|
| 139 | S MDIENS=MDIEN_",1,"
|
---|
| 140 | I MDTEST S MDFDA(703.92,MDIENS,.02)="CT"
|
---|
| 141 | E S MDFDA(703.92,MDIENS,.02)="CR"
|
---|
| 142 | S MDFDA(703.92,MDIENS,.03)=TIUIEN
|
---|
| 143 | S MDFDA(703.92,MDIENS,.04)=LINES
|
---|
| 144 | S MDFDA(703.92,MDIENS,.05)=BYTES
|
---|
| 145 | S MDFDA(703.92,MDIENS,.1)=LINES_" lines, "_BYTES_" bytes"
|
---|
| 146 | D FILE^DIE("","MDFDA")
|
---|
| 147 | Q
|
---|
| 148 | ;
|
---|
| 149 | LOGERR(MDPTR,ERRMSG) ; Log conversion error
|
---|
| 150 | N MDFDA,MDIEN,MDIENS
|
---|
| 151 | S MDIEN=$O(^MDD(703.9,1,2,"B",MDPTR,0))
|
---|
| 152 | I MDIEN<1 W !,"Error, no log entry ",MDPTR Q
|
---|
| 153 | S MDIENS=MDIEN_",1,"
|
---|
| 154 | S MDFDA(703.92,MDIENS,.02)="E"
|
---|
| 155 | S MDFDA(703.92,MDIENS,.1)=$TR(ERRMSG,U,"~")
|
---|
| 156 | D FILE^DIE("","MDFDA")
|
---|
| 157 | W "*" ; Progress indicator
|
---|
| 158 | Q
|
---|
| 159 | ;
|
---|
| 160 | RESET ; Reset error status reports to READY TO CONVERT
|
---|
| 161 | N MDIEN S MDIEN=0
|
---|
| 162 | ; Check for real mode and convert test conversions
|
---|
| 163 | I 'MDTEST F S MDIEN=$O(^MDD(703.9,1,2,"AS","CT",MDIEN)) Q:'MDIEN D
|
---|
| 164 | .N MDFDA
|
---|
| 165 | .S MDFDA(703.92,MDIEN_",1,",.02)="R"
|
---|
| 166 | .D FILE^DIE("","MDFDA")
|
---|
| 167 | ; Regardless of mode switch skipped back to ready
|
---|
| 168 | F S MDIEN=$O(^MDD(703.9,1,2,"AS","S",MDIEN)) Q:'MDIEN D
|
---|
| 169 | .N MDFDA
|
---|
| 170 | .S MDFDA(703.92,MDIEN_",1,",.02)="R"
|
---|
| 171 | .D FILE^DIE("","MDFDA")
|
---|
| 172 | ; Regardless of mode switch errors back to ready
|
---|
| 173 | F S MDIEN=$O(^MDD(703.9,1,2,"AS","E",MDIEN)) Q:'MDIEN D
|
---|
| 174 | .N MDFDA
|
---|
| 175 | .S MDFDA(703.92,MDIEN_",1,",.02)="R"
|
---|
| 176 | .D FILE^DIE("","MDFDA")
|
---|
| 177 | Q
|
---|
| 178 | ;
|
---|
| 179 | REBUILD ; [Procedure] Build the file manually
|
---|
| 180 | N MDROOT
|
---|
| 181 | S X=$P(^MDD(703.9,0),U,1,2)_U_U K ^MDD(703.9) S ^MDD(703.9,0)=X
|
---|
| 182 | S MDROOT=$NA(^MDD(703.9,1))
|
---|
| 183 | S @MDROOT@(0)="DEFAULT"
|
---|
| 184 | S @MDROOT@(1,0)="^703.91P^^"
|
---|
| 185 | F X=691,691.1,691.5,691.6,691.7,691.8,694,694.5,698,698.1,698.2,698.3,699,699.5,700,701 S @MDROOT@(1,X,0)=X
|
---|
| 186 | S DA=1,DIK="^MDD(703.9," D IXALL^DIK K DA,DIK
|
---|
| 187 | Q
|
---|
| 188 | ;
|
---|
| 189 | SETUP ; [Procedure]
|
---|
| 190 | I '$O(^MDD(703.9,0)) W !,"Initializing..." D REBUILD,SETDEF^MDSTATU
|
---|
| 191 | S DDSFILE=703.9,DR="[MD MAIN]",DA=1 D ^DDS
|
---|
| 192 | Q
|
---|
| 193 | ;
|
---|
| 194 | SKIP(MDPTR,REASON) ; [Procedure] Skip Report
|
---|
| 195 | N MDFDA,MDIEN,MDIENS
|
---|
| 196 | S MDIEN=$O(^MDD(703.9,1,2,"B",MDPTR,0))
|
---|
| 197 | I MDIEN<1 W !,"Error, no log entry ",MDPTR Q
|
---|
| 198 | S MDIENS=MDIEN_",1,"
|
---|
| 199 | S MDFDA(703.92,MDIENS,.02)="S"
|
---|
| 200 | S MDFDA(703.92,MDIENS,.1)=$TR(REASON,U,"~")
|
---|
| 201 | D FILE^DIE("","MDFDA")
|
---|
| 202 | Q
|
---|
| 203 | ;
|
---|
| 204 | SYNC(MDPTR) ; Make sure entry exists
|
---|
| 205 | N MDFDA
|
---|
| 206 | Q:$O(^MDD(703.9,1,2,"B",MDPTR,0))
|
---|
| 207 | Q:$O(^MDD(702,"ACONV",MDPTR,0))
|
---|
| 208 | S MDFDA(703.92,"+1,1,",.01)=MDPTR
|
---|
| 209 | S MDFDA(703.92,"+1,1,",.02)="R"
|
---|
| 210 | D UPDATE^DIE("","MDFDA")
|
---|
| 211 | Q
|
---|
| 212 | ;
|
---|
| 213 | LOCKOUT ; Lockout Options and set API Flag
|
---|
| 214 | D ^MDOUTOR
|
---|
| 215 | Q
|
---|
| 216 | ;
|
---|
| 217 | STATUS(MDPTR) ; [Procedure] Return status of VPtr
|
---|
| 218 | S X=$O(^MDD(703.9,1,2,"B",MDPTR,0))
|
---|
| 219 | I X Q $P($G(^MDD(703.9,1,2,X,0)),U,2) ; Return actual status
|
---|
| 220 | N MDFDA,MDIEN,MDMSG
|
---|
| 221 | S MDFDA(703.92,"+1,1,",.01)=MDPTR
|
---|
| 222 | S MDFDA(703.92,"+1,1,",.02)="N"
|
---|
| 223 | D UPDATE^DIE("","MDFDA","MDIEN","MDMSG")
|
---|
| 224 | I $G(MDIEN(1))<1 W !,"Error adding to conversion log ",MDPTR Q -1
|
---|
| 225 | Q "N"
|
---|
| 226 | ;
|
---|
| 227 | SUMMARY ; Disk space requirements
|
---|
| 228 | N FILE,LP,TOTB,TOTC,TOTL,X
|
---|
| 229 | W !!,"Summarizing..."
|
---|
| 230 | K ^TMP($J)
|
---|
| 231 | S (TOTL,TOTC,TOTB)=0
|
---|
| 232 | S MDSTAT=$O(^MDD(703.9,1,2,"AS","C")) ; will be CT or CR
|
---|
| 233 | I MDSTAT'["C" W !!,"No report was converted. You MUST run the conversion in TEST or",!,"REAL mode first to be able to display the Disk Space Requirements." Q
|
---|
| 234 | D S1 I MDSTAT="CR" S MDSTAT="CT" D S1
|
---|
| 235 | W @IOF,!,"FILE",?42,$J("COUNT",8),?52,$J("LINES",8),?62,$J("BYTES",12)
|
---|
| 236 | W !,$TR($J("",79)," ","-")
|
---|
| 237 | S X="" F S X=$O(^TMP($J,X)) Q:X="" D
|
---|
| 238 | .W !,$E($P(@X,U,1),1,40)
|
---|
| 239 | .W ?42,$J(^TMP($J,X,"C"),8)
|
---|
| 240 | .W ?52,$J(^TMP($J,X,"L"),8)
|
---|
| 241 | .W ?62,$J(^TMP($J,X,"B"),12)
|
---|
| 242 | .S TOTC=TOTC+^TMP($J,X,"C")
|
---|
| 243 | .S TOTL=TOTL+^TMP($J,X,"L")
|
---|
| 244 | .S TOTB=TOTB+^TMP($J,X,"B")
|
---|
| 245 | W !?42,$TR($J("",37)," ","=")
|
---|
| 246 | W !?42,$J(TOTC,8),?52,$J(TOTL,8),?62,$J(TOTB,12) K ^TMP($J)
|
---|
| 247 | Q
|
---|
| 248 | ;
|
---|
| 249 | S1 ; Loop for both CT or CR Statuses
|
---|
| 250 | N X S X="" F S X=$O(^MDD(703.9,1,2,"AS",MDSTAT,X)) Q:X="" D
|
---|
| 251 | .S FILE=$P($G(^MDD(703.9,1,2,X,0)),U,1)
|
---|
| 252 | .S FILE=U_$P(FILE,";",2)_"0)"
|
---|
| 253 | .S ^TMP($J,FILE,"C")=$G(^TMP($J,FILE,"C"))+1
|
---|
| 254 | .S ^TMP($J,FILE,"L")=$G(^TMP($J,FILE,"L"))+$P(^MDD(703.9,1,2,X,0),U,4)
|
---|
| 255 | .S ^TMP($J,FILE,"B")=$G(^TMP($J,FILE,"B"))+$P(^MDD(703.9,1,2,X,0),U,5)
|
---|
| 256 | Q
|
---|
| 257 | TOTALS ; Count by Status
|
---|
| 258 | N MDSTAT S MDSTAT=""
|
---|
| 259 | F S MDSTAT=$O(^MDD(703.9,1,2,"AS",MDSTAT)) Q:MDSTAT="" D
|
---|
| 260 | .S Y=0 F X=0:0 S X=$O(^MDD(703.9,1,2,"AS",MDSTAT,X)) Q:'X S Y=Y+1
|
---|
| 261 | .S MDSTAT(MDSTAT)=Y
|
---|
| 262 | W @IOF,!,"Conversion Totals",!,$TR($J("",35)," ","-")
|
---|
| 263 | W !,"Converted REAL Mode: ",$J(+$G(MDSTAT("CR")),9)
|
---|
| 264 | W !,"Converted TEST Mode: ",$J(+$G(MDSTAT("CT")),9)
|
---|
| 265 | W !,"Skipped: ",$J(+$G(MDSTAT("S")),9)
|
---|
| 266 | W !,"Error: ",$J(+$G(MDSTAT("E")),9)
|
---|
| 267 | Q
|
---|
| 268 | ;
|
---|