| 1 | TIUDSCNV ; SLC/JER - Discharge Summary Conversion routine
 | 
|---|
| 2 |  ;;1.0;TEXT INTEGRATION UTILITIES;**9**;Jun 20, 1997
 | 
|---|
| 3 | MAIN ; Control branching
 | 
|---|
| 4 |  N GMRDA,TIUOK,TIUQUEUE,TIURUN,GMRDSTOP
 | 
|---|
| 5 |  I +$P($G(^AUPNPAT(0)),U,3)'=+$P($G(^DPT(0)),U,3),'$D(^GMR(128,"CNV","PXPTPOST")) D  Q:+TIUOK'>0
 | 
|---|
| 6 |  . N TIUPRMT
 | 
|---|
| 7 |  . W !!,"The IHS Patient file appears to be out of synchrony with File #2."
 | 
|---|
| 8 |  . W !,"Before continuing, you must run a program to synchronize these files."
 | 
|---|
| 9 |  . W !,"It may take a few minutes.",!
 | 
|---|
| 10 |  . S TIUPRMT="Would you like me to run that program now"
 | 
|---|
| 11 |  . S TIUOK=$$READ^TIUU("Y",TIUPRMT,"NO")
 | 
|---|
| 12 |  . I +TIUOK'>0 W !,"Okay, hurry back!" Q
 | 
|---|
| 13 |  . I +TIUOK>0 D QUE^PXPTPOST S ^GMR(128,"CNV","PXPTPOST")=1
 | 
|---|
| 14 |  W !!?9,"***************************************************************"
 | 
|---|
| 15 |  W !?9,"* This option will convert your Discharge Summary version 1.0 *"
 | 
|---|
| 16 |  W !?9,"*   Database in preparation for implementation of Discharge   *"
 | 
|---|
| 17 |  W !?9,"*           Summary under Text Integration Utilities...       *"
 | 
|---|
| 18 |  W !?9,"* Although the process is NOT irreversible, we recommend you  *"
 | 
|---|
| 19 |  W !?9,"*  be certain you are prepared to implement before invoking   *"
 | 
|---|
| 20 |  W !?9,"*                         this process!                       *"
 | 
|---|
| 21 |  W !?9,"***************************************************************",!
 | 
|---|
| 22 |  S TIUOK=$$READ^TIUU("Y","         ... Are you sure","NO")
 | 
|---|
| 23 |  I +TIUOK'>0 W !!?9,$C(7),"Very well, no damage done!" Q
 | 
|---|
| 24 |  I +$G(^GMR(128,"CNV","T0")),'+$G(^GMR(128,"CNV","T1")) D  Q:+$G(TIURUN)
 | 
|---|
| 25 |  . W !!,"The DISCHARGE SUMMARY CONVERSION is either still running in another partition,"
 | 
|---|
| 26 |  . W !,"or it has been interrupted...",!
 | 
|---|
| 27 |  . S TIURUN=+$$RUNNING
 | 
|---|
| 28 |  . I +TIURUN W !!,$C(7),"CONVERSION STILL RUNNING IN ANOTHER PARTITION."
 | 
|---|
| 29 |  . E  W !!,"No other instance of the conversion could be detected...You're free to RESTART."
 | 
|---|
| 30 |  I +$P($G(^TIU(8925.97,1,0)),U,2),'+$P($G(^TIU(8925.97,1,0)),U,3) D  Q:+$G(TIURUN)
 | 
|---|
| 31 |  . W !!,"The PROGRESS NOTES CONVERSION is either still running in another partition,"
 | 
|---|
| 32 |  . W !,"or it has been interrupted...",!
 | 
|---|
| 33 |  . S TIURUN=+$$PNRUN
 | 
|---|
| 34 |  . I +TIURUN W !!,$C(7),"PROGRESS NOTES CONVERSION STILL RUNNING IN ANOTHER PARTITION."
 | 
