| 1 | LRAPTIUP ;DALOI/WTY - API Print AP Reports from TIU;09/05/2001
 | 
|---|
| 2 |  ;;5.2;LAB SERVICE;**259**;Sep 27, 1994
 | 
|---|
| 3 |  ; This API is used to extract Anatomic Pathology reports that have
 | 
|---|
| 4 |  ; been stored in TIU and print them.
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;Reference  to EXTRACT^TIULQ supported by IA #2693
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 | MAIN(LRTIUDA,LRDEV) ; Control Branching
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  ; LRTIUDA - IEN of document from TIU DOCUMENT (#8925) file
 | 
|---|
| 11 |  ; LRDEV - 1 indicates use device handling in this routine
 | 
|---|
| 12 |  ;         0 indicates use device handling of calling application
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  K ^TMP("LRTIU",$J),^TMP("LRTIUTXT",$J)
 | 
|---|
| 15 |  N LRCNT,LRCNTT,LROR,LRFLG,LRTXT,LRHFLG,LRCNTF
 | 
|---|
| 16 |  S LRDEV=+$G(LRDEV)
 | 
|---|
| 17 |  S LRQUIT=0
 | 
|---|
| 18 |  I '$G(LRTIUDA) D  Q
 | 
|---|
| 19 |  .W $C(7),!,"The IEN from the TIU DOCUMENT (#8925) file is undefined.",!
 | 
|---|
| 20 |  D EXTRACT
 | 
|---|
| 21 |  I LRQUIT D END Q
 | 
|---|
| 22 |  D DISSECT
 | 
|---|
| 23 |  I LRQUIT D END Q
 | 
|---|
| 24 |  D:LRDEV ASKDEV
 | 
|---|
| 25 |  I $G(POP)!LRQUIT D END Q
 | 
|---|
| 26 |  D REPORT
 | 
|---|
| 27 |  D END
 | 
|---|
| 28 |  Q
 | 
|---|
| 29 | EXTRACT ;Extract the report from TIU
 | 
|---|
| 30 |  D EXTRACT^TIULQ(LRTIUDA,"^TMP(""LRTIU"",$J)",,,,1,,1)
 | 
|---|
| 31 |  I '+$P($G(^TMP("LRTIU",$J,LRTIUDA,"TEXT",0)),"^",3) D  Q
 | 
|---|
| 32 |  .W $C(7),!!,"Document not found.",!
 | 
|---|
| 33 |  .S LRQUIT=1
 | 
|---|
| 34 |  M ^TMP("LRTIUTXT",$J)=^TMP("LRTIU",$J,LRTIUDA,"TEXT")
 | 
|---|
| 35 |  Q
 | 
|---|
| 36 | DISSECT ;Dissect the report into header,body, and footer
 | 
|---|
| 37 |  S (LROR,LRCNT,LRCNTT,LRHFLG)=0,LRFLG="H"
 | 
|---|
| 38 |  F  S LROR=$O(^TMP("LRTIUTXT",$J,LROR)) Q:LROR'>0!(LRQUIT)  D
 | 
|---|
| 39 |  .S LRTXT=$G(^TMP("LRTIUTXT",$J,LROR,0))
 | 
|---|
| 40 |  .I 'LRHFLG,LRTXT'="$APHDR" D  Q
 | 
|---|
| 41 |  ..W $C(7),!!,"Document is not an Anatomic Pathology report.",!
 | 
|---|
| 42 |  ..S LRQUIT=1
 | 
|---|
| 43 |  .I LRTXT="$APHDR" D  Q
 | 
|---|
| 44 |  ..S LRHFLG=1
 | 
|---|
| 45 |  ..K ^TMP("LRTIUTXT",$J,LROR)
 | 
|---|
| 46 |  .I LRFLG="H" D  Q:LRFLG="T"
 | 
|---|
| 47 |  ..I LRTXT="$TEXT" D  Q
 | 
|---|
| 48 |  ...S ^TMP("LRTIUTXT",$J,"HDR")=LRCNT,LRCNT=0
 | 
|---|
| 49 |  ...K ^TMP("LRTIUTXT",$J,LROR)
 | 
|---|
| 50 |  ...S LRFLG="T",LRCNT=0
 | 
|---|
| 51 |  ..Q:LRFLG="T"
 | 
|---|
| 52 |  ..S LRCNT=LRCNT+1,LRCNTT=LRCNTT+1
 | 
|---|
| 53 |  ..S ^TMP("LRTIUTXT",$J,"HDR",LRCNT)=LRTXT
 | 
|---|
| 54 |  ..K ^TMP("LRTIUTXT",$J,LROR)
 | 
|---|
| 55 |  .I LRFLG="T" D  Q:LRFLG="F"
 | 
|---|
| 56 |  ..I LRTXT="$FTR" D  Q:LRFLG="F"
 | 
|---|
| 57 |  ...S ^TMP("LRTIUTXT",$J,"TEXT")=LRCNT,LRCNT=0
 | 
|---|
| 58 |  ...K ^TMP("LRTIUTXT",$J,LROR)
 | 
|---|
| 59 |  ...S LRFLG="F"
 | 
|---|
| 60 |  ..Q:LRFLG="F"
 | 
|---|
| 61 |  ..S LRCNT=LRCNT+1,LRCNTT=LRCNTT+1
 | 
|---|
| 62 |  ..S ^TMP("LRTIUTXT",$J,"TEXT",LRCNT)=LRTXT
 | 
|---|
| 63 |  ..K ^TMP("LRTIUTXT",$J,LROR)
 | 
|---|
| 64 |  .I LRFLG="F" D
 | 
|---|
| 65 |  ..S LRCNT=LRCNT+1,LRCNTT=LRCNTT+1
 | 
|---|
| 66 |  ..S ^TMP("LRTIUTXT",$J,"FTR",LRCNT)=LRTXT
 | 
|---|
| 67 |  ..K ^TMP("LRTIUTXT",$J,LROR)
 | 
|---|
| 68 |  S ^TMP("LRTIUTXT",$J,"FTR")=LRCNT
 | 
|---|
| 69 |  S ^TMP("LRTIUTXT",$J,0)=LRCNTT
 | 
|---|
| 70 |  Q
 | 
|---|
| 71 | ASKDEV ;
 | 
|---|
| 72 |  W !
 | 
|---|
| 73 |  S %ZIS="Q" D ^%ZIS
 | 
|---|
| 74 |  I POP W ! S LRQUIT=1 Q
 | 
|---|
| 75 |  I $D(IO("Q")) D
 | 
|---|
| 76 |  .S ZTDESC="Print Anat Path Reports"
 | 
|---|
| 77 |  .S ZTRTN="REPORT^LRAPTIUP"
 | 
|---|
| 78 |  .D ^%ZTLOAD W:$D(ZTSK) !,"Request Queued, #",ZTSK W !
 | 
|---|
| 79 |  .K ZTSK,IO("Q") D HOME^%ZIS
 | 
|---|
| 80 |  .S LRQUIT=1
 | 
|---|
| 81 |  Q
 | 
|---|
| 82 | REPORT ;
 | 
|---|
| 83 |  U IO W:IOST?1"C-".E @IOF
 | 
|---|
| 84 |  N LRPG,LRHDC,LRFTC,LRTXC,LRTOTPGS,LROR1,LROR2,LREND
 | 
|---|
| 85 |  S (LRQUIT,LRPG,LREND)=0
 | 
|---|
| 86 |  S LRHDC=+$G(^TMP("LRTIUTXT",$J,"HDR"))
 | 
|---|
| 87 |  S LRFTC=+$G(^TMP("LRTIUTXT",$J,"FTR"))
 | 
|---|
| 88 |  S LRTXC=+$G(^TMP("LRTIUTXT",$J,"TEXT"))
 | 
|---|
| 89 |  S LRTOTPGS=LRTXC\(IOSL-LRHDC-LRFTC-4)
 | 
|---|
| 90 |  S:LRTXC#(IOSL-LRHDC-LRFTC-4) LRTOTPGS=LRTOTPGS+1
 | 
|---|
| 91 |  D HEADER
 | 
|---|
| 92 |  Q:LRQUIT
 | 
|---|
| 93 |  ;Calculate LR and TIU checksums, if they don't match, set flag
 | 
|---|
| 94 |  ;  to scramble signature on the report.
 | 
|---|
| 95 |  D CHKSUM
 | 
|---|
| 96 |  I LRCKSUM'=0,LRCKSUM'=TIUCKSUM S LRENCRYP=1
 | 
|---|
| 97 |  D BODY
 | 
|---|
| 98 |  Q:LRQUIT
 | 
|---|
| 99 |  S LREND=1
 | 
|---|
| 100 |  D FOOTER
 | 
|---|
| 101 |  Q
 | 
|---|
| 102 | HEADER ;Report Header
 | 
|---|
| 103 |  I LRPG>0,IOST?1"C-".E D  Q:LRQUIT
 | 
|---|
| 104 |  .K DIR S DIR(0)="E"
 | 
|---|
| 105 |  .D ^DIR W !
 | 
|---|
| 106 |  .S:$D(DTOUT)!(X[U) LRQUIT=1
 | 
|---|
| 107 |  W:LRPG>0 @IOF S LRPG=LRPG+1
 | 
|---|
| 108 |  S LROR=0 F  S LROR=$O(^TMP("LRTIUTXT",$J,"HDR",LROR)) Q:LROR'>0  D
 | 
|---|
| 109 |  .S LRTXT=$G(^TMP("LRTIUTXT",$J,"HDR",LROR))
 | 
|---|
| 110 |  .W LRTXT
 | 
|---|
| 111 |  .I LRTXT["MEDICAL RECORD"!(LRTXT["AUTOPSY PROTOCOL") D
 | 
|---|
| 112 |  ..Q:IOST["BROWSER"
 | 
|---|
| 113 |  ..W ?68,"Pg",$J(LRPG,3)," of ",LRTOTPGS
 | 
|---|
| 114 |  .W !
 | 
|---|
| 115 |  Q
 | 
|---|
| 116 | BODY ;Body of Report
 | 
|---|
| 117 |  S LROR1=0
 | 
|---|
| 118 |  F  S LROR1=$O(^TMP("LRTIUTXT",$J,"TEXT",LROR1)) Q:LROR1'>0!(LRQUIT)  D
 | 
|---|
| 119 |  .I $Y>(IOSL-LRFTC-5) D FOOTER,HEADER Q:LRQUIT
 | 
|---|
| 120 |  .S LRTXT=$G(^TMP("LRTIUTXT",$J,"TEXT",LROR1))
 | 
|---|
| 121 |  .I LRTXT["/es/",+$G(LRENCRYP) S LRTXT=$$ENCRYP^XUSRB1(LRTXT)
 | 
|---|
| 122 |  .W LRTXT,!
 | 
|---|
| 123 |  Q
 | 
|---|
| 124 | FOOTER ;Report Footer
 | 
|---|
| 125 |  S (LROR2,LRCNTF)=0
 | 
|---|
| 126 |  I IOSL'>66 F  Q:$Y>(IOSL-LRFTC-5)  W !
 | 
|---|
| 127 |  F  S LROR2=$O(^TMP("LRTIUTXT",$J,"FTR",LROR2)) Q:LROR2'>0  D
 | 
|---|
| 128 |  .S LRCNTF=LRCNTF+1
 | 
|---|
| 129 |  .S LRTXT=$G(^TMP("LRTIUTXT",$J,"FTR",LROR2))
 | 
|---|
| 130 |  .I LRCNTF=2 D  Q
 | 
|---|
| 131 |  ..I LRTXT'=""&(LRTXT'["(End") W LRTXT,! Q
 | 
|---|
| 132 |  ..I 'LREND W ?57,"(See next page)",! Q
 | 
|---|
| 133 |  ..W ?57,"(End of report)",!
 | 
|---|
| 134 |  .W LRTXT,!
 | 
|---|
| 135 |  Q
 | 
|---|
| 136 | CHKSUM ;Compare LR and TIU checksums
 | 
|---|
| 137 |  ;Get original checksum value from file 63
 | 
|---|
| 138 |  N LRTREC,LRROOT,LRFILE,LRIENS,LRFLD,LRREL
 | 
|---|
| 139 |  S (LRENCRYP,LRTREC)=0
 | 
|---|
| 140 |  I LRSS="AU" D
 | 
|---|
| 141 |  .S LRTREC=$O(^LR(LRDFN,101,"C",LRPTR,LRTREC))
 | 
|---|
| 142 |  .S LRIENS=LRDFN_","
 | 
|---|
| 143 |  .S LRFILE=63.101
 | 
|---|
| 144 |  I LRSS'="AU" D
 | 
|---|
| 145 |  .S LRTREC=$O(^LR(LRDFN,LRSS,LRI,.05,"C",LRPTR,LRTREC))
 | 
|---|
| 146 |  .S LRIENS=LRI_","_LRDFN_","
 | 
|---|
| 147 |  .S LRFILE=$S(LRSS="SP":63.19,LRSS="CY":63.47,LRSS="EM":63.49,1:"")
 | 
|---|
| 148 |  I LRFILE=""!(LRTREC=0) S LRCKSUM=0 Q
 | 
|---|
| 149 |  ;Retrieve LR checksum
 | 
|---|
| 150 |  S LRIENS=LRTREC_","_LRIENS
 | 
|---|
| 151 |  S LRCKSUM=$$GET1^DIQ(LRFILE,LRIENS,2)
 | 
|---|
| 152 |  I LRCKSUM="" S LRCKSUM=0
 | 
|---|
| 153 |  ;Calculate TIU checksum
 | 
|---|
| 154 |  S TIUVAL="^TIU(8925,"_LRPTR_",""TEXT"")"
 | 
|---|
| 155 |  S TIUCKSUM=$$CHKSUM^XUSESIG1(TIUVAL)
 | 
|---|
| 156 |  Q
 | 
|---|
| 157 | END ;
 | 
|---|
| 158 |  W:IOST?1"P-".E @IOF
 | 
|---|
| 159 |  I LRDEV D ^%ZISC S:$D(ZTQUEUED) ZTREQ="@"
 | 
|---|
| 160 |  K ^TMP("LRTIU",$J),^TMP("LRTIUTXT",$J)
 | 
|---|
| 161 |  K %,DIR,DTOUT,DUOUT,DIRUT,X,Y
 | 
|---|
| 162 |  Q
 | 
|---|