| 1 | MAGGTIA ;WOIFO/GEK/RMP - Imaging RPC Broker calls. Add/Modify Image entry ; [ 11/08/2001 17:18 ]
 | 
|---|
| 2 |  ;;3.0;IMAGING;**8,48**;Jan 11, 2005
 | 
|---|
| 3 |  ;; +---------------------------------------------------------------+
 | 
|---|
| 4 |  ;; | Property of the US Government.                                |
 | 
|---|
| 5 |  ;; | No permission to copy or redistribute this software is given. |
 | 
|---|
| 6 |  ;; | Use of unreleased versions of this software requires the user |
 | 
|---|
| 7 |  ;; | to execute a written test agreement with the VistA Imaging    |
 | 
|---|
| 8 |  ;; | Development Office of the Department of Veterans Affairs,     |
 | 
|---|
| 9 |  ;; | telephone (301) 734-0100.                                     |
 | 
|---|
| 10 |  ;; |                                                               |
 | 
|---|
| 11 |  ;; | The Food and Drug Administration classifies this software as  |
 | 
|---|
| 12 |  ;; | a medical device.  As such, it may not be changed in any way. |
 | 
|---|
| 13 |  ;; | Modifications to this software may result in an adulterated   |
 | 
|---|
| 14 |  ;; | medical device under 21CFR820, the use of which is considered |
 | 
|---|
| 15 |  ;; | to be a violation of US Federal Statutes.                     |
 | 
|---|
| 16 |  ;; +---------------------------------------------------------------+
 | 
|---|
| 17 |  ;;
 | 
|---|
| 18 |  Q
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  ;**** CALLING ROUTINE is responsible for RENAMING THE IMAGE FILE
 | 
|---|
| 21 |  ;**** on DISK TO THE NEW FILE NAME RETURNED BY THIS CALL.
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 | ADD(MAGRY,MAGGZ) ; RPC [MAGGADDIMAGE] 
 | 
|---|
| 24 |  ; Call to UPDATE^DIE to Add an Image File entry
 | 
|---|
| 25 |  ; MAGGZ is an array of fields and their entries
 | 
|---|
| 26 |  ;  i.e. MAGGZ(1)=".5^38"  Image File,  field .5   data is 38
 | 
|---|
| 27 |  ; If Long Description is included in fields, we create a new
 | 
|---|
| 28 |  ;  array to hold the text, and pass that to UPDATE^DIE
 | 
|---|
| 29 |  ; If this entry is an object group
 | 
|---|
| 30 |  ;  i.e. MAGGZ(n)="2005.04^344"
 | 
|---|
| 31 |  ;   (the field 2005.04 is the OBJECT GROUP MULTIPLE)
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 |  ; MAGRY - Ret variable (Single Variable)
 | 
|---|
| 34 |  ;  
 | 
|---|
| 35 |  ;   Changed to include hierarchical directory hash  - PMK 04/23/98
 | 
|---|
| 36 |  ;   If successful   MAGRY = IEN^FILE NAME (with full path)
 | 