|---|
| 35 |  . E  W !!,"PN CONVERSION is NOT currently running...You're free to begin."
 | 
|---|
| 36 |  S GMRDA=+$G(^GMR(128,"CNV","CHKPNT"))
 | 
|---|
| 37 |  S GMRDSTOP=+$G(^GMR(128,"CNV","STOP #"))
 | 
|---|
| 38 |  I GMRDSTOP'>0 D
 | 
|---|
| 39 |  . S GMRDSTOP=+$P($G(^GMR(128,0)),U,3),^GMR(128,"CNV","STOP #")=GMRDSTOP
 | 
|---|
| 40 |  I +GMRDSTOP'>0 W !!,$C(7),"NO DISCHARGE SUMMARIES TO CONVERT...Bye!",! Q
 | 
|---|
| 41 |  I +GMRDA>0 D
 | 
|---|
| 42 |  . W !!,"CONVERSION HAS ALREADY BEEN RUN..."
 | 
|---|
| 43 |  . W !,"Checkpoint is Record #",GMRDA
 | 
|---|
| 44 |  . I +GMRDSTOP'=+$P($G(^GMR(128,0)),U,3) D
 | 
|---|
| 45 |  . . S GMRDSTOP=+$P(^GMR(128,0),U,3)
 | 
|---|
| 46 |  . . S ^GMR(128,"CNV","STOP #")=GMRDSTOP
 | 
|---|
| 47 |  . W !,"Conversion will stop after record #",GMRDSTOP
 | 
|---|
| 48 |  . S TIUOK=$$READ^TIUU("Y","  Do You Wish to Continue","NO")
 | 
|---|
| 49 |  I +TIUOK'>0 W !!?5,"Very well, no damage done!" Q
 | 
|---|
| 50 |  S TIUQUEUE=$$READ^TIUU("Y","Would you like to QUEUE this Process","NO")
 | 
|---|
| 51 |  I +TIUQUEUE'>0 D  Q
 | 
|---|
| 52 |  . W !!?9,$C(7),"Discharge Summary Conversion Running in Foreground"
 | 
|---|
| 53 |  . D ENQ
 | 
|---|
| 54 |  D QUEUE
 | 
|---|
| 55 |  Q
 | 
|---|
| 56 | QUEUE ; Call Task Manager to process conversion
 | 
|---|
| 57 |  N %,ZTDTH,ZTDESC,ZTIO,ZTSAVE,ZTSK,ZTRTN
 | 
|---|
| 58 |  S ZTRTN="ENQ^TIUDSCNV"
 | 
|---|
| 59 |  S ZTSAVE("GMRDA")="",ZTSAVE("DUZ(")="",ZTSAVE("GMRDSTOP")=""
 | 
|---|
| 60 |  S:'$D(ZTDESC) ZTDESC="TIU DISCHARGE SUMMARY CONVERSION" S ZTIO=""
 | 
|---|
| 61 |  D ^%ZTLOAD W !,$S($D(ZTSK):"Request Queued!",1:"Request Cancelled!")
 | 
|---|
| 62 |  D ^%ZISC
 | 
|---|
| 63 |  Q
 | 
|---|
| 64 | ENQ ; Where the work happens
 | 
|---|
| 65 |  N GMRDCNT,GMRDTOTL
 | 
|---|
| 66 |  S:+$G(GMRDA)'>0 GMRDA=+$G(^GMR(128,"CNV","CHKPNT"))
 | 
|---|
| 67 |  S GMRDCNT=+$G(^GMR(128,"CNV","CNT"))
 | 
|---|
| 68 |  S GMRDTOTL=+$P($G(^GMR(128,0)),U,3)
 | 
|---|
| 69 |  ; --- Get records from file #128 ---
 | 
|---|
| 70 |  S:'$D(^GMR(128,"CNV","T0")) ^GMR(128,"CNV","T0")=$$NOW^TIULC
 | 
