| 1 | GMTSDVR ; SLC/JER,KER - Health Summary Driver ; 04/30/2002 | 
|---|
| 2 | ;;2.7;Health Summary;**6,16,27,28,30,31,35,49,55**;Oct 20, 1995 | 
|---|
| 3 | ; | 
|---|
| 4 | ; External References | 
|---|
| 5 | ;   DBIA 10090  ^DIC(4 | 
|---|
| 6 | ;   DBIA   510  ^DISV( | 
|---|
| 7 | ;   DBIA 10035  ^DPT( | 
|---|
| 8 | ;   DBIA 10091  ^XMB(1 | 
|---|
| 9 | ;   DBIA 10076  ^XUSEC("GMTS VIEW ONLY" | 
|---|
| 10 | ;   DBIA  2160  ^XUTL("OR" | 
|---|
| 11 | ;   DBIA 10086  ^%ZIS | 
|---|
| 12 | ;   DBIA 10089  ^%ZISC | 
|---|
| 13 | ;   DBIA 10063  ^%ZTLOAD | 
|---|
| 14 | ;   DBIA   148  PATIENT^ORU1 | 
|---|
| 15 | ;   DBIA   183  DFN^PSOSD1 | 
|---|
| 16 | ;   DBIA 10141  $$VERSION^XPDUTL | 
|---|
| 17 | ; | 
|---|
| 18 | MAIN ; Control branching | 
|---|
| 19 | N C,I,GMTYP,VADM,VAROOT,ZTRTN,GMPSAP | 
|---|
| 20 | K DIROUT,DUOUT | 
|---|
| 21 | F  D  Q:$D(DUOUT)!$D(DIROUT)!($D(GMTYP)'>9) | 
|---|
| 22 | . D SELTYP Q:$D(DUOUT)!$D(DIROUT)!($D(GMTYP)'>9) | 
|---|
| 23 | . N GMPAT,GMP | 
|---|
| 24 | . F  Q:$D(DIROUT)  D  Q:$D(DUOUT)!$D(DIROUT)!(+$D(GMPAT)'>0)!(+($G(ORVP))>0) | 
|---|
| 25 | . . K GMP,GMPAT | 
|---|
| 26 | . . I +($G(ORVP)) S GMPAT(1)=+($G(ORVP)) | 
|---|
| 27 | . . E  F  Q:$D(DIROUT)  K ^XUTL("OR",$J,"ORU"),^("ORV"),^("ORW"),^("ORLP"),GMP D PTPC Q:$S($D(DUOUT):1,$D(DIROUT):1,'+$G(GMP):1,1:0)  D | 
|---|
| 28 | . . . W !!,"Another patient(s) can be selected." | 
|---|
| 29 | . . Q:$D(DUOUT)!$D(DIROUT)!(+$D(GMPAT)'>0) | 
|---|
| 30 | . . N GMTSPX1,GMTSPX2 | 
|---|
| 31 | . . I +$G(GMRANGE)>0 D GETRANGE^GMTSU(.GMTSPX2,.GMTSPX1) Q:$G(GMTSPX1)=""!($G(GMTSPX2)="") | 
|---|
| 32 | . . Q:$D(DUOUT)!$D(DIROUT) | 
|---|
| 33 | . . D RESUB(.GMPAT) | 
|---|
| 34 | . . S GMPSAP=$$RXAP^GMTSPD2 Q:$D(DIROUT)!$D(DUOUT)!$D(DTOUT) | 
|---|
| 35 | . . S ZTRTN="PQ^GMTSDVR" | 
|---|
| 36 | . . D HSOUT | 
|---|
| 37 | K ^XUTL("OR",$J,"ORU"),^("ORV"),^("ORW"),^("ORLP") | 
|---|
| 38 | Q | 
|---|
| 39 | PTPC ; Combined Patient/Patient Copy | 
|---|
| 40 | N GMTSPRO,GMTSVER S GMTSVER=+($$VERSION^XPDUTL("OR")),GMTSPRO=+($$PROK^GMTSU("ORU1",11)) | 
|---|
| 41 | D:GMTSVER>2.9&(GMTSPRO) PATIENT^ORU1(.GMP,,"I  $P($G(^(""OOS"")),""^"")") | 
|---|
| 42 | D:GMTSVER'>2.9!('GMTSPRO) PATIENT^ORU1(.GMP) D PATCOPY^GMTSDVR(.GMP,.GMPAT) | 
|---|
| 43 | Q | 
|---|
| 44 | PATCOPY(GMP,GMPAT) ; Copies patients from GMP to GMPAT array | 
|---|
| 45 | N IFN,GMDFN | 
|---|
| 46 | S IFN=0 | 
|---|
| 47 | ;   GMPAT(NAME,GMDFN) - alphabetic order by patient | 
|---|
| 48 | F  S IFN=$O(GMP(IFN)) Q:IFN'>0  D | 
|---|
| 49 | . S GMDFN=+$G(GMP(IFN)) | 
|---|
| 50 | . ;   Get name from ^DPT to prevent duplicates | 
|---|
| 51 | . S GMPAT($P($G(^DPT(GMDFN,0)),U),+GMDFN)=+GMDFN | 
|---|
| 52 | Q | 
|---|
| 53 | RESUB(GMP) ; Resubscript GMP Array | 
|---|
| 54 | ;   Subscripts in GMP array are converted to numeric | 
|---|
| 55 | N NAME,GMDFN,CNT | 
|---|
| 56 | S CNT=0,NAME="" | 
|---|
| 57 | F  S NAME=$O(GMP(NAME)) Q:NAME']""  D | 
|---|
| 58 | . S GMDFN=0 | 
|---|
| 59 | . F  S GMDFN=$O(GMP(NAME,GMDFN)) Q:GMDFN'>0  D | 
|---|
| 60 | . . S CNT=CNT+1 | 
|---|
| 61 | . . S GMP(CNT)=GMP(NAME,GMDFN) | 
|---|
| 62 | . . K GMP(NAME,GMDFN) | 
|---|
| 63 | Q | 
|---|
| 64 | ; | 
|---|
| 65 | ENXQ ; External call for tasked HS print | 
|---|
| 66 | ; | 
|---|
| 67 | ;   Input: GMTSTYP=Record # of HS type in file 142 | 
|---|
| 68 | ;              DFN=Record # of patient in file 2 | 
|---|
| 69 | ;          GMTSPX1=Optional internal FM ending date | 
|---|
| 70 | ;          GMTSPX2=Optional internal FM beginning date | 
|---|
| 71 | ; | 
|---|
| 72 | ;   NOTE:  Optional date range variables are both | 
|---|
| 73 | ;          required if a date range is desired. | 
|---|
| 74 | ; | 
|---|
| 75 | ;   To call from TaskMan: | 
|---|
| 76 | ;          S ZTRTN="ENXQ^GMTSDVR" | 
|---|
| 77 | ;          S ZTSAVE("GMTSTYP")="" | 
|---|
| 78 | ;          S ZTSAVE("DFN")="" | 
|---|
| 79 | ;          D ^%ZTLOAD | 
|---|
| 80 | D ENX(DFN,GMTSTYP,$G(GMTSPX2),$G(GMTSPX1)) | 
|---|
| 81 | Q | 
|---|
| 82 | ; | 
|---|
| 83 | ENX(DFN,GMTSTYP,GMTSPX2,GMTSPX1) ; External call to print a Health Summary | 
|---|
| 84 | ; | 
|---|
| 85 | ;   Input: GMTSTYP=Record # of HS type in file 142 | 
|---|
| 86 | ;              DFN=Record # of patient in file 2 | 
|---|
| 87 | ;          GMTSPX1=Optional internal FM ending date | 
|---|
| 88 | ;          GMTSPX2=Optional internal FM beginning date | 
|---|
| 89 | ; | 
|---|
| 90 | ;   NOTE:  Optional date range variables are both | 
|---|
| 91 | ;          required if a date range is desired. | 
|---|
| 92 | ; | 
|---|
| 93 | N DI,DX,DY,GMQUIT,GMTYP,GMPAT,VADM,VAIN,VAROOT | 
|---|
| 94 | F  Q:($D(^GMT(142,+GMTSTYP,1))>9)&$D(^DPT(DFN))!+$G(GMQUIT)  D | 
|---|
| 95 | . I $D(^GMT(142,+GMTSTYP,1))'>9 D | 
|---|
| 96 | . . I $D(ZTQUEUED) S GMQUIT=1 Q | 
|---|
| 97 | . . W !?3,"Invalid HEALTH SUMMARY TYPE." D SELTYP S GMTSTYP=+$G(GMTYP(1)) | 
|---|
| 98 | . I '$D(^DPT(DFN)) D | 
|---|
| 99 | . . I $D(ZTQUEUED) S GMQUIT=1 Q | 
|---|
| 100 | . . W !?3,"Invalid PATIENT ID." D PATIENT^ORU1(.GMPAT) S DFN=+$G(GMPAT(1)) | 
|---|
| 101 | Q:+$G(GMQUIT) | 
|---|
| 102 | S:$D(GMTYP)'>9 GMTYP(0)=1,GMTYP(1)=+$G(GMTSTYP)_U_$P($G(^GMT(142,+GMTSTYP,0)),U) | 
|---|
| 103 | S:$D(GMPAT)'>9 GMPAT=1,GMPAT(0)=1,GMPAT(1)=DFN_U_$P($G(^DPT(DFN,0)),U) | 
|---|
| 104 | D PQ | 
|---|
| 105 | Q | 
|---|
| 106 | SELTYP ; Select Health Summary Type(s) | 
|---|
| 107 | N DIC,X,Y | 
|---|
| 108 | S DIC=142,DIC("A")="Select Health Summary Type: ",DIC(0)="AEMQZ" | 
|---|
| 109 | S DIC("S")="I $P(^(0),U)'=""GMTS HS ADHOC OPTION""" | 
|---|
| 110 | I $D(GMTYP)<10 S DIC("B")=$S($D(^DISV(DUZ,"^GMT(142,"))=10:$G(^DISV(DUZ,"^GMT(142,",$O(^("^GMT(142,",0)))),1:$P($G(^GMT(142,+$G(^DISV(DUZ,"^GMT(142,")),0)),U)) | 
|---|
| 111 | K GMTYP S Y=$$TYPE^GMTSULT Q:+Y'>0 | 
|---|
| 112 | I $S($D(^GMT(142,+Y,1,0))=0:1,$O(^(0))'>0:1,1:0) W !,"The Summary Type "_$P(Y,U,2)_" includes no components...Please choose another",! Q | 
|---|
| 113 | S GMTYP(0)=1,GMTYP(1)=Y_U_$P(Y,U,2)_U_$P(Y,U,2)_U_$P(Y,U,2) | 
|---|
| 114 | Q | 
|---|
| 115 | PQ ; Queued subroutine for HS by patient | 
|---|
| 116 | N DFN,GMTI,GMTS,GMTS1,GMTS2,GMTSAGE,GMTSDOB,GMTSDTM,GMTSLO,GMTSLPG,GMTSPNM | 
|---|
| 117 | N GMTSRB,GMTSSN,GMTSTOF,GMTSTYP,GMTSTITL,GMTSWARD,GMTJ,I,IX0,J,M4,P17,SEX | 
|---|
| 118 | N GMTSPHDR,TRFAC,VAERR,VAIN | 
|---|
| 119 | S GMTI=0 F  S GMTI=$O(GMTYP(GMTI)) Q:GMTI'>0!$D(DIROUT)  D | 
|---|
| 120 | . N GMTSEG,GMTSEGC,GMTSEGI | 
|---|
| 121 | . S GMTSTYP=+$G(GMTYP(GMTI)),GMTSTITL=$G(^GMT(142,+GMTSTYP,"T")) | 
|---|
| 122 | . S:'$L(GMTSTITL) GMTSTITL=$P(GMTYP(GMTI),U,2) | 
|---|
| 123 | . D LOADSEG | 
|---|
| 124 | . S GMTJ=0 F  S GMTJ=$O(GMPAT(GMTJ)) Q:GMTJ'>0!$D(DIROUT)  D | 
|---|
| 125 | . . S DFN=+$G(GMPAT(GMTJ)) | 
|---|
| 126 | . . N GMDUOUT | 
|---|
| 127 | . . D EN^GMTS1 | 
|---|
| 128 | . . Q:$D(DIROUT)!+$G(GMDUOUT) | 
|---|
| 129 | . . D ACTPROF^GMTSDVR(DFN) | 
|---|
| 130 | Q | 
|---|
| 131 | LOADSEG ; Load Enabled Components into GMTSEG Array | 
|---|
| 132 | N GMTI,GMTJ,GMX | 
|---|
| 133 | S (GMTI,GMTJ)=0 F  S GMTJ=$O(^GMT(142,GMTSTYP,1,GMTJ)) Q:GMTJ'>0  S GMX=^(GMTJ,0) D | 
|---|
| 134 | .S GMTI=GMTI+1,GMTSEG(GMTI)=GMX,GMTSEGI($P(GMX,U,2))=GMTI D SELFILE | 
|---|
| 135 | S GMTSEGC=GMTI | 
|---|
| 136 | Q | 
|---|
| 137 | SELFILE ; Get Selection item information for GMTSEG( | 
|---|
| 138 | N GMTK S GMTK=0 F  S GMTK=$O(^GMT(142,GMTSTYP,1,GMTJ,1,GMTK)) Q:GMTK'>0  D | 
|---|
| 139 | . N GMTSE,GMTSR,GMTSF S GMTSE=^(GMTK,0),GMTSR=U_$P(GMTSE,";",2) Q:GMTSR="^" | 
|---|
| 140 | . S GMTSF=+$P(@(GMTSR_"0)"),U,2) Q:+GMTSF=0 | 
|---|
| 141 | . S GMTSEG(GMTI,GMTSF,GMTK)=$P(GMTSE,";"),GMTSEG(GMTI,GMTSF,0)=GMTSR | 
|---|
| 142 | Q | 
|---|
| 143 | HSOUT ; Output summary, with device control | 
|---|
| 144 | ; Call with: ZTRTN | 
|---|
| 145 | I $D(^XUSEC("GMTS VIEW ONLY",DUZ)) D @ZTRTN Q | 
|---|
| 146 | N %ZIS,IOP | 
|---|
| 147 | S %ZIS="PQ" D ^%ZIS Q:POP | 
|---|
| 148 | G:$D(IO("Q")) QUE | 
|---|
| 149 | NOQUE ; Do Not Queue Output | 
|---|
| 150 | D @ZTRTN D ^%ZISC | 
|---|
| 151 | Q | 
|---|
| 152 | QUE ; Queue output | 
|---|
| 153 | N %,ZTDESC,ZTDTH,ZTIO,ZTSAVE,ZTSK | 
|---|
| 154 | Q:'$D(ZTRTN)  K IO("Q"),ZTSAVE F %="DFN","GM*","ENTRY","O*" S ZTSAVE(%)="" | 
|---|
| 155 | S ZTDESC="HEALTH SUMMARY",ZTIO=ION | 
|---|
| 156 | D ^%ZTLOAD W !,$S($D(ZTSK):"Request Queued!",1:"Request Cancelled!") | 
|---|
| 157 | K ZTSK,ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE D ^%ZISC | 
|---|
| 158 | S IOP="HOME" D ^%ZIS | 
|---|
| 159 | Q | 
|---|
| 160 | ACTPROF(GMDFN) ; Print Action Profile for Patient | 
|---|
| 161 | N DFN,PSTYPE,PSONOPG,PSOPAR,PSOINST | 
|---|
| 162 | I +$G(GMPSAP) D | 
|---|
| 163 | . S (PSTYPE,PSONOPG)=1,DFN=GMDFN | 
|---|
| 164 | . S $P(PSOPAR,U)=$S($P($G(^GMT(142.99,1,0)),U,5)="Y":1,1:0) | 
|---|
| 165 | . S PSOINST=$S(+$G(PSOINST):PSOINST,1:+$P($G(^DIC(4,+$P($G(^XMB(1,1,"XUS")),U,17),99)),U)) | 
|---|
| 166 | . D DFN^PSOSD1 | 
|---|
| 167 | . S DFN=GMDFN | 
|---|
| 168 | . ;   Reset DFN because ^PSOSD1 call kills it | 
|---|
| 169 | . D PAGE^GMTSPL | 
|---|