|---|
| 37 |  ;        IEN is Internal Entry Number of ^MAG(2005
 | 
|---|
| 38 |  ;   If UNsuccessful MAGRY = 0^Error desc
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 |  ; CALLING ROUTINE is responsible for RENAMING THE IMAGE FILE on DISK
 | 
|---|
| 41 |  ;   TO THE NEW FILE NAME RETURNED BY THIS CALL.
 | 
|---|
| 42 |  ;----------------------------------------------------------------
 | 
|---|
| 43 |  N MAGGXE,MAGGFDA,MAGGIEN,MAGGDRV,MAGGR,MAGGRC,MAGGDA,MAGGFNM
 | 
|---|
| 44 |  N MAGGWP,MAGGWPC,MAGGFLD,MAGGDAT,MAGERR,MAGGEXT,MAGGJB
 | 
|---|
| 45 |  N MAGADD,MAGMOD,MAGWRITE,MAGREF,MAGDHASH,MAGDCMSN,MAGDCMIN
 | 
|---|
| 46 |  N MAGBIG,MAGGABS,MAGQY,MAGRET,MAGETXT
 | 
|---|
| 47 |  N MAGFSPEC,MAGFNM
 | 
|---|
| 48 |  N I,J,X,Y,Z,ZZ
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  N $ETRAP,$ESTACK S $ETRAP="D ERR^MAGGTERR"
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  S MAGADD=1 ;Flag says we are adding an entry.
 | 
|---|
| 53 |  S MAGRY="0^Starting Add Image Entry"
 | 
|---|
| 54 |  S MAGERR="",MAGGR=0,MAGGRC=1,MAGGWPC=0
 | 
|---|
| 55 |  I ($D(MAGGZ)<10) S MAGRY="0^No input data, Operation CANCELED" Q
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 |  S Z="" F  S Z=$O(MAGGZ(Z)) Q:Z=""  D  I $L(MAGERR) Q
 | 
|---|
| 58 |  . S MAGGFLD=$P(MAGGZ(Z),U,1),MAGGDAT=$P(MAGGZ(Z),U,2,99)
 | 
|---|
| 59 |  . I MAGGFLD=""!(MAGGDAT="") S MAGRY="0^Field and Value are Required" Q
 | 
|---|
| 60 |  . I MAGGFLD=5 S MAGGDAT=+MAGGDAT ; MOD RED 10/5/95
 | 
|---|
| 61 |  . I MAGGFLD=2005.04 S MAGGDAT=+MAGGDAT ; MOD RED 10/18/95
 | 
|---|
| 62 |  . I MAGGFLD="IEN" S MAGMOD=+MAGGDAT Q
 | 
|---|
| 63 |  . I MAGGFLD="EXT" S MAGGEXT=MAGGDAT Q
 | 
|---|
| 64 |  . I MAGGFLD="ABS" S MAGGABS=MAGGDAT Q
 | 
|---|
| 65 |  . I MAGGFLD="JB" S MAGGJB=MAGGDAT Q
 | 
|---|
| 66 |  . I MAGGFLD="WRITE" S MAGWRITE=MAGGDAT Q
 | 
|---|
| 67 |  . I MAGGFLD="BIG" S MAGBIG=MAGGDAT Q
 | 
|---|
| 68 |  . I MAGGFLD="DICOMSN" S MAGDCMSN=MAGGDAT Q
 | 
|---|
| 69 |  . I MAGGFLD="DICOMIN" S MAGDCMIN=MAGGDAT Q
 | 
|---|
| 70 |  . ;
 | 
|---|
| 71 |  . ; if this is a group object.
 | 
|---|
| 72 |  . I MAGGFLD=2005.04 D  Q
 | 
|---|
| 73 |  . . S MAGGR=1
 | 
|---|
| 74 |  . . I '+MAGGDAT Q  ; making a group entry, with no group entries.
 | 
|---|
| 75 |  . . S MAGGR(MAGGDAT)=""
 | 
|---|
| 76 |  . . S MAGGRC=MAGGRC+1
 | 
|---|
| 77 |  . . I '$D(^MAG(2005,MAGGDAT,0)) S MAGERR="0^Group Object "_MAGGDAT_" doesn't exist"
 | 
|---|
| 78 |  . . S MAGGFDA(2005.04,"+"_MAGGRC_",+1,",.01)=MAGGDAT
 | 
|---|
| 79 |  . ;
 | 
|---|
| 80 |  . ; if we are getting a WP for Long Desc, set array to pass.
 | 
|---|
| 81 |  . I MAGGFLD=11 D  ; this is a line of the WP Long Desc field.
 | 
|---|
| 82 |  . . S MAGGWPC=MAGGWPC+1,MAGGWP(MAGGWPC)=MAGGDAT
 | 
|---|
| 83 |  . ;
 | 
|---|
| 84 |  . ;if a BAD field number
 | 
|---|
| 85 |  . I '$$VFIELD^DILFD(2005,MAGGFLD) S MAGERR="0^Field Number "_MAGGFLD_" doesn't exist" Q
 | 
|---|
| 86 |  . ;
 | 
|---|
| 87 |  . ; Get Field Specifiers
 | 
|---|
| 88 |  . D FIELD^DID(2005,MAGGFLD,"","LABEL;SPECIFIER","MAGFSPEC")
 | 
|---|
| 89 |  . ; if a Date field, we'll convert it here.
 | 
|---|
| 90 |  . I (MAGFSPEC("SPECIFIER")["D") D  Q:$L(MAGERR)
 | 
|---|
| 91 |  . . S %DT="T",X=MAGGDAT D ^%DT
 | 
|---|
| 92 |  . . I Y=-1 S MAGERR="0^Invalid Date: "_MAGGDAT_" Field: "_MAGFSPEC("LABEL") Q
 | 
|---|
| 93 |  . . S MAGGDAT=Y
 | 
|---|
| 94 |  . ;
 | 
|---|
| 95 |  . ;  if a pointer field, we'll assure the pointed to entry exists.
 | 
|---|
| 96 |  . I (MAGFSPEC("SPECIFIER")["P") D  Q:$L(MAGERR)
 | 
|---|
| 97 |  . . I ($$EXTERNAL^DILFD(2005,MAGGFLD,"",MAGGDAT)="") S MAGERR="0^Invalid Value for Field "_MAGFSPEC("LABEL") Q
 | 
|---|
| 98 |  . ;
 | 
|---|
| 99 |  . I (MAGFSPEC("SPECIFIER")["S") D  Q:$L(MAGERR)
 | 
|---|
| 100 |  . . D VAL^DIE(2005,"",MAGGFLD,"",MAGGDAT,.MAGRET,"","MAGETXT") I MAGRET="^" D  Q
 | 
|---|
| 101 |  . . . S MAGERR="0^"_MAGETXT("DIERR",1,"TEXT",1)
 | 
|---|
| 102 |  . . ;P48T1 This assures we are filing the Internal code for a set.
 | 
|---|
| 103 |  . . S MAGGDAT=MAGRET
 | 
|---|
| 104 |  . ;
 | 
|---|
| 105 |  . ; made it here, so set the Node for the UPDATE^DIC Call.
 | 
|---|
| 106 |  . S MAGGFDA(2005,"+1,",MAGGFLD)=MAGGDAT
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 |  ; if there was an Error in data we'll quit now.
 | 
|---|
| 109 |  I $L(MAGERR) S MAGRY=MAGERR Q
 | 
|---|
| 110 |  I $D(MAGMOD) D
 | 
|---|
| 111 |  . I $D(MAGGWP) S MAGGFDA(2005,"+1,",11)="MAGGWP"
 | 
|---|
| 112 |  . S MAGMOD=MAGMOD_","
 | 
|---|
| 113 |  . M MAGXXX(2005,MAGMOD)=MAGGFDA(2005,"+1,") K MAGGFDA
 | 
|---|
| 114 |  . M MAGGFDA=MAGXXX K MAGXXX
 | 
|---|
| 115 |  I $D(MAGMOD) D ADD^MAGGTIA1 Q
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 |  ;  some possible problems, we'll check for now.
 | 
|---|
| 118 |  I '$D(MAGGFDA(2005,"+1,")) S MAGRY="0^No data to file  Operation CANCELED " Q
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 |  ;  We're making Object Type and either Patient, or short Desc Required.
 | 
|---|
| 121 |  I '$D(MAGGFDA(2005,"+1,",3)) S MAGRY="0^Need an Object Type " Q
 | 
|---|
| 122 |  ; Change to require patient. not patient or short desc.
 | 
|---|
| 123 |  I '$D(MAGGFDA(2005,"+1,",5)) D  Q
 | 
|---|
| 124 |  . S MAGRY="0^Need Patient.  Operation CANCELED "
 | 
|---|
| 125 |  ; MAGQA check.
 | 
|---|
| 126 |  D QACHK^MAGGTIA2(.MAGQY,MAGGFDA(2005,"+1,",5),$G(MAGGFDA(2005,"+1,",16)),$G(MAGGFDA(2005,"+1,",17)))
 | 
|---|
| 127 |  I 'MAGQY S MAGRY=MAGQY Q
 | 
|---|
| 128 |  ;-Checking for a missing TYPE value, and generating a value if needed
 | 
|---|
| 129 |  ;- are being deferred to a later patch.
 | 
|---|
| 130 |  ; Check for Image TYPE #42
 | 
|---|
| 131 |  ;-I '$D(MAGGFDA(2005,"+1,",42)) D MAKETYPE^MAGGSIA1 I $L(MAGERR) S MAGRY=MAGERR Q
 | 
|---|
| 132 |  ; Check for Image Class, #41
 | 
|---|
| 133 |  I '$D(MAGGFDA(2005,"+1,",41)) D MAKECLAS^MAGGSIU1 I $L(MAGERR) S MAGRY=MAGERR Q
 | 
|---|
| 134 |  ; IF no Procedure text we'll give it some so crossref will set.
 | 
|---|
| 135 |  I '$D(MAGGFDA(2005,"+1,",6)) S MAGGFDA(2005,"+1,",6)="NO TEXT"
 | 
|---|
| 136 |  ; If no Procedure/Exam Date/Time we'll give it NOW
 | 
|---|
| 137 |  I '$D(MAGGFDA(2005,"+1,",15)) S MAGGFDA(2005,"+1,",15)=$$NOW^XLFDT
 | 
|---|
| 138 |  ; DateTime image saved.
 | 
|---|
| 139 |  I '$D(MAGGFDA(2005,"+1,",7)) S MAGGFDA(2005,"+1,",7)=$$NOW^XLFDT
 | 
|---|
| 140 |  ; If no INSTITUTION pointer then default to the DUZ(2) or the Kernel Site parameter file institution
 | 
|---|
| 141 |  I '$D(MAGGFDA(2005,"+1,",.05)) D
 | 
|---|
| 142 |  . I $D(DUZ(2)) S MAGGFDA(2005,"+1,",.05)=DUZ(2) Q
 | 
|---|
| 143 |  . ;Q:$T(KSP^XUPARAM)=""  //GEK 4/15/2004 Not needed on Gateway anymore
 | 
|---|
| 144 |  . S MAGGFDA(2005,"+1,",.05)=$$KSP^XUPARAM("INST")
 | 
|---|
| 145 |  . Q
 | 
|---|
| 146 |  ;
 | 
|---|
| 147 |  I '$D(MAGGFDA(2005,"+1,",10)) S MAGGFDA(2005,"+1,",10)=$$MAKENAME^MAGGTIA1()
 | 
|---|
| 148 |  ; Only get drive:dir if not a group
 | 
|---|
| 149 |  I 'MAGGR D  I $L(MAGERR) S MAGRY=MAGERR Q
 | 
|---|
| 150 |  . S X=$S($D(MAGGFDA(2005,"+1,",2)):MAGGFDA(2005,"+1,",2),1:"")
 | 
|---|
| 151 |  . S Z=$$DRIVE^MAGGTU1(X)                     ;Drv:Dir to Write
 | 
|---|
| 152 |  . I 'Z S MAGERR=Z Q
 | 
|---|
| 153 |  . S MAGGDRV=$P(Z,U,2)
 | 
|---|
| 154 |  . S MAGGFDA(2005,"+1,",2)=+Z               ;Disk & Vol magnetic
 | 
|---|
| 155 |  . ; if a big file is being made on workstation, put NetWork Location
 | 
|---|
| 156 |  . ; pointer in the BIG NETWORK LOCATION field.
 | 
|---|
| 157 |  . ; (BIG files default to same Network Location as FullRes (or PACS))
 | 
|---|
| 158 |  . I $G(MAGBIG)=1 S MAGGFDA(2005,"+1,",102)=+Z
 | 
|---|
| 159 |  . S MAGREF=+Z ; save network location ien for $$DIRHASH in ^MAGGTIA1
 | 
|---|
| 160 |  . I $G(MAGGABS)="STUFFONLY" S MAGGFDA(2005,"+1,",2.1)=+Z
 | 
|---|
| 161 |  ;
 | 
|---|
| 162 |  ; If a Name (.01) wasn't sent, we'll make one
 | 
|---|
| 163 |  ; We know that either Patient or Short Desc, and Object Type exist
 | 
|---|
| 164 |  I '$D(MAGGFDA(2005,"+1,",.01)) S MAGGFDA(2005,"+1,",.01)=$$MAKENAME^MAGGTIA1()
 | 
|---|
| 165 |  ;
 | 
|---|
| 166 |  ; If a long description was sent.
 | 
|---|
| 167 |  I $D(MAGGWP) S MAGGFDA(2005,"+1,",11)="MAGGWP"
 | 
|---|
| 168 |  ;
 | 
|---|
| 169 |  D ADD^MAGGTIA1 ; continued
 | 
|---|
| 170 |  Q
 | 
|---|