|---|
| 71 |  I '$D(ZTQUEUED) D PROGBAR
 | 
|---|
| 72 |  F  S GMRDA=$O(^GMR(128,GMRDA)) Q:(+GMRDA'>0)!(+GMRDA>+GMRDSTOP)!+$G(ZTSTOP)  D
 | 
|---|
| 73 |  . D CONVERT(GMRDA) S GMRDCNT=+$G(GMRDCNT)+1
 | 
|---|
| 74 |  . I '$D(ZTQUEUED) D PROGRESS(GMRDCNT,GMRDTOTL)
 | 
|---|
| 75 |  . S ^GMR(128,"CNV","CNT")=GMRDCNT
 | 
|---|
| 76 |  . I $$S^%ZTLOAD S ZTSTOP=1
 | 
|---|
| 77 |  Q:+$G(ZTSTOP)
 | 
|---|
| 78 |  S ^GMR(128,"CNV","CNT")=GMRDCNT
 | 
|---|
| 79 |  S ^GMR(128,"CNV","T1")=$$NOW^TIULC
 | 
|---|
| 80 |  D BULLETIN ; Send Conversion Bulletin
 | 
|---|
| 81 |  Q
 | 
|---|
| 82 | BULLETIN ; Send Bulletins on completion
 | 
|---|
| 83 |  N TIUCNVCT,TIUMISCT,TIUADMCT,TIUFAIL,TIUBDT,TIUEDT,XMY,XMB,XMDUZ
 | 
|---|
| 84 |  S TIUCNVCT=+$G(^GMR(128,"CNV","SUCCEED"))
 | 
|---|
| 85 |  S TIUMISCT=+$G(^GMR(128,"CNV","FAIL",0))
 | 
|---|
| 86 |  S TIUADMCT=+$P($G(^GMR(128,"CNV","FAIL",0)),U,2)
 | 
|---|
| 87 |  S TIUFAIL=+$G(TIUMISCT)+$G(TIUADMCT)
 | 
|---|
| 88 |  S TIUBDT=$$DATE^TIULS(+$G(^GMR(128,"CNV","T0")),"MM/DD/YY HR:MIN")
 | 
|---|
| 89 |  S TIUEDT=$$DATE^TIULS(+$G(^GMR(128,"CNV","T1")),"MM/DD/YY HR:MIN")
 | 
|---|
| 90 |  S XMY(+$G(DUZ))=""
 | 
|---|
| 91 |  S XMB="TIU DS CONVERSION "_$S(+TIUFAIL>0:"ERRORS",1:"CLEAN")
 | 
|---|
| 92 |  S XMDUZ="TIU DISCHARGE SUMMARY CONVERSION"
 | 
|---|
| 93 |  S XMB(1)=TIUBDT,XMB(2)=TIUEDT,XMB(3)=TIUCNVCT
 | 
|---|
| 94 |  I +TIUFAIL>0 S XMB(4)=TIUFAIL,XMB(5)=TIUMISCT,XMB(6)=TIUADMCT
 | 
|---|
| 95 |  D ^XMB,KILL^XM
 | 
|---|
| 96 |  Q
 | 
|---|
| 97 | PROGBAR ; Write a Progress Bar
 | 
|---|
| 98 |  K LAST
 | 
|---|
| 99 |  ; I '$D(IOINORM) S X="IOINORM;IORVON;IORVOFF" D ENDR^%ZISS
 | 
|---|
| 100 |  W !!,$$CENTER^TIULS("Discharge Summary Conversion in Progress...")
 | 
|---|
| 101 |  W !,$$CENTER^TIULS("Percent Complete")
 | 
|---|
| 102 |  W !,$$CENTER^TIULS("0    10   20   30   40   50   60   70   80   90   100")
 | 
|---|
| 103 |  W !?12,"|"
 | 
|---|
| 104 |  Q
 | 
|---|
| 105 | PROGRESS(COUNT,TOTAL) ; Indicate Progress
 | 
|---|
| 106 |  N PCT,INCR,BAR S PCT=(COUNT/TOTAL)*100
 | 
|---|
| 107 |  S INCR=PCT\2
 | 
|---|
| 108 |  I +$G(LAST)'=$J(INCR,0,0) D
 | 
|---|
| 109 |  . S $P(BAR,"|",(INCR-+$G(LAST))+1)=""
 | 
|---|
| 110 |  . W BAR S LAST=$J(INCR,0,0)
 | 
|---|
| 111 |  I COUNT=TOTAL W "|",!!?20,"DISCHARGE SUMMARY CONVERSION COMPLETE!"
 | 
|---|
| 112 |  Q
 | 
|---|
| 113 | CONVERT(GMRDA,TIUSNGL) ; "Turn or burn!"
 | 
|---|
| 114 |  N GMRD0,GMRDACT,DOCTYP,DFN,GMRDADT,GMRDLDT,TNEW,TIU,TIUTYP,TIUDA,TIUDAD
 | 
|---|
| 115 |  S GMRD0=$G(^GMR(128,+GMRDA,0)),GMRDACT=$G(^GMR(128,+GMRDA,"ACT"))
 | 
|---|
| 116 |  I GMRD0']"" D  Q
 | 
|---|
| 117 |  . N TIUCRCT
 | 
|---|
| 118 |  . S ^GMR(128,"CNV","FAIL",GMRDA)="MISSING INFORMATION"
 | 
|---|
| 119 |  . S TIUCRCT=+$G(^GMR(128,"CNV","FAIL",0))+1
 | 
|---|
| 120 |  . S $P(^GMR(128,"CNV","FAIL",0),U)=TIUCRCT
 | 
|---|
| 121 |  D ALERTDEL^GMRDALRT(GMRDA)
 | 
|---|
| 122 |  S DOCTYP=$S(+$P(GMRD0,U,6):"ADDENDUM",1:"DISCHARGE SUMMARY")
 | 
|---|
| 123 |  S TIUTYP(1)=1_U_+$$WHATITLE^TIUPUTU(DOCTYP)_U_DOCTYP
 | 
|---|
| 124 |  S DFN=+$P(GMRD0,U,2),GMRDADT=$P(GMRD0,U,7)
 | 
|---|
| 125 |  S GMRDLDT=$S($L(GMRDADT,".")=2:$$FMADD^XLFDT(GMRDADT,"","","",1),1:$$FMADD^XLFDT(GMRDADT,1))
 | 
|---|
| 126 |  D MAIN^TIUMOVE(.TIU,.DFN,"",GMRDADT,GMRDLDT,1,"LAST",0)
 | 
|---|
| 127 |  I +$G(TIU("AD#"))'>0 D  Q
 | 
|---|
| 128 |  . N TIUNOVCT
 | 
|---|
| 129 |  . S ^GMR(128,"CNV","FAIL",GMRDA)="NO ADMISSION FOUND"
 | 
|---|
| 130 |  . S TIUNOVCT=+$P($G(^GMR(128,"CNV","FAIL",0)),U,2)+1
 | 
|---|
| 131 |  . S $P(^GMR(128,"CNV","FAIL",0),U,2)=TIUNOVCT
 | 
|---|
| 132 |  I DOCTYP="DISCHARGE SUMMARY" D
 | 
|---|
| 133 |  . S TIUDA=$$GETREC^TIUEDI1(DFN,.TIU,1,.TNEW)
 | 
|---|
| 134 |  . I +$G(TIU("VSTR")) D POST^TIUPXAP1(.TIU,DFN,TIUDA)
 | 
|---|
| 135 |  . D STUFREC^TIUDSCN1(TIUDA,"",GMRD0,GMRDACT)
 | 
|---|
| 136 |  I DOCTYP="ADDENDUM" D
 | 
|---|
| 137 |  . S TIUDA=$$MAKEADD^TIUPUTU
 | 
|---|
| 138 |  . I +$G(TIU("VSTR")) D POST^TIUPXAP1(.TIU,DFN,TIUDA)
 | 
|---|
| 139 |  . S TIUDAD=$$FINDAD(DFN,.TIU,+$P(TIUTYP(1),U,2))
 | 
|---|
| 140 |  . I +TIUDAD'>0 D DELETE^TIUDSCN1(TIUDA),ADDFAIL^TIUDSCN1(GMRDA) Q
 | 
|---|
| 141 |  . D STUFREC^TIUDSCN1(TIUDA,TIUDAD,GMRD0,GMRDACT)
 | 
|---|
| 142 |  D SEND^TIUALRT(TIUDA)
 | 
|---|
| 143 |  D AUDIT^TIUEDI1(TIUDA,0,$$CHKSUM^TIULC("^TIU(8925,"_+TIUDA_",""TEXT"")"))
 | 
|---|
| 144 |  S:'+$G(TIUSNGL) ^GMR(128,"CNV","CHKPNT")=GMRDA_U_TIUDA
 | 
|---|
| 145 |  S ^GMR(128,"CNV","SUCCEED")=+$G(^GMR(128,"CNV","SUCCEED"))+1
 | 
|---|
| 146 |  S ^GMR(128,"CNV","SUCCEED",GMRDA)=TIUDA
 | 
|---|
| 147 |  Q
 | 
|---|
| 148 | RUNNING() ; Evaluate whether conversion is running in another partition
 | 
|---|
| 149 |  N TIUCKP0,TIUCKP1,TIUI,TIUY
 | 
|---|
| 150 |  W !,"Attempting to determine whether conversion has crashed,"
 | 
|---|
| 151 |  W !,"or is still running in another partition..."
 | 
|---|
| 152 |  S TIUCKP0=+$G(^GMR(128,"CNV","CHKPNT")),TIUY=0
 | 
|---|
| 153 |  F TIUI=1:1:1000 D  Q:+TIUY
 | 
|---|
| 154 |  . W:'(TIUI#10) "."
 | 
|---|
| 155 |  . S TIUCKP1=+$G(^GMR(128,"CNV","CHKPNT"))
 | 
|---|
| 156 |  . I TIUCKP1'=TIUCKP0 S TIUY=1
 | 
|---|
| 157 |  Q +$G(TIUY)
 | 
|---|
| 158 | PNRUN() ; Evaluate whether PN conversion is running in another partition
 | 
|---|
| 159 |  N TIUCKP0,TIUCKP1,TIUI,TIUY
 | 
|---|
| 160 |  W !,"Attempting to determine whether PN conversion has crashed,"
 | 
|---|
| 161 |  W !,"or is still running in another partition..."
 | 
|---|
| 162 |  S TIUCKP0=+$P($G(^TIU(8925.97,1,0)),U,5),TIUY=0
 | 
|---|
| 163 |  F TIUI=1:1:1000 D  Q:+TIUY
 | 
|---|
| 164 |  . W:'(TIUI#10) "."
 | 
|---|
| 165 |  . S TIUCKP1=+$P($G(^TIU(8925.97,1,0)),U,5)
 | 
|---|
| 166 |  . I TIUCKP1'=TIUCKP0 S TIUY=1
 | 
|---|
| 167 |  Q +$G(TIUY)
 | 
|---|
| 168 | FINDAD(DFN,TIU,TIUTYPE) ; Find original record for an addendum
 | 
|---|
| 169 |  N TIUY
 | 
|---|
| 170 |  S TIUY=+$O(^TIU(8925,"AV",DFN,1,+$G(TIU("VISIT")),0))
 | 
|---|
| 171 |  I +TIUY'>0 S TIUY=+$O(^TIU(8925,"APTLD",DFN,1,$G(TIU("VSTR")),0))
 | 
|---|
| 172 |  Q TIUY
 | 
|---|