| 1 | MAGGNTI1 ;WOIFO/GEK - Imaging interface to TIU. RPC Calls etc. ; 04 Apr 2002  2:37 PM | 
|---|
| 2 | ;;3.0;IMAGING;**46,59**;Nov 27, 2007;Build 20 | 
|---|
| 3 | ;; Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ;; +---------------------------------------------------------------+ | 
|---|
| 5 | ;; | Property of the US Government.                                | | 
|---|
| 6 | ;; | No permission to copy or redistribute this software is given. | | 
|---|
| 7 | ;; | Use of unreleased versions of this software requires the user | | 
|---|
| 8 | ;; | to execute a written test agreement with the VistA Imaging    | | 
|---|
| 9 | ;; | Development Office of the Department of Veterans Affairs,     | | 
|---|
| 10 | ;; | telephone (301) 734-0100.                                     | | 
|---|
| 11 | ;; |                                                               | | 
|---|
| 12 | ;; | The Food and Drug Administration classifies this software as  | | 
|---|
| 13 | ;; | a medical device.  As such, it may not be changed in any way. | | 
|---|
| 14 | ;; | Modifications to this software may result in an adulterated   | | 
|---|
| 15 | ;; | medical device under 21CFR820, the use of which is considered | | 
|---|
| 16 | ;; | to be a violation of US Federal Statutes.                     | | 
|---|
| 17 | ;; +---------------------------------------------------------------+ | 
|---|
| 18 | ;; | 
|---|
| 19 | Q | 
|---|
| 20 | NEW(MAGRY,MAGDFN,MAGTITLE,MAGADCL,MAGMODE,MAGES,MAGESBY,MAGLOC,MAGDATE,MAGCNSLT,MAGTEXT) ;RPC [MAG3 TIU NEW] | 
|---|
| 21 | ; | 
|---|
| 22 | ;  RPC call to create a New Note | 
|---|
| 23 | ;  and Optionally : | 
|---|
| 24 | ;     Electronically Sign, | 
|---|
| 25 | ;     Administratively Close | 
|---|
| 26 | ;     or Add Text to the Note. | 
|---|
| 27 | ; | 
|---|
| 28 | ;  - - -  Required  - - - | 
|---|
| 29 | ;  MAGDFN   - Patient DFN | 
|---|
| 30 | ;  MAGTITLE - IEN of TIU Document Title in file 8925.1 | 
|---|
| 31 | ;  - - -  Optional  - - - | 
|---|
| 32 | ;  Use DUZ for TIUAUTH | 
|---|
| 33 | ;  Use NOW for TIURDT | 
|---|
| 34 | ;  MAGTEXT  - Array of Text to add to the New Note. | 
|---|
| 35 | ;  MAGLOC   - IEN in Hospital Location File 44 | 
|---|
| 36 | ;  MAGES    - The encrypted Electronic Signature | 
|---|
| 37 | ;  MAGESBY  - The DUZ of the Signer (Defaults to DUZ) | 
|---|
| 38 | ;  MAGADCL  - 1 = Mark this Note as Administratively Closed | 
|---|
| 39 | ;  MAGMODE  - Mode of Admin Closure: "S" = Scanned Document | 
|---|
| 40 | ;             "M" = Manual closure, "E" = Electronically Filed | 
|---|
| 41 | ;  MAGDATE  - Date of the Note. For New Notes. | 
|---|
| 42 | ;  MAGCNSLT - DA of Consult to Link to. | 
|---|
| 43 | ; | 
|---|
| 44 | N $ETRAP,$ESTACK S $ETRAP="D ERR^"_$T(+0) | 
|---|
| 45 | S MAGDFN=$G(MAGDFN),MAGTITLE=$G(MAGTITLE),MAGLOC=$G(MAGLOC) | 
|---|
| 46 | S MAGES=$G(MAGES),MAGADCL=$G(MAGADCL) | 
|---|
| 47 | S MAGESBY=$S($G(MAGESBY):MAGESBY,1:DUZ) | 
|---|
| 48 | S MAGMODE=$S($L($G(MAGMODE)):MAGMODE,1:"S") | 
|---|
| 49 | S MAGDATE=$G(MAGDATE),MAGCNSLT=$G(MAGCNSLT) | 
|---|
| 50 | N MAGTIUDA,I,NODE,MAGTY,ISVAL,MAGISC,MTXT,MUPD,MAGX,MAGVSTR,MAGTIUX | 
|---|
| 51 | ; | 
|---|
| 52 | ;  MAGMODE is only sent if Admin Closure is wanted. | 
|---|
| 53 | I (MAGMODE="S") S MAGTEXT(.1)="   VistA Imaging - Scanned Document" | 
|---|
| 54 | I (MAGMODE="M") S MAGTEXT(.1)="   VistA Imaging - Manual Closure" | 
|---|
| 55 | I "MSE"'[MAGMODE S MAGRY="0^Invalid Mode of Closure: """_MAGMODE_"""" Q | 
|---|
| 56 | ; | 
|---|
| 57 | ;       Here if we have no Text, we'll add at least a line. | 
|---|
| 58 | I $O(MAGTEXT(""))="" S MAGTEXT(.1)="   VistA Imaging - - Scanned Document" | 
|---|
| 59 | ;               Reformat Text - "TEXT",i,0)"   for TIU Call. | 
|---|
| 60 | S I="",NODE=0 | 
|---|
| 61 | F  S I=$O(MAGTEXT(I)) Q:I=""  D | 
|---|
| 62 | . S NODE=NODE+1 S MAGTIUX("TEXT",NODE,0)=MAGTEXT(I) | 
|---|
| 63 | . Q | 
|---|
| 64 | ;          validate the DFN | 
|---|
| 65 | I '$D(^DPT(+MAGDFN,0)) S MAGRY="0^Invalid data: Patient DFN is invalid" Q | 
|---|
| 66 | ;      validate the User | 
|---|
| 67 | I '$D(^VA(200,MAGESBY,0)) S MAGRY="0^Invalid data: Author DUZ is invalid" Q | 
|---|
| 68 | ;      validate the TIU TITLE | 
|---|
| 69 | I '$D(^TIU(8925.1,MAGTITLE,0)) S MAGRY="0^Invalid data: Note TITLE is invalid" Q | 
|---|
| 70 | ;      validate Esig first, if caller wants to also mark this Note as Signed | 
|---|
| 71 | I +$G(MAGES) I '$$VALES^MAGGNTI2(MAGES) S MAGRY="0^Invalid data: E-sign is invalid" Q | 
|---|
| 72 | ;      validate the Date   MAGDATE is changed to INternal if it is valid. | 
|---|
| 73 | I +$L(MAGDATE) I '$$VALID^MAGGSIV1(8925,1301,.MAGDATE,.MAGX) S MAGRY="0^"_MAGX Q | 
|---|
| 74 | I '$L(MAGDATE) S MAGDATE=$$NOW^XLFDT | 
|---|
| 75 | ; LINK TO CONSULT | 
|---|
| 76 | ; can user create Notes with This Title | 
|---|
| 77 | I '$$CANENTR^TIULP(MAGTITLE) S MAGRY="0^You need privileges to enter notes of that Title" Q | 
|---|
| 78 | ; | 
|---|
| 79 | D ISCNSLT^TIUCNSLT(.MAGISC,MAGTITLE) | 
|---|
| 80 | I MAGISC D  I 'MAGISC S MAGRY=MAGISC Q | 
|---|
| 81 | . ;  See if a Consult DA was sent. | 
|---|
| 82 | . IF 'MAGCNSLT S MAGISC="0^A Consult is needed to link to this note title" | 
|---|
| 83 | . Q | 
|---|
| 84 | I ('MAGISC)&(MAGCNSLT) S MAGRY="0^Cannot Link Consult with a Non Consult Title" Q | 
|---|
| 85 | ; | 
|---|
| 86 | ;               make a VSTR for TIU Call. | 
|---|
| 87 | S MAGVSTR=MAGLOC_";"_MAGDATE_";E" | 
|---|
| 88 | ; | 
|---|
| 89 | ; Call to NEW^TIUPNAPI wasn't doing what we needed. Now call TIU CREATE RECORD | 
|---|
| 90 | ; MAKE(SUCCESS,DFN,TITLE,VDT,VLOC,VSIT,TIUX,VSTR,SUPPRESS,NOASF) | 
|---|
| 91 | D MAKE^TIUSRVP(.MAGTIUDA,MAGDFN,MAGTITLE,"",MAGLOC,"",.MAGTIUX,MAGVSTR) | 
|---|
| 92 | I 'MAGTIUDA!(MAGTIUDA=-1) S MAGRY="0^Error creating Note"_$G(MAGTIUDA) Q | 
|---|
| 93 | S MAGRY=MAGTIUDA_"^Note was created." | 
|---|
| 94 | S MAGTY=MAGRY | 
|---|
| 95 | ; | 
|---|
| 96 | ;       ;Put in the Date that was sent. | 
|---|
| 97 | I '$$VALID^MAGGSIV1(8925,1301,.MAGDATE,.MAGRES) S MAGRY=MAGRY_"  "_MAGRES | 
|---|
| 98 | E  S MTXT(1301)=MAGDATE | 
|---|
| 99 | ; - Fix in T30,  if DUZ isn't MAGESBY, we have Author different than User. | 
|---|
| 100 | I MAGESBY'=DUZ S MTXT("1202")=MAGESBY | 
|---|
| 101 | ;               Update and LINK TO CONSULT if needed. | 
|---|
| 102 | I MAGISC S MTXT("1405")=MAGCNSLT_";GMR(123," | 
|---|
| 103 | I $D(MTXT) D  I 'MUPD S MAGRY=MUPD Q | 
|---|
| 104 | . D UPDATE^TIUSRVP(.MUPD,MAGTIUDA,.MTXT) | 
|---|
| 105 | . Q | 
|---|
| 106 | ; | 
|---|
| 107 | ;               If Admin Close, then We quit. | 
|---|
| 108 | I MAGADCL="1" D  Q | 
|---|
| 109 | . D ADMNCLOS^MAGGNTI2(.MAGTY,MAGDFN,MAGTIUDA,MAGMODE) | 
|---|
| 110 | . S MAGRY=$S('MAGTY:MAGTY,1:MAGRY_"  Administrative Closure.") | 
|---|
| 111 | . Q | 
|---|
| 112 | ; | 
|---|
| 113 | ;               if caller sent esignature to Sign this Note. | 
|---|
| 114 | I $L(MAGES) D | 
|---|
| 115 | . D SIGN^MAGGNTI3(.MAGTY,MAGDFN,MAGTIUDA,MAGES,MAGESBY) | 
|---|
| 116 | . S MAGRY=$S('MAGTY:MAGTY,1:MAGRY_"  Signed.") | 
|---|
| 117 | . Q | 
|---|
| 118 | Q | 
|---|
| 119 | ; | 
|---|
| 120 | ;(MAGRY,MAGDFN,MAGTITLE,MAGADCL,MAGMODE,MAGES,MAGESBY,MAGLOC,MAGTEXT) | 
|---|
| 121 | NEWADD(MAGRY,MAGDFN,MAGTIUDA,MAGADCL,MAGMODE,MAGES,MAGESBY,MAGDATE,MAGTEXT) ; RPC [MAG3 TIU CREATE ADDENDUM] | 
|---|
| 122 | ;  RPC call to create an Addendum to a Note | 
|---|
| 123 | ;  and Optionally : | 
|---|
| 124 | ;           Electronically Sign, | 
|---|
| 125 | ;           Administratively Close, | 
|---|
| 126 | ;           or Add Text to the Addendum | 
|---|
| 127 | ; | 
|---|
| 128 | ;  - - -  Required  - - - | 
|---|
| 129 | ;  MAGDFN   - Patient DFN | 
|---|
| 130 | ;  MAGTIUDA - IEN of TIU NOTE in file 8925 | 
|---|
| 131 | ;  - - -  Optional  - - - | 
|---|
| 132 | ;  MAGTEXT  - Array of Text to add to the New Note. | 
|---|
| 133 | ;  MAGES    - The encrypted Electronic Signature | 
|---|
| 134 | ;  MAGESBY  - The DUZ of the Signer (Defaults to DUZ) | 
|---|
| 135 | ;  MAGADCL  - 1 = Mark this Note as Administratively Closed | 
|---|
| 136 | ;  MAGMODE  - Mode of Admin Closure: "S" = Scanned Document "M" = Manual closure  "E" = Electronically Filed | 
|---|
| 137 | ;  MAGDATE  - Date of the Addendum. | 
|---|
| 138 | ; | 
|---|
| 139 | N $ETRAP,$ESTACK S $ETRAP="D ERR^"_$T(+0) | 
|---|
| 140 | S MAGDFN=$G(MAGDFN),MAGTIUDA=$G(MAGTIUDA),MAGES=$G(MAGES),MAGADCL=$G(MAGADCL) | 
|---|
| 141 | S MAGESBY=$S($G(MAGESBY):MAGESBY,1:DUZ),MAGMODE=$S($L($G(MAGMODE)):MAGMODE,1:"S") | 
|---|
| 142 | S MAGDATE=$G(MAGDATE) | 
|---|
| 143 | ; | 
|---|
| 144 | I '$$VALDATA^MAGGNTI2(.MAGRY,MAGDFN,MAGTIUDA) Q | 
|---|
| 145 | N MAGXT,I,CT,NEWTIUDA,MAGY,MAGRES,MAGUPD | 
|---|
| 146 | S CT=1,I="" | 
|---|
| 147 | S MAGXT("TEXT",1,0)="VistA Imaging  Scanned Document - Addendum." | 
|---|
| 148 | I $D(MAGTEXT) F  S I=$O(MAGTEXT(I)) Q:I=""  D | 
|---|
| 149 | . S CT=CT+1,MAGXT("TEXT",CT,0)=MAGTEXT(I) | 
|---|
| 150 | . Q | 
|---|
| 151 | ; | 
|---|
| 152 | ; Calling TIU CREATE ADDENDUM RECORD | 
|---|
| 153 | D MAKEADD^TIUSRVP(.MAGRY,MAGTIUDA,.MAGXT) | 
|---|
| 154 | ; MAGRY could be 0^error message | 
|---|
| 155 | ;       -1^message | 
|---|
| 156 | ;       TIUDA | 
|---|
| 157 | I $P(MAGRY,"^")<0 S $P(MAGRY,"^")=0 Q | 
|---|
| 158 | S NEWTIUDA=+MAGRY | 
|---|
| 159 | S MAGRY=MAGRY_"^Addendum was created." | 
|---|
| 160 | ; | 
|---|
| 161 | ;Put in the Date that was sent. | 
|---|
| 162 | K MAGUPD | 
|---|
| 163 | I '$$VALID^MAGGSIV1(8925,1301,.MAGDATE,.MAGRES) S MAGRY=MAGRY_"  "_MAGRES | 
|---|
| 164 | E  D | 
|---|
| 165 | . S MAGUPD(1301)=MAGDATE | 
|---|
| 166 | . S MAGUPD(1211)=$$GET1^DIQ(8925,1211,MAGTIUDA,"I") | 
|---|
| 167 | ; - Fix in T30,  if DUZ isn't MAGESBY, we have Author different than User. | 
|---|
| 168 | I MAGESBY'=DUZ S MAGUPD("1202")=MAGESBY | 
|---|
| 169 | I $D(MAGUPD) D | 
|---|
| 170 | . D UPDATE^TIUSRVP(.MAGY,NEWTIUDA,.MAGUPD) | 
|---|
| 171 | . I 'MAGY S MAGRY=MAGRY_" TIU Data was Not Correctly Filed." | 
|---|
| 172 | . Q | 
|---|
| 173 | ; | 
|---|
| 174 | ; if caller sent esignature to Sign this Addendum. | 
|---|
| 175 | I $L(MAGES) D  Q | 
|---|
| 176 | . D SIGN^MAGGNTI3(.MAGTY,MAGDFN,NEWTIUDA,MAGES,MAGESBY) | 
|---|
| 177 | . S MAGRY=$S('MAGTY:MAGTY,1:MAGRY_"  Signed.") | 
|---|
| 178 | . Q | 
|---|
| 179 | ; | 
|---|
| 180 | ; if caller wants to Admin Close this Addendum. | 
|---|
| 181 | I MAGADCL="1" D  Q | 
|---|
| 182 | . D ADMNCLOS^MAGGNTI2(.MAGTY,MAGDFN,NEWTIUDA,MAGMODE) | 
|---|
| 183 | . S MAGRY=$S('MAGTY:MAGTY,1:MAGRY_"  Administrative Closure.") | 
|---|
| 184 | . Q | 
|---|
| 185 | Q | 
|---|
| 186 | MOD(MAGRY,MAGDFN,MAGTIUDA,MAGADCL,MAGMODE,MAGES,MAGESBY,MAGTEXT) ; RPC [MAG3 TIU MODIFY NOTE] | 
|---|
| 187 | ; After a Note is filed, we call this to Modify the Note.  We do this to sign it. | 
|---|
| 188 | ;  That way the Signed Date is After the Image Association  Date/Time. | 
|---|
| 189 | N $ETRAP,$ESTACK S $ETRAP="D ERR^"_$T(+0) | 
|---|
| 190 | S MAGDFN=$G(MAGDFN),MAGTIUDA=$G(MAGTIUDA) | 
|---|
| 191 | S MAGADCL=$G(MAGADCL) | 
|---|
| 192 | S MAGMODE=$S($L($G(MAGMODE)):MAGMODE,1:"S") | 
|---|
| 193 | S MAGES=$G(MAGES) | 
|---|
| 194 | S MAGESBY=$S($G(MAGESBY):MAGESBY,1:DUZ) | 
|---|
| 195 | D MOD^MAGGNTI3(.MAGRY,MAGDFN,MAGTIUDA,MAGADCL,MAGMODE,MAGES,MAGESBY) | 
|---|
| 196 | Q | 
|---|
| 197 | ERR ; ERROR TRAP | 
|---|
| 198 | N ERR S ERR=$$EC^%ZOSV | 
|---|
| 199 | S MAGRY="0^ETRAP: "_ERR | 
|---|
| 200 | D @^%ZOSF("ERRTN") | 
|---|
| 201 | Q | 
|---|
| 202 | SIGN(MAGRY,MAGDFN,MAGTIUDA,MAGES,MAGESBY) ;RPC [MAG3 TIU SIGN RECORD] | 
|---|
| 203 | ; RPC Call to 'Sign' a Note. | 
|---|
| 204 | D SIGN^MAGGNTI3(.MAGRY,$G(MAGDFN),$G(MAGTIUDA),$G(MAGES),$G(MAGESBY)) | 
|---|
| 205 | Q | 
|